diff --git a/src/ac/wtpman.c b/src/ac/wtpman.c index f4a26226..3b6b7c5c 100644 --- a/src/ac/wtpman.c +++ b/src/ac/wtpman.c @@ -110,7 +110,9 @@ static void wtpman_run_discovery(void *arg) struct conn * conn = wtpman->conn; -conn->strict_capwap=0; +conn->strict_capwap=1; +conn->strict_hdr=1; + conn->capwap_mode=CW_MODE_CIPWAP; @@ -300,7 +302,8 @@ static int wtpman_join(void *arg, time_t timer) struct conn * conn = wtpman->conn; -conn->strict_capwap=0; +conn->strict_capwap=1; +conn->strict_hdr=1; conn->capwap_mode=CW_MODE_CIPWAP; diff --git a/src/capwap/Makefile b/src/capwap/Makefile index 35a3a209..8cfc60b6 100644 --- a/src/capwap/Makefile +++ b/src/capwap/Makefile @@ -20,37 +20,42 @@ endif NAME=libcapwap.a -SOCKOBJS=sock_create.o sock_copyaddr.o sock_strtoaddr.o sock_cmpaddr.o sock_addrlen.o \ - sock_mwait.o sock_addrtostr.o \ - sock_setport.o \ - sock_getport.o \ - sock_getifaddr.o \ - sock_getifhwaddr.o \ - sock_hwaddrtostr.o \ - sock_set_recvtimeout.o \ - sock_getbroadcastaddr.o \ - sock_addrinit.o \ - sock_set_dontfrag.o \ - sock_get_primary_if.o \ - sock_receive.o \ +SOCKOBJS=\ + sock_create.o\ + sock_copyaddr.o\ + sock_strtoaddr.o\ + sock_cmpaddr.o\ + sock_addrlen.o \ + sock_mwait.o\ + sock_addrtostr.o \ + sock_setport.o \ + sock_getport.o \ + sock_getifaddr.o \ + sock_getifhwaddr.o \ + sock_hwaddrtostr.o \ + sock_set_recvtimeout.o \ + sock_getbroadcastaddr.o \ + sock_addrinit.o \ + sock_set_dontfrag.o \ + sock_get_primary_if.o \ + sock_receive.o \ + LOGOBJS=log.o \ log_syslog.o \ log_file.o \ - cw_dbg_elem.o \ - dbg_strings.o + dbg_strings.o\ + dbg.o - - -WTPINFOOBJS = wtpinfo_set_location.o \ +WTPINFOOBJS =\ + wtpinfo_set_location.o \ wtpinfo_print.o UTILOBJS= \ cw_setstr.o \ cw_is_printable.o \ cw_rand.o \ - cw_foreach_msgelem.o \ avltree.o \ avltree_get_node.o \ avltree_get.o \ @@ -66,6 +71,7 @@ UTILOBJS= \ cw_format_version.o \ send.o +# cw_foreach_msgelem.o \ # LWAPP objs @@ -102,7 +108,6 @@ CAPWAPOBJS= \ lwmsg_init.o \ wtpinfo_lwreadelem_wtp_descriptor.o \ hdr_print.o \ - cwmsg_addelem_vendor_cisco_mwar_addr.o \ cw_cisco_id_to_str.o\ cw_strlist_get_str.o \ cw_strlist_get_id.o \ @@ -133,12 +138,12 @@ CAPWAPOBJS= \ cw_in_capwap_control_ipv4_address.o\ strheap.o \ cw_check_missing_mand.o \ - dbg.o \ md5sum.o \ format.o \ #acinfo.o \ +# cwmsg_addelem_vendor_cisco_mwar_addr.o \ # cwsend_unknow_response.o \ cw_send_configuration_update_response.o \ cwsend_echo_request.o \ @@ -207,6 +212,7 @@ cw_readelem_maximum_message_length.o \ cwsend_discovery_response.o \ cw_readelem_cisco_wtp_radio_cfg.o \ cw_addelem_cisco_wtp_radio_cfg.o \ + conn_prepare_request.o \ #cw_ianavendoridtostr.o \ #cwmsg_addelem_result_code.o \ @@ -260,7 +266,6 @@ endif DTLSOBJS+=dtls_bio.o CONNOBJS= conn_create.o \ - conn_send_packet.o \ conn_process_packet.o \ conn_q_add_packet.o \ conn_q_get_packet.o \ @@ -269,21 +274,23 @@ CONNOBJS= conn_create.o \ conn_destroy.o \ connlist.o \ conn_create_noq.o \ - conn_send_response.o \ - conn_prepare_configuration_update_request.o \ - cw_prepare_configuration_status_request.o \ - cw_prepare_change_state_event_request.o \ - conn_prepare_request.o \ conn_init.o \ - conn_send_msg.o + conn_send_packet.o \ + +# conn_send_msg.o #conn_get_message.o \ +# conn_send_response.o \ +# cw_prepare_configuration_status_request.o \ +# cw_prepare_change_state_event_request.o \ + conn_prepare_configuration_update_request.o \ BSTROBJS= bstr_create.o \ bstr_create_from_cfgstr.o \ bstr_replace.o \ - bstr_to_str.o + bstr_to_str.o \ + bstr16cfgstr.o FRAGOBJS=fragman.o diff --git a/src/capwap/bstr.h b/src/capwap/bstr.h index b992d306..44772e6e 100644 --- a/src/capwap/bstr.h +++ b/src/capwap/bstr.h @@ -124,6 +124,7 @@ static inline uint8_t * vendorstr_create(uint32_t vendor_id, uint8_t *data, uint } +uint8_t * bstr16cfgstr(const char * s); #endif diff --git a/src/capwap/capwap.h b/src/capwap/capwap.h index 78e0f2b4..6b6795d3 100644 --- a/src/capwap/capwap.h +++ b/src/capwap/capwap.h @@ -22,13 +22,16 @@ */ + #ifndef __CAPWAP_H #define __CAPWAP_H + #include #include #include +#include #include #include "conn.h" @@ -36,13 +39,23 @@ #include "lwapp.h" #include "strlist.h" + + /* capwap version and iana number */ + +/** + *@defgroup CAPWAPConstants CAPWAP Constants + *@{ + */ + +/** CAPWAP Version */ #define CAPWAP_VERSION ((uint8_t)0) -#define CWIANA_ENTERPRISE_NUMBER 0 /* for capwap base the number */ +#define CWIANA_ENTERPRISE_NUMBER 0 -/* ports */ +/** CAPWAP Control Port*/ #define CAPWAP_CONTROL_PORT 5246 +/** CAPWAP Control Port as String */ #define CAPWAP_CONTROL_PORT_STR "5246" @@ -60,6 +73,7 @@ enum capwap_states { CW_STATE_RUN }; +/**@}*/ /* transport header flags */ @@ -117,8 +131,65 @@ struct capwap_ctrlhdr //extern int capwap_parse_trnsprthdr(struct capwap_trnsprthdr * cwh,uint8_t *msg, int msglen); //extern int capwap_parse_ctrlhdr(struct capwap_ctrlhdr * ch,uint8_t * msg, int len); -/* CAPWAP message types as defined in RFC 5416 */ +/** + *@defgroup CAPWAPMessages CAPWAP Messages + *@{ + */ +/** + * CAPWAP message types as defined in RFC 5416 + */ +typedef enum { + +/**Discovery Request */ +CW_MSG_DISCOVERY_REQUEST = 1, +/** DIscovery Response */ +CW_MSG_DISCOVERY_RESPONSE = 2, +CW_MSG_JOIN_REQUEST = 3, +CW_MSG_JOIN_RESPONSE = 4, + +CW_MSG_CONFIGURATION_STATUS_REQUEST = 5, +CW_MSG_CONFIGURATION_STATUS_RESPONSE = 6, + +CW_MSG_CONFIGURATION_UPDATE_REQUEST = 7, +CW_MSG_CONFIGURATION_UPDATE_RESPONSE = 8, + +CW_MSG_WTP_EVENT_REQUEST = 9, +CW_MSG_WTP_EVENT_RESPONSE = 10, + +CW_MSG_CHANGE_STATE_EVENT_REQUEST = 11, +CW_MSG_CHANGE_STATE_EVENT_RESPONSE = 12, + +CW_MSG_ECHO_REQUEST = 13, +CW_MSG_ECHO_RESPONSE = 14, + +CW_MSG_IMAGE_DATA_REQUEST = 15, +CW_MSG_IMAGE_DATA_RESPONSE = 16, + +CW_MSG_RESET_REQUEST = 17, +CW_MSG_RESET_RESPONSE = 18, + +CW_MSG_PRIMARY_DISCOVERY_REQUEST = 19, +CW_MSG_PRIMARY_DISCOVERY_RESPONSE = 20, + +CW_MSG_DATA_TRANSFER_REQUEST = 21, +CW_MSG_DATA_TRANSFER_RESPONSE = 22, + +CW_MSG_CLEAR_CONFIGURATION_REQUEST = 23, +CW_MSG_CLEAR_CONFIGURATION_RESPONSE = 24, + +CW_STATION_CONFIGURATION_REQUEST = 25, +CW_STATION_CONFIGURATION_RESPONSE = 26, + +CW_MSG_MAXMSG = 26 + +}cw_msg_t; + +/**@}*/ + + + +/* #define CW_MSG_DISCOVERY_REQUEST 1 #define CW_MSG_DISCOVERY_RESPONSE 2 #define CW_MSG_JOIN_REQUEST 3 @@ -158,7 +229,7 @@ struct capwap_ctrlhdr #define CW_STATION_CONFIGURATION_RESPONSE 26 #define CW_MSG_MAXMSG 26 - +*/ /* * CAPWAP message elements as defined in RFC 5415 @@ -813,28 +884,13 @@ extern int cw_send_configuration_update_response(struct conn *conn, int seqnum, /* cwmsg methods */ +/* static inline int cw_addelem_result_code(uint8_t * dst, uint32_t code) { cw_put_dword(dst + 4, code); return 4 + cw_put_elem_hdr(dst, CW_ELEM_RESULT_CODE, 4); } - - -#define cwmsg_addelem_vendor_specific_payload(cwmsg,vendor_id, type, data,len) \ - (cwmsg)->pos+=cw_addelem_vendor_specific_payload((cwmsg)->msgelems+(cwmsg)->pos,vendor_id,type,data,len) - -#define cwmsg_addelem_ac_name(cwmsg,name) \ - (cwmsg)->pos+=cw_addelem_ac_name((cwmsg)->msgelems+(cwmsg)->pos,name) - -#define cwmsg_addelem_session_id(cwmsg,sessid) \ - (cwmsg)->pos+=cw_addelem_session_id((cwmsg)->msgelems+(cwmsg)->pos,sessid) - -#define cwmsg_addelem_result_code(cwmsg,code) \ - (cwmsg)->pos+=cw_addelem_result_code((cwmsg)->msgelems+(cwmsg)->pos,code) - -#define cwmsg_addelem_radio_operational_state(cwmsg,ri) \ - (cwmsg)->pos+=cw_addelem_radio_operational_state((cwmsg)->msgelems+(cwmsg)->pos,ri) - +*/ /* Message to text stuff */ @@ -853,11 +909,29 @@ extern struct cw_str capwap_strings_result[]; #define cw_strvendor(id) cw_strlist_get_str(capwap_strings_vendor,id) #define cw_strresult(id) cw_strlist_get_str(capwap_strings_result,(id)) - +/* #define cw_strrc(rc) \ ((rc)<0 ? ((rc)!=EAGAIN ? strerror(errno):"Timed out"): cw_strresult(rc)) #define cw_strerror(rc) cw_strrc(rc) +*/ +static inline const char * cw_strerror(rc) { + if (rc<0){ + if (errno==EAGAIN) + return "Timed out"; + return strerror(errno); + } + return cw_strresult(rc); +} +#define cw_strrc cw_strerror + +static inline int cw_rcok(int rc) +{ + if (rc==0 || rc==2){ + return 1; + } + return 0; +} diff --git a/src/capwap/capwap_actions.h b/src/capwap/capwap_actions.h index 5d5a3ce2..008b7e1f 100644 --- a/src/capwap/capwap_actions.h +++ b/src/capwap/capwap_actions.h @@ -133,7 +133,7 @@ cw_in_generic, 0, /* start/end callback */ \ CW_ITEMTYPE_DATA, /* Type of element */ \ CW_ITEM_AC_DESCRIPTOR, /* ID to use store */ \ - 6, 6 /* min/max length */ + 12, 8192 /* min/max length */ #define CW_ACTION_IN_RESULT_CODE \ diff --git a/src/capwap/capwap_actions_ac.c b/src/capwap/capwap_actions_ac.c index 01a5f849..dd51f3cb 100644 --- a/src/capwap/capwap_actions_ac.c +++ b/src/capwap/capwap_actions_ac.c @@ -212,6 +212,21 @@ cw_action_out_t capwap_actions_ac_out[] = { , + /* ------------------------------------------------------------------------------- + * Image Data Response OUT + */ + {CW_MSG_CONFIGURATION_STATUS_RESPONSE, CW_ITEM_NONE} + , + + /* Result Code */ + {CW_MSG_CONFIGURATION_STATUS_RESPONSE, CW_ITEM_RESULT_CODE, 0, + CW_ELEM_RESULT_CODE, NULL,cw_out_generic, cw_out_get_outgoing, 1} + , + + + + + /* ------------------------------------------------------------------------------- * Image Data Request OUT */ diff --git a/src/capwap/conn_send_msg.c b/src/capwap/conn_send_msg.c index 7f44f09d..1a66a815 100644 --- a/src/capwap/conn_send_msg.c +++ b/src/capwap/conn_send_msg.c @@ -40,12 +40,12 @@ int conn_send_msg(struct conn * conn, uint8_t *rawmsg) cw_set_hdr_flags(rawmsg,CW_FLAG_HDR_F,1); cw_put_dword(ptr+4, conn->fragid<<16 | fragoffset<<3 ); - + cw_dbg_pkt(DBG_PKT_OUT,conn,ptr,mtu,(struct sockaddr*)&conn->addr); //XXX { - char h[200]; - hdr_print(h,ptr,mtu); - cw_dbg(DBG_PKT_OUT,"Sending capwap packet to %s:\n%s",sock_addr2str(&conn->addr),h); +// char h[200]; +// hdr_print(h,ptr,mtu); +// cw_dbg(DBG_PKT_OUT,"Sending capwap packet to %s:\n%s",sock_addr2str(&conn->addr),h); } // cw_dbg_dmp(DBG_PKT_DMP,ptr,mtu,"Sending packet ..."); @@ -100,6 +100,7 @@ int conn_send_msg(struct conn * conn, uint8_t *rawmsg) //printf("Send packet len %p %d\n",ptr,packetlen); + cw_dbg_pkt(DBG_PKT_OUT,conn,ptr,packetlen,(struct sockaddr*)&conn->addr); return conn->write(conn,ptr,packetlen-0); } diff --git a/src/capwap/cw_in_generic.c b/src/capwap/cw_in_generic.c index f7dcc97b..25295e39 100644 --- a/src/capwap/cw_in_generic.c +++ b/src/capwap/cw_in_generic.c @@ -10,11 +10,11 @@ int cw_in_generic(struct conn *conn,struct cw_action_in * a,uint8_t *data,int len,struct sockaddr *from) { if (lenmin_len) { - cw_dbg(DBG_ELEM_ERR,"Message element too short, %d < %d", len,a->min_len); + cw_dbg(DBG_ELEM_ERR,"%d (%s) message element too short, lan=%d, min len=%d", a->elem_id, cw_strelemp(conn->actions,a->elem_id),len,a->min_len); return 0; } if (len>a->max_len) { - cw_dbg(DBG_ELEM_ERR,"Message element too big, %d > %d", len,a->max_len); + cw_dbg(DBG_ELEM_ERR,"%d (%s) message element too big, len=%d, max len=%d", a->elem_id, cw_strelemp(conn->actions,a->elem_id),len,a->max_len); return 0; } diff --git a/src/capwap/cw_out_wtp_descriptor.c b/src/capwap/cw_out_wtp_descriptor.c index 210affee..a5f55670 100644 --- a/src/capwap/cw_out_wtp_descriptor.c +++ b/src/capwap/cw_out_wtp_descriptor.c @@ -45,5 +45,4 @@ int cw_out_wtp_descriptor(struct conn *conn, struct cw_action_out *a, uint8_t * int len = d-dst-4; return len + cw_put_elem_hdr(dst,a->elem_id,len); - } diff --git a/src/capwap/dbg.c b/src/capwap/dbg.c index ac32a79e..2704acc2 100644 --- a/src/capwap/dbg.c +++ b/src/capwap/dbg.c @@ -447,10 +447,10 @@ void cw_dbg_elem_colored(int level, struct conn *conn, int msg, int msgelem, } - if (!cw_dbg_is_level(DBG_ELEM_DMP)) + if (!cw_dbg_is_level(DBG_ELEM_DMP)){ cw_dbg(DBG_ELEM, "%d (%s), len=%d", msgelem, elemname, len); - + } else{ char *dmp = cw_dbg_mkdmp(msgbuf,len); diff --git a/src/capwap/dbg.h b/src/capwap/dbg.h index a746333d..2f548471 100644 --- a/src/capwap/dbg.h +++ b/src/capwap/dbg.h @@ -58,9 +58,8 @@ void cw_dbg_packet(struct conn *conn, uint8_t * packet, int len); #endif - /** - * @defgroup DebugOptions Dbug Options + * @defgroup DebugOptions Debug Options * @{ */ @@ -158,7 +157,10 @@ extern struct cw_str cw_dbg_strings[]; -#define cw_dbg(type,...) cw_dbg_colored(type,__FILE__,__LINE__,__VA_ARGS__) +#define cw_dbg(type,...)\ + if (cw_dbg_is_level(type)) cw_dbg_colored(type,__FILE__,__LINE__,__VA_ARGS__) + + #define cw_dbg_dmp(type,...) cw_dbg_dmp_(type,__FILE__,__LINE__,__VA_ARGS__) diff --git a/src/capwap/dtls_gnutls_connect.c b/src/capwap/dtls_gnutls_connect.c index 3c34ec62..4bbd63c1 100644 --- a/src/capwap/dtls_gnutls_connect.c +++ b/src/capwap/dtls_gnutls_connect.c @@ -9,7 +9,7 @@ #include "log.h" #include "dbg.h" - +#include "sock.h" int dtls_gnutls_connect(struct conn *conn) { @@ -34,7 +34,7 @@ int dtls_gnutls_connect(struct conn *conn) } - cw_dbg(DBG_DTLS,"DTLS - Handshake successful"); + cw_dbg(DBG_DTLS,"Handshake with %s successful",sock_addr2str(&conn->addr)); conn->dtls_data=d; conn->read = dtls_gnutls_read; diff --git a/src/capwap/itemstore.c b/src/capwap/itemstore.c index a5085bd0..f0c2bf69 100644 --- a/src/capwap/itemstore.c +++ b/src/capwap/itemstore.c @@ -22,8 +22,6 @@ static inline void cw_itemstore_del_data(void *e) break; case CW_ITEMTYPE_AVLTREE: avltree_destroy(item->data); - - } } @@ -244,7 +242,6 @@ void *cw_item_get_data_ptr(struct cw_item *item) } return item->data; - } diff --git a/src/capwap/itemstore.h b/src/capwap/itemstore.h index 1c1e151b..4da6d719 100644 --- a/src/capwap/itemstore.h +++ b/src/capwap/itemstore.h @@ -29,7 +29,7 @@ /** * Item types supported in item store */ -enum cw_cfgtem_types { +typedef enum { CW_ITEMTYPE_NONE = 0, CW_ITEMTYPE_BYTE, CW_ITEMTYPE_WORD, @@ -45,7 +45,7 @@ enum cw_cfgtem_types { CW_ITEMTYPE_AVLTREE, CW_ITEMTYPE_FUN, -}; +} cw_itemtype_t; struct cw_item { uint32_t id; @@ -136,4 +136,8 @@ int cw_itemstore_set_fun(cw_itemstore_t s, uint32_t id, int cw_itemstore_set(cw_itemstore_t itemstore, uint32_t item_id, int item_type, uint8_t * data, int len); +struct cw_item *cw_item_create(cw_itemstore_t s, uint32_t id); + + + #endif diff --git a/src/capwap/lw_checksum.c b/src/capwap/lw_checksum.c index bba05ae3..28f9a325 100644 --- a/src/capwap/lw_checksum.c +++ b/src/capwap/lw_checksum.c @@ -19,6 +19,8 @@ /** *@file *@brief Implements lw_checksum. + *@addtogroup LWAPPFunctions + *@{ */ #include "lwapp.h" @@ -50,3 +52,8 @@ uint16_t lw_checksum(uint8_t * d, int len) return (~sum) & 0xffff; } + +/** + *@} + */ + diff --git a/src/capwap/lwapp.h b/src/capwap/lwapp.h index 17f784fd..d7e1ecf7 100644 --- a/src/capwap/lwapp.h +++ b/src/capwap/lwapp.h @@ -173,6 +173,12 @@ /* useful macros and inline functions */ +/** + * @defgroup LWAPPFunctions LWAPP Functions + * @{ + */ + + #define lw_foreach_elem(d,msg,len) for(d=msg; daddr); + + + /* Zyxel doesn't count msg element length from + behind seqnum */ + if (conn->capwap_mode == CW_MODE_ZYXEL){ + // XXX val-=3; + } + + + uint8_t * ptr = rawmsg; + + int fragoffset = 0; + + int hlen = cw_get_hdr_hlen(rawmsg)*4; + + int mtu = conn->mtu; + + while (packetlen>mtu){ + cw_set_hdr_flags(rawmsg,CW_FLAG_HDR_F,1); + cw_put_dword(ptr+4, conn->fragid<<16 | fragoffset<<3 ); + + cw_dbg_pkt(DBG_PKT_OUT,conn,ptr,mtu,(struct sockaddr*)&conn->addr); + + if (conn->write(conn,ptr,mtu)<0) + return -1; + + // XXX Fragmentation stuff.. + ptr +=mtu-hlen; + fragoffset+=(mtu-hlen)/8; + + packetlen-=mtu-hlen; + + } + + + if (fragoffset) + cw_set_hdr_flags(rawmsg,CW_FLAG_HDR_F | CW_FLAG_HDR_L,1); + else + cw_set_hdr_flags(rawmsg,CW_FLAG_HDR_F,0); + + cw_put_dword(ptr+4, conn->fragid<<16 | fragoffset<<3 ); + + + cw_dbg_pkt(DBG_PKT_OUT,conn,ptr,packetlen,(struct sockaddr*)&conn->addr); + + return conn->write(conn,ptr,packetlen-0); +} + + + + + + + + + + int cw_send_request(struct conn *conn,int msg_id) { cw_init_request(conn, msg_id); @@ -13,8 +80,6 @@ int cw_send_request(struct conn *conn,int msg_id) return 0; conn_send_msg(conn, conn->req_buffer); - - int i; int rc=-1; diff --git a/src/capwap/timer.h b/src/capwap/timer.h index 49fd9072..aefffa3c 100644 --- a/src/capwap/timer.h +++ b/src/capwap/timer.h @@ -1,5 +1,5 @@ /* - This file is part of libcapwap. + Tis file is part of libcapwap. libcapwap is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -50,7 +50,7 @@ /** * Define a clock variable to measure runtime (not CPU runtime, but - * ralt time). This variable can be used with #cw_clock_start + * real time). This variable can be used with #cw_clock_start * and #cw_clock_lap. * * @param c name of the variable diff --git a/src/wtp/Makefile b/src/wtp/Makefile index fdde8712..51e1aae0 100644 --- a/src/wtp/Makefile +++ b/src/wtp/Makefile @@ -20,14 +20,15 @@ ifndef ARCH endif -CFLAGS += -O0 -Wall -g -#CFLAGS += -Os -Wall -LDFLAGS += -L../../src/capwap/$(ARCH) +#CFLAGS += -O0 -Wall -g +CFLAGS += -Os -Wall +LDFLAGS += -L../contrib/jsmn -L../../src/capwap/$(ARCH) LIBS+=-lcapwap LIBS+=-lnl-3 LIBS+=-lnl-genl-3 +LIBS+=-ljsmn CONFOBJS = wtp_conf.o @@ -71,7 +72,7 @@ CFLAGS += $(HA_INCS) #CFLAGS += -I../src #CFLAGS += -I../src/utils -CFLAGS += -I../../src -I /usr/local/include +CFLAGS += -I../../src -I /usr/local/include -I ../contrib/jsmn #CFLAGS += -I/usr/local/include @@ -80,6 +81,7 @@ CFLAGS += -I../../src -I /usr/local/include OBJS += wtp_main.o OBJS += image_update.o +OBJS += cfg.o #OBJS += wtp_conf.o diff --git a/src/wtp/join.c b/src/wtp/join.c index ad090039..a30b06d6 100644 --- a/src/wtp/join.c +++ b/src/wtp/join.c @@ -166,17 +166,13 @@ int run_join(struct conn * conn) int rc = cw_send_request(conn,CW_MSG_JOIN_REQUEST); - if (rc >=0 ) { - cw_dbg(DBG_ELEM,"Join Result: %d - %s",rc,cw_strresult(rc)); - - } - if (rc != 0 && rc != 2) { - cw_log(LOG_ERR,"Can't Join AC at %s, AC returned code: %d - %s.", - sock_addr2str(&conn->addr), - rc,cw_strresult(rc)); + if (!cw_rcok(rc) ) { + cw_log(LOG_ERR,"Can't Join AC at %s: %d - %s.", + sock_addr2str(&conn->addr),rc,cw_strerror(rc)); return 0; } + cw_dbg(DBG_ELEM,"Join Result: %d - %s",rc,cw_strresult(rc)); return 1; } @@ -196,7 +192,7 @@ int join() avliter_foreach(&ii){ cw_acip_t * ip = avliter_get(&ii); - cw_dbg(DBG_ELEM,"Going to join CAWAP controller on %s",sock_addr2str(&ip->ip)); + cw_dbg(DBG_INFO,"Going to join CAWAP controller on %s",sock_addr2str(&ip->ip)); int rc = run_join_d((struct sockaddr*)&ip->ip); if (!rc) diff --git a/src/wtp/wtp.h b/src/wtp/wtp.h index 8fc73065..27e70225 100644 --- a/src/wtp/wtp.h +++ b/src/wtp/wtp.h @@ -9,6 +9,7 @@ extern int sulking_state(); extern int join(); extern int discovery(); extern int image_update(); +extern int setup_conf(struct conn * conn); struct conn * get_conn(); diff --git a/src/wtp/wtp_main.c b/src/wtp/wtp_main.c index a335ea37..2e00a984 100644 --- a/src/wtp/wtp_main.c +++ b/src/wtp/wtp_main.c @@ -15,6 +15,13 @@ #include "capwap/dbg.h" +#include "jsmn.h" + + + + + + /** The one and only connection object */ @@ -23,6 +30,9 @@ struct cw_actiondef capwap_actions; + + + int main() { @@ -55,6 +65,10 @@ int main() conn->incomming = cw_itemstore_create(); conn->local = cw_itemstore_create(); + +// setup_conf(conn); + + cw_itemstore_t board_data = cw_itemstore_create(); cw_itemstore_set_dword(board_data, CW_ITEM_WTP_BOARD_VENDOR, conf_vendor_id); @@ -65,6 +79,7 @@ int main() bstr_data(conf_serial_no), bstr_len(conf_serial_no)); + cw_itemstore_set_avltree(conn->outgoing, CW_ITEM_WTP_BOARD_DATA, board_data);