From 5b623652857e5c51856447520b591e1d765ec8bf Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 1 Apr 2018 10:44:05 +0000 Subject: [PATCH] Work on wtp join FossilOrigin-Name: 6bc5cec137a404301cb7f1089f589c6c03cb24c1b309a6b2f9e8d595a467bc6c --- actube.workspace | 4 +- libcw.project | 3 ++ src/ac/ac.conf | 4 +- src/ac/wtpman.c | 2 +- src/mod/capwap/capwap_actions_ac.c | 4 +- src/mod/capwap/mod_capwap_ac.c | 7 ++- src/mod/capwap80211/capwap80211_messages.c | 2 +- src/mod/cisco/cisco_actions_ac.c | 4 +- src/wtp/config.ktv | 15 +++---- src/wtp/join.c | 39 +++++++++++++--- src/wtp/wtp.h | 1 + src/wtp/wtp_main.c | 52 +++++++++++----------- wtp.project | 2 +- 13 files changed, 84 insertions(+), 55 deletions(-) diff --git a/actube.workspace b/actube.workspace index e0162c79..07586c53 100644 --- a/actube.workspace +++ b/actube.workspace @@ -1,11 +1,11 @@ - + - + diff --git a/libcw.project b/libcw.project index 1c6bf346..b64f9d64 100644 --- a/libcw.project +++ b/libcw.project @@ -271,6 +271,9 @@ + + + diff --git a/src/ac/ac.conf b/src/ac/ac.conf index 193390c1..9da15559 100644 --- a/src/ac/ac.conf +++ b/src/ac/ac.conf @@ -135,7 +135,7 @@ strict_capwap = off # Currently as protocol only capwap is suppert # # Defalut: -listen = 192.168.0.14:1027 +#listen = 192.168.0.14:1027 # broadcast_listen - Broadcast listen address # If ommited, the boraadcast listen adresses a determined automatically @@ -145,7 +145,7 @@ listen = 192.168.0.14:1027 # broadcast_listen = # -broadcast_listen = 192.168.0.255:1027 +#broadcast_listen = 192.168.0.255:1027 # use_loopback # Include loopback interfaces if listen addresses are auto detected diff --git a/src/ac/wtpman.c b/src/ac/wtpman.c index 4bdf269f..c25d8d35 100644 --- a/src/ac/wtpman.c +++ b/src/ac/wtpman.c @@ -688,7 +688,7 @@ struct wtpman *wtpman_create(int socklistindex, struct sockaddr *srcaddr) // struct sockaddr *from); */ wtpman->conn = conn_create(sockfd, srcaddr, 100); - wtpman->conn->receiver = CW_RECEIVER_AC; + wtpman->conn->role = CW_ROLE_AC; wtpman->conn->data_sock = socklist[socklistindex].data_sockfd; sock_copyaddr(&wtpman->conn->data_addr, (struct sockaddr *) &wtpman->conn->addr); diff --git a/src/mod/capwap/capwap_actions_ac.c b/src/mod/capwap/capwap_actions_ac.c index 51500f7a..5f626100 100644 --- a/src/mod/capwap/capwap_actions_ac.c +++ b/src/mod/capwap/capwap_actions_ac.c @@ -190,7 +190,7 @@ static struct cw_MsgDef messages[] = { { "Discovery Request", CAPWAP_MSG_DISCOVERY_REQUEST, - CW_RECEIVER_AC, + CW_ROLE_AC, discovery_request_states, discovery_request_elements }, @@ -198,7 +198,7 @@ static struct cw_MsgDef messages[] = { { "Discovery Response", CAPWAP_MSG_DISCOVERY_RESPONSE, - CW_RECEIVER_WTP, + CW_ROLE_WTP, discovery_response_states, discovery_response_elements }, diff --git a/src/mod/capwap/mod_capwap_ac.c b/src/mod/capwap/mod_capwap_ac.c index 8f165fbc..00e68b9b 100644 --- a/src/mod/capwap/mod_capwap_ac.c +++ b/src/mod/capwap/mod_capwap_ac.c @@ -43,10 +43,13 @@ static int detect(struct conn *conn, const uint8_t * rawmsg, int rawlen, int ele return 1; } + int static setup_cfg(struct conn * conn) { - - + int security; + security = cw_setup_dtls(conn,conn->local_cfg,"capwap",CAPWAP_CIPHER); + cw_ktv_set_byte(conn->local_cfg,"ac-descriptor/security",security); + return 0; } diff --git a/src/mod/capwap80211/capwap80211_messages.c b/src/mod/capwap80211/capwap80211_messages.c index 66c72381..c9d7e31f 100644 --- a/src/mod/capwap80211/capwap80211_messages.c +++ b/src/mod/capwap80211/capwap80211_messages.c @@ -40,7 +40,7 @@ static struct cw_MsgDef messages[] = { { "Discovery Request", CAPWAP_MSG_DISCOVERY_REQUEST, - CW_RECEIVER_AC, + CW_ROLE_AC, discovery_request_states, discovery_request_elements } diff --git a/src/mod/cisco/cisco_actions_ac.c b/src/mod/cisco/cisco_actions_ac.c index 5373da6e..84b81efa 100644 --- a/src/mod/cisco/cisco_actions_ac.c +++ b/src/mod/cisco/cisco_actions_ac.c @@ -157,14 +157,14 @@ static struct cw_MsgDef messages[] = { { NULL, /* name */ CAPWAP_MSG_DISCOVERY_REQUEST, /* type */ - CW_RECEIVER_AC, + CW_ROLE_AC, discovery_request_states, discovery_request_elements }, { NULL, /* name */ CAPWAP_MSG_DISCOVERY_RESPONSE, /* type */ - CW_RECEIVER_WTP, + CW_ROLE_WTP, discovery_response_states, discovery_response_elements }, diff --git a/src/wtp/config.ktv b/src/wtp/config.ktv index 050f7735..0787b601 100644 --- a/src/wtp/config.ktv +++ b/src/wtp/config.ktv @@ -1,15 +1,14 @@ +#capwap/ssl-certfile:Str:../../ssl/certs/wtp.crt + + +capwap/ssl-certfile:Str:"../../ssl/certs/wtp.crt" +capwap/ssl-keyfile:Str:"../../ssl/certs/wtp.key" -windows:Word:124 - -basic/mod:Bstr16:cisco - -ansi/hallo:Dword:1 discovery-type:Byte:0 wtp-frame-tunnel-mode:Byte:1 wtp-mac-type:Byte:2 - wtp-board-data/vendor:Dword:1234567 wtp-board-data/model-no:Bstr16:WFAT1234 @@ -31,12 +30,10 @@ radio/1/wtp-radio-information:Dword:02 wtp-name:Bstr16:WFAT01 - wtp-fallback:Byte:1 -ac-name-with-priority/TubesACx:Byte:3 +ac-name-with-priority/TubesAC:Byte:3 ac-name-with-priority/"ac2":Byte:01 - capwap-timers/max-discovery-interval:Byte:0 capwap-timers/min-discovery-interval:Byte:0 capwap-timers/echo-interval:Byte:3 diff --git a/src/wtp/join.c b/src/wtp/join.c index bedc6ec3..4a09361d 100644 --- a/src/wtp/join.c +++ b/src/wtp/join.c @@ -13,7 +13,7 @@ #include "cw/dbg.h" #include "cw/sock.h" #include "cw/dtls.h" - +#include "cw/mavl.h" #include "wtp.h" @@ -102,12 +102,12 @@ acinfo.result_code=99; int run_join_d(struct conn * conn, struct sockaddr *sa) { char addrstr[SOCK_ADDR_BUFSIZE]; + int sockfd; + /* struct conn *conn = get_conn();*/ conn->capwap_state = CAPWAP_STATE_JOIN; - int sockfd; - int rc; sockfd = socket(sa->sa_family, SOCK_DGRAM, 0); if (sockfd == -1) { @@ -131,9 +131,9 @@ int run_join_d(struct conn * conn, struct sockaddr *sa) return -1; } */ -/* - cw_dbg(DBG_DTLS, "Establishing DTLS session with %s", sock_addr2str(sa, addrstr)); + cw_dbg(DBG_DTLS, "Establishing DTLS session with %s", sock_addr2str(sa, addrstr)); +/* int dtls_conf_ok=0; if (conn->dtls_psk) { @@ -220,11 +220,36 @@ int run_join(struct conn *conn) -int join(struct conn * conn, struct cw_DiscoveryResult dis) +int join(struct conn * conn, struct cw_DiscoveryResult * dis) { mavliter_t ii; - char addrstr[SOCK_ADDR_BUFSIZE]; + mavliter_init(&ii,dis->prio_ip); + + mavliter_foreach(&ii){ + cw_KTV_t * val,*ac; + mavl_t rcfg; + char * rk; + char ipstr[100]; + char ac_name[CAPWAP_MAX_AC_NAME_LEN]; + + val = mavliter_get(&ii); + rk = val->key; + val = val->val.ptr; + val->type->to_str(val, ipstr, 100); + + rcfg = cw_ktv_get_sysptr(dis->prio_ac,rk,NULL); + + ac=cw_ktv_get(rcfg,"ac-name",CW_TYPE_BSTR16); + if (ac != NULL){ + ac->type->to_str(ac,ac_name,sizeof(ac_name)); + } + else{ + strcpy(ac_name,""); + } + + cw_dbg(DBG_INFO, "Going to join CAPWAP controller '%s' at %s.",ac_name,ipstr); + } /*mbag_del_all(conn->incomming);*/ diff --git a/src/wtp/wtp.h b/src/wtp/wtp.h index 3d1c12da..5e884867 100644 --- a/src/wtp/wtp.h +++ b/src/wtp/wtp.h @@ -27,6 +27,7 @@ int cw_run_discovery(struct conn *conn, const char *acaddr, const char *bindaddr int cw_discovery_init_results(struct cw_DiscoveryResult *dis); void cw_discovery_free_results(struct cw_DiscoveryResult * dis); +int join(struct conn * conn, struct cw_DiscoveryResult * dis); struct conn * get_conn(); diff --git a/src/wtp/wtp_main.c b/src/wtp/wtp_main.c index f70da330..721667e3 100644 --- a/src/wtp/wtp_main.c +++ b/src/wtp/wtp_main.c @@ -81,7 +81,7 @@ int main (int argc, char **argv) mavl_t global_cfg, types_tree; const cw_Type_t ** ti; int i; - + struct cw_DiscoveryResult dis; bootcfg.nmods=0; @@ -129,6 +129,24 @@ int main (int argc, char **argv) cw_dbg_ktv_dump(global_cfg,DBG_CFG_DMP,"----- global cfg start -----","","----- global cfg end -----"); + /* create a connection object */ + conn = conn_create_noq(-1, NULL); + if (conn==NULL){ + cw_log(LOG_ERR, "Connot create conn: %s", strerror(errno)); + exit(EXIT_FAILURE); + } + + +/* conn->mod=mod;*/ + conn->detected = 1; + conn->dtls_verify_peer=0; + conn->dtls_mtu = 12000; + conn->msgset=msgset; + conn->local_cfg = global_cfg; + conn->remote_cfg = NULL; + conn->role = CW_ROLE_WTP; + conn->wbid=1; + for (i=0;iregister_messages(msgset, CW_MOD_MODE_CAPWAP); mod->register_messages(msgset, CW_MOD_MODE_BINDINGS); + if (mod->setup_cfg) + mod->setup_cfg(conn); } - - /* create a connection object */ - conn = conn_create_noq(-1, NULL); - if (conn==NULL){ - cw_log(LOG_ERR, "Connot create conn: %s", strerror(errno)); - exit(EXIT_FAILURE); - } - - - conn->detected = 1; - conn->dtls_verify_peer=0; - conn->dtls_mtu = 12000; - conn->msgset=msgset; - conn->local_cfg = global_cfg; - conn->remote_cfg = NULL; - conn->receiver = CW_ROLE_WTP; - conn->wbid=1; - struct cw_DiscoveryResult dis; + + cw_discovery_init_results(&dis); - - - cw_run_discovery(conn, "255.255.255.255",NULL, &dis); - cw_dbg_ktv_dump(dis.prio_ip, DBG_INFO, "=== IP list ===", "IP", "=== END IP List ==="); - - - +/* { mavliter_t i; mavliter_init(&i, dis.prio_ip); @@ -191,6 +189,8 @@ int main (int argc, char **argv) } } +*/ + join(conn,&dis); cw_discovery_free_results(&dis); diff --git a/wtp.project b/wtp.project index c584a37a..5145af70 100644 --- a/wtp.project +++ b/wtp.project @@ -50,7 +50,7 @@ - +