From 5a80bdecea324a7cd6e22eb7cd4071b41d95c08f Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sat, 18 Apr 2015 09:20:24 +0000 Subject: [PATCH] WTP work... FossilOrigin-Name: c770fa37c379da9fb78feebb463e2843ba8179e3f9026687dcfb44b4c7c47388 --- src/capwap/capwap.h | 28 ++++ src/capwap/capwap_action_helpers.c | 14 +- src/capwap/capwap_actions_wtp.c | 14 +- src/capwap/capwap_items.h | 2 +- src/capwap/cipwap_actions_ac.c | 2 +- src/capwap/conn.h | 2 + src/capwap/conn_process_packet.c | 17 ++- src/capwap/cw_in_wtp_board_data.c | 2 + src/capwap/cw_in_wtp_descriptor.c | 12 +- src/capwap/cw_out_wtp_board_data.c | 10 +- src/capwap/cw_out_wtp_descriptor.c | 12 +- src/wtp/cfg.c | 223 +++++++++++++++++++++++------ src/wtp/cfg.json | 25 +++- src/wtp/configure.c | 4 +- src/wtp/image_update.c | 2 +- src/wtp/join.c | 2 + src/wtp/wtp_main.c | 15 +- 17 files changed, 306 insertions(+), 80 deletions(-) diff --git a/src/capwap/capwap.h b/src/capwap/capwap.h index 95e1d805..dd55e786 100644 --- a/src/capwap/capwap.h +++ b/src/capwap/capwap.h @@ -633,6 +633,8 @@ extern int cw_readmsg_configuration_update_request(uint8_t * elems, int elems_le #define cw_set_hdr_preamble(th,v) ((*th)=v) + + /** * Set the HLEN field of a CAWAP Header * @param th pointer to the header @@ -726,6 +728,32 @@ static inline int cw_get_hdr_msg_total_len(uint8_t * rawmsg) return offset + cw_get_msg_elems_len(rawmsg + offset) + 8; } + + +static inline int cw_set_hdr_rmac(uint8_t * th,bstr_t rmac) +{ + if (!rmac){ + cw_set_hdr_flags(th,CW_FLAG_HDR_M,0); + cw_set_hdr_hlen(th, 2); + return 0; + } + int rmac_len = bstr_len(rmac); + memcpy(cw_get_hdr_rmac(th),rmac,rmac_len+1); + cw_set_hdr_flags(th,CW_FLAG_HDR_M,1); + + int hlen = 4+rmac_len/4; + + if (rmac_len %4 != 0) { + hlen++; + } + cw_set_hdr_hlen(th,hlen); + return 1; +} + + + + + /** * Get length of a CAPWAP message elemet * @param e pointer to element (uint8_t*) diff --git a/src/capwap/capwap_action_helpers.c b/src/capwap/capwap_action_helpers.c index e792a34d..244184ba 100644 --- a/src/capwap/capwap_action_helpers.c +++ b/src/capwap/capwap_action_helpers.c @@ -38,11 +38,19 @@ struct cw_item *cw_out_get_local(struct conn *conn, struct cw_action_out *a) struct cw_item * cw_out_get_session_id(struct conn *conn,struct cw_action_out * a) { uint8_t session_id[16]; - int l = cw_rand(session_id,16); - if ( l!=16 ) { + + int slen; + if ( conn->capwap_mode == CW_MODE_CISCO){ + slen=4; + } + else + slen=16; + + int l = cw_rand(session_id,slen); + if ( l!=slen ) { cw_log(LOG_ERR,"Can't init session ID."); return NULL; } - return cw_itemstore_set_bstrn(conn->local,CW_ITEM_SESSION_ID,session_id,16); + return cw_itemstore_set_bstrn(conn->local,CW_ITEM_SESSION_ID,session_id,slen); } diff --git a/src/capwap/capwap_actions_wtp.c b/src/capwap/capwap_actions_wtp.c index be9e46be..fd7f57a2 100644 --- a/src/capwap/capwap_actions_wtp.c +++ b/src/capwap/capwap_actions_wtp.c @@ -111,13 +111,23 @@ cw_action_out_t capwap_actions_wtp_out[] = { {CW_MSG_DISCOVERY_REQUEST, CW_ITEM_DISCOVERY_TYPE, 0, CW_ELEM_DISCOVERY_TYPE, NULL,cw_out_generic, cw_out_get_outgoing} , + {CW_MSG_DISCOVERY_REQUEST, CW_ITEM_WTP_FRAME_TUNNEL_MODE, 0, + CW_ELEM_WTP_FRAME_TUNNEL_MODE, NULL,cw_out_generic, cw_out_get_local,1} + , + {CW_MSG_DISCOVERY_REQUEST, CW_ITEM_WTP_MAC_TYPE, 0, + CW_ELEM_WTP_MAC_TYPE, NULL,cw_out_generic, cw_out_get_local,1} + , /* WTP Board Data */ {CW_MSG_DISCOVERY_REQUEST, CW_ITEM_WTP_BOARD_DATA, 0, - CW_ELEM_WTP_BOARD_DATA, NULL,cw_out_wtp_board_data, cw_out_get_outgoing} + CW_ELEM_WTP_BOARD_DATA, NULL,cw_out_wtp_board_data, cw_out_get_outgoing,1} , - + /* WTP Descriptor */ + {CW_MSG_DISCOVERY_REQUEST, CW_ITEM_WTP_DESCRIPTOR, 0, + CW_ELEM_WTP_DESCRIPTOR, NULL,cw_out_wtp_descriptor, NULL,1} + , + /* ------------------------------------------------------------------------------- * Join Request OUT diff --git a/src/capwap/capwap_items.h b/src/capwap/capwap_items.h index e245620d..ed722528 100644 --- a/src/capwap/capwap_items.h +++ b/src/capwap/capwap_items.h @@ -53,7 +53,7 @@ enum capwap_items { /* Other Items */ CW_ITEM_AC_IMAGE_DIR, /* Path where WTP images are stored */ - CW_ITEM_IMAGE_FILENAME, /* Full path of image filename */ + CW_ITEM_IMAGE_FILENAME, /* Full path of image filename */ CW_ITEM_DISCOVERIES, CW_ITEM_AC_PRIO_LIST, /* AC Name with Priority list */ CW_ITEM_IMAGE_FILEHANDLE /* FILE handle for uploading and downloading images */ diff --git a/src/capwap/cipwap_actions_ac.c b/src/capwap/cipwap_actions_ac.c index 3a7daebb..eda02332 100644 --- a/src/capwap/cipwap_actions_ac.c +++ b/src/capwap/cipwap_actions_ac.c @@ -21,7 +21,7 @@ cw_in_cipwap_wtp_descriptor, 0, /* start/end callback */ \ 0, \ CW_ITEM_WTP_DESCRIPTOR, \ - 0,0 + 8,1028 /* For CIPWAP we allow a Session ID with 4 .. 16 bytes length */ diff --git a/src/capwap/conn.h b/src/capwap/conn.h index 48712f42..01a102cd 100644 --- a/src/capwap/conn.h +++ b/src/capwap/conn.h @@ -53,6 +53,8 @@ struct conn { cw_itemstore_t remote; cw_itemstore_t local; + /** base_mac */ + bstr_t base_rmac; /** Wireless Binding ID of this connection */ uint8_t wbid; diff --git a/src/capwap/conn_process_packet.c b/src/capwap/conn_process_packet.c index 69e6b20b..2538e5f3 100644 --- a/src/capwap/conn_process_packet.c +++ b/src/capwap/conn_process_packet.c @@ -52,8 +52,14 @@ void cw_init_response(struct conn *conn, uint8_t * req) int shbytes = cw_get_hdr_msg_offset(req); int dhbytes; memcpy(buffer, req, shbytes); - cw_set_hdr_hlen(buffer, 2); - cw_set_hdr_flags(buffer, CW_FLAG_HDR_M, 1); + + + cw_set_hdr_rmac(buffer,conn->base_rmac); +// cw_set_hdr_hlen(buffer, 2); +// cw_set_hdr_flags(buffer, CW_FLAG_HDR_M, 1); + + + dhbytes = cw_get_hdr_msg_offset(buffer); uint8_t *msgptr = req + shbytes; @@ -74,10 +80,15 @@ void cw_init_request(struct conn *conn, int msg_id) /* unencrypted */ cw_set_hdr_preamble(buffer, CAPWAP_VERSION << 4 | 0); + + cw_set_hdr_rmac(buffer,conn->base_rmac); + //cw_set_hdr_hlen(buffer, 2); + - cw_set_hdr_hlen(buffer, 2); cw_set_hdr_wbid(buffer, 1); cw_set_hdr_rid(buffer, 0); + + uint8_t *msgptr = cw_get_hdr_msg_offset(buffer) + buffer; cw_set_msg_type(msgptr, msg_id); cw_set_msg_flags(msgptr, 0); diff --git a/src/capwap/cw_in_wtp_board_data.c b/src/capwap/cw_in_wtp_board_data.c index 316af293..69fee7c9 100644 --- a/src/capwap/cw_in_wtp_board_data.c +++ b/src/capwap/cw_in_wtp_board_data.c @@ -36,6 +36,8 @@ static void readsubelems_wtp_board_data(cw_itemstore_t itemstore, uint8_t * msgelem, int len) { + if (len<4) + return; int i = 0; uint32_t val; diff --git a/src/capwap/cw_in_wtp_descriptor.c b/src/capwap/cw_in_wtp_descriptor.c index 98e0d59d..7901c3a0 100644 --- a/src/capwap/cw_in_wtp_descriptor.c +++ b/src/capwap/cw_in_wtp_descriptor.c @@ -32,7 +32,8 @@ static int cw_read_wtp_descriptor_versions(cw_itemstore_t itemstore, uint8_t * d int len, int silent) { int i = 0; - do { + while (i len) { if (!silent) cw_dbg(DBG_ELEM_ERR, @@ -51,7 +52,7 @@ static int cw_read_wtp_descriptor_versions(cw_itemstore_t itemstore, uint8_t * d if (sublen + i > len) { if (!silent) cw_dbg(DBG_ELEM_ERR, - "WTP Descriptor subelement too long, length = %d", + "WTP Descriptor sub-element too long, length = %d", sublen); return 0; } @@ -82,8 +83,9 @@ static int cw_read_wtp_descriptor_versions(cw_itemstore_t itemstore, uint8_t * d break; case CW_SUBELEM_WTP_SOFTWARE_VERSION: - cw_itemstore_set_vendorstr(itemstore,CW_ITEM_WTP_SOFTWARE_VERSION, - vendor_id,data+i,sublen); + cw_itemstore_set_vendorstr(itemstore, + CW_ITEM_WTP_SOFTWARE_VERSION, + vendor_id, data + i, sublen); /* cw_itemstore_set_dword(itemstore, CW_ITEM_WTP_SOFTWARE_VENDOR, @@ -111,7 +113,7 @@ static int cw_read_wtp_descriptor_versions(cw_itemstore_t itemstore, uint8_t * d } i += sublen; - } while (i < len); + } //while (i < len); return 1; diff --git a/src/capwap/cw_out_wtp_board_data.c b/src/capwap/cw_out_wtp_board_data.c index 96782522..b6e819d4 100644 --- a/src/capwap/cw_out_wtp_board_data.c +++ b/src/capwap/cw_out_wtp_board_data.c @@ -9,9 +9,9 @@ int cw_out_wtp_board_data(struct conn *conn, struct cw_action_out *a, uint8_t * dst) { cw_itemstore_t board_data = - cw_itemstore_get_avltree(conn->outgoing, CW_ITEM_WTP_BOARD_DATA); + cw_itemstore_get_avltree(conn->local, CW_ITEM_WTP_BOARD_DATA); if (!board_data) { - cw_log(LOG_ERR, "Error: Can't send WTP Board Data element - not defined"); + cw_log(LOG_ERR, "Error: Can't send WTP Board Data element. WTP Board Data is not defined."); return 0; } @@ -33,7 +33,7 @@ int cw_out_wtp_board_data(struct conn *conn, struct cw_action_out *a, uint8_t * d += cw_put_data(d, bstr16_data(i->data), bstr16_len(i->data)); } else { cw_log(LOG_ERR, - "Error: Can't set sub-element \"Model No.\" in WTP Board Data."); + "Error: Can't set sub-element \"WTP Model Number\" in WTP Board Data."); } i = cw_itemstore_get(board_data, CW_ITEM_WTP_BOARD_SERIALNO); @@ -41,8 +41,12 @@ int cw_out_wtp_board_data(struct conn *conn, struct cw_action_out *a, uint8_t * d += cw_put_word(d, CW_BOARDDATA_SERIALNO); d += cw_put_word(d, bstr16_len(i->data)); d += cw_put_data(d, bstr16_data(i->data), bstr16_len(i->data)); + }else { + cw_log(LOG_ERR, + "Error: Can't set sub-element \"WTP Serial Number\" in WTP Board Data."); } + i = cw_itemstore_get(board_data, CW_ITEM_WTP_BOARD_ID); if (i) { d += cw_put_word(d, CW_BOARDDATA_BOARDID); diff --git a/src/capwap/cw_out_wtp_descriptor.c b/src/capwap/cw_out_wtp_descriptor.c index a5f55670..c3cbe40d 100644 --- a/src/capwap/cw_out_wtp_descriptor.c +++ b/src/capwap/cw_out_wtp_descriptor.c @@ -5,9 +5,11 @@ #include "capwap_items.h" #include "capwap.h" - -static int cw_put_enc_subelems(uint8_t *dst) +static int cw_put_encryption_subelems(uint8_t *dst) { +cw_put_word(dst,0x01); +return 2; + int n=2; dst+=cw_put_byte(dst,n); @@ -29,9 +31,9 @@ int cw_out_wtp_descriptor(struct conn *conn, struct cw_action_out *a, uint8_t * // XXX Dummy WTP Descriptor Header uint8_t *d = dst+4; - d+=cw_put_byte(d,2); - d+=cw_put_byte(d,0); - d+=cw_put_enc_subelems(dst); + d+=cw_put_byte(d,2); //max radios + d+=cw_put_byte(d,0); //radios in use + d+=cw_put_encryption_subelems(d); cw_item_t * i; i = cw_itemstore_get(conn->outgoing,CW_ITEM_WTP_HARDWARE_VERSION); diff --git a/src/wtp/cfg.c b/src/wtp/cfg.c index 0f3b436a..616a8e05 100644 --- a/src/wtp/cfg.c +++ b/src/wtp/cfg.c @@ -8,24 +8,99 @@ #include "jsmn.h" #include "wtp.h" +#include "capwap/bstr.h" struct cw_itemdef { int item_id; const char *cfgname; - int (*setfun) (struct cw_itemdef *,char *js,jsmntok_t *t); + int (*setfun) (struct cw_itemdef *,char *,jsmntok_t *); + const char def; }; typedef struct cw_itemdef cfg_item_t; + + enum { CW_ITEMSPACE_DBG, CW_ITEMSPACE_WTP }; -int bstr16_local(struct cw_item_def *idef,char *js, jsmntok_t *t) +static int scn_obj(char *js, jsmntok_t *t, int (vcb)(char*js,jsmntok_t*t) ) { + int i; + + if (t->type!=JSMN_OBJECT){ +printf("No object\n"); + return 0; + } + +/* + if (t->size<3) { + return 0; + } + +*/ + int j=1; + for (i = 0; i < t->size; i++) { + + j+=vcb(js,t+j); + continue; + + } + + return 0; + +} + + +static int skip(jsmntok_t *t) { - int item_id = idef=item_id; + switch (t->type){ + case JSMN_OBJECT: + { + int e=t->end; + int n=1; + while (e>t->start) { + t++;n++; + } + return n; + } + default: + return t->size+2; + + } +} + + + + + +int byte_local(struct cw_itemdef *idef,char *js, jsmntok_t *t) +{ +printf("GET BYTE\n"); +// if (t->type != JSMN_STRING){ +// printf("Error: No Str: %s\n",str); +// return 1; +// } + + *(js+t->end)=0; + const char * val = js+t->start; +// *(js+(t+1)->end)=0; +// const char * val = js+(t+1)->start; + struct conn * conn = get_conn(); + + cw_itemstore_set_byte(conn->local,idef->item_id,atoi(val)); + +} + + + + + +int bstr16_local(struct cw_itemdef *idef,char *js, jsmntok_t *t) +{ + int item_id = idef->item_id; struct conn * conn = get_conn(); *(js+t->end)=0; @@ -37,14 +112,34 @@ int bstr16_local(struct cw_item_def *idef,char *js, jsmntok_t *t) } // *(js+t->end)=0; printf("Set str: %d %s\n", item_id,str); - cw_itemstore_set_bstr16n(conn->local,item_id,js+t->start,t->end-t->start); + cw_itemstore_set_bstr16n(conn->local,item_id,(uint8_t*)js+t->start,t->end-t->start); + return 0; } +int wtp_board_data_local(struct cw_itemdef *idef,char *js, jsmntok_t *t); -struct cw_itemdef cfg[] = { + + + + +struct cw_itemdef general_cfg[] = { {CW_ITEM_WTP_HARDWARE_VERSION, "hardware_version",bstr16_local}, {CW_ITEM_WTP_SOFTWARE_VERSION, "software_version",bstr16_local}, {CW_ITEM_WTP_BOARD_MODELNO, "modelno",bstr16_local}, + {CW_ITEM_WTP_BOARD_DATA,"wtp_board_data",wtp_board_data_local}, + {CW_ITEM_WTP_FRAME_TUNNEL_MODE,"frame_tunnel_mode",byte_local}, + {CW_ITEM_WTP_MAC_TYPE,"mac_type",byte_local}, + {CW_ITEM_LOCATION_DATA,"location_data",bstr16_local}, + + {0, 0, 0} +}; + + + +struct cw_itemdef board_data_cfg[] = { + {CW_ITEM_WTP_BOARD_MODELNO, "model_no",NULL}, + {CW_ITEM_WTP_BOARD_SERIALNO, "serial_no",NULL}, + {CW_ITEM_WTP_BOARD_VENDOR, "vendor_id",NULL}, {0, 0, 0} }; @@ -54,7 +149,8 @@ struct cw_itemdef cfg[] = { -struct cw_itemdef * get_cfg(const char *key){ + +struct cw_itemdef * get_cfg(struct cw_itemdef *cfg,const char *key){ int i=0; for (i=0; cfg[i].item_id; i++){ if ( !strcmp(key,cfg[i].cfgname )) { @@ -64,61 +160,94 @@ struct cw_itemdef * get_cfg(const char *key){ return NULL; } - -int scn_obj(jsmntok_t *t, int i) +static int wtp_board_data_cb(char *js,jsmntok_t *t) { +printf("VB BOARD DATA!!!\n"); + struct conn * conn = get_conn(); + cw_itemstore_t bd = cw_itemstore_get_avltree(conn->local,CW_ITEM_WTP_BOARD_DATA); + if (!bd){ + bd = cw_itemstore_create(); + if (!bd){ + return skip(t+1); + } + cw_itemstore_set_avltree(conn->local,CW_ITEM_WTP_BOARD_DATA,bd); + } + + *(js+t->end)=0; + const char * key = js+t->start; + *(js+(t+1)->end)=0; + const char * val = js+(t+1)->start; + + + struct conn *get_conn(); + struct cw_itemdef * idef = get_cfg(board_data_cfg,key); + + if (!idef){ + return skip(t+1); + } + + if (idef->item_id == CW_ITEM_WTP_BOARD_VENDOR){ + cw_itemstore_set_dword(bd,CW_ITEM_WTP_BOARD_VENDOR,atoi(val)); + + } + else{ + bstr16_t v = bstr16cfgstr(val); + cw_itemstore_set_bstr16n(bd,idef->item_id,bstr16_data(v),bstr16_len(v)); + free(v); + + } + + + + return skip(t+1); + } +int wtp_board_data_local(struct cw_itemdef *idef,char *js, jsmntok_t *t) +{ +printf("Local board data\n"); + + if ( t->type != JSMN_OBJECT ) { + printf("Error: wtp_board_data is no object\n"); + printf("Size: %d\n",t->size); + return 0; + } +printf("Scanni\n"); + scn_obj(js, t,wtp_board_data_cb); + return skip(t+1); +} + + static int set_cfg(char *js,jsmntok_t *t){ *(js+t->end)=0; const char * key = js+t->start; + *(js+(t+1)->end)=0; + //const char * val = js+(t+1)->start; - if ( t->type != JSMN_STRING ) { - printf("Error - No String: %s\n",key); - return 0; - } - struct cw_itemdef * idef = get_cfg(key); - if(!idef){ - printf("Error - not found: %s\n",key); - return 0; - } + + struct cw_itemdef * idef = get_cfg(general_cfg,key); + +// printf("Key: %s\n",key); +// printf("Val: %s\n",val); + + if(!idef) + return skip(t+1); if ( !idef->setfun) { printf("Error no setfun: %s\n",key); } else{ - idef->setfun(idef->item_id,js,t+1); + idef->setfun(idef,js,t+1); } - return 1; - -} - -static int read_obj(char *js, jsmntok_t *t ) { - int i; - - if (t->type!=JSMN_OBJECT){ - return 0; - } - - if (t->size<3) { - return 0; - } - - for (i = 1; i < t->size; i++) { - i+=set_cfg(js,t+i); - continue; - - } - - return 0; + return skip(t+1); } @@ -156,13 +285,7 @@ int setup_conf(struct conn *conn) printf("Parser failed\n"); } - read_obj(jstr, t); - - - - - - int i; + scn_obj(jstr, t,set_cfg); @@ -170,10 +293,16 @@ int setup_conf(struct conn *conn) + + +/* + for (i = 0; cfg[i].item_id != CW_ITEM_NONE; i++) { printf("ItemName: %s\n", cfg[i].cfgname); //.cfgname) } +*/ + return 0; } diff --git a/src/wtp/cfg.json b/src/wtp/cfg.json index 7f5e55bb..bb84c98b 100644 --- a/src/wtp/cfg.json +++ b/src/wtp/cfg.json @@ -1,15 +1,31 @@ { + + + "dbg":[o1,o2,o3], + "Tube" : "tabbe", + "hardware_version": "12345", "software_version": "98765", - "vendor_id": 40909, - "modelno": "2045", + "comment": "** The following is debug info **", + "location_data": "Berlin", + + "frame_tunnel_mode": "4", + "mac_type": 2, + + + + "wtp_board_data" : { + "vendor_id": 4232704, + "model_no": "Tobias Herre", + "serial_no": "2045", + }, + "acname_with_priority": { "1":"Master-AC", "2":"Cisco-AC" }, - "comment": "** The following is debug info **" - "dbg":[o1,o2,o3] + "ac": { "Master-AC": { @@ -19,6 +35,7 @@ } } + } diff --git a/src/wtp/configure.c b/src/wtp/configure.c index 27423e43..ee586343 100644 --- a/src/wtp/configure.c +++ b/src/wtp/configure.c @@ -6,9 +6,9 @@ int configure() { -/* + struct conn * conn = get_conn(); - struct wtpinfo * wtpinfo = get_wtpinfo(); +/* struct wtpinfo * wtpinfo = get_wtpinfo(); struct radioinfo *rip = &(wtpinfo->radioinfo[0]); diff --git a/src/wtp/image_update.c b/src/wtp/image_update.c index 848ac3b4..14966a38 100644 --- a/src/wtp/image_update.c +++ b/src/wtp/image_update.c @@ -32,7 +32,7 @@ int image_update() return 0; } - cw_dbg(DBG_ELEM,"Ready to receive image ...\n"); + cw_dbg(DBG_INFO,"Ready to receive image ..."); conn->capwap_state=CW_STATE_IMAGE_DATA; rc=-11; diff --git a/src/wtp/join.c b/src/wtp/join.c index a30b06d6..0c283f1a 100644 --- a/src/wtp/join.c +++ b/src/wtp/join.c @@ -182,6 +182,8 @@ int run_join(struct conn * conn) int join() { struct conn * conn = get_conn(); +conn->capwap_mode=CW_MODE_CISCO; + cw_aciplist_t iplist = cw_itemstore_get_avltree(conn->local,CW_ITEM_CAPWAP_CONTROL_IP_ADDRESS_LIST); if (!iplist){ cw_log(LOG_ERR,"No IPs to join controller."); diff --git a/src/wtp/wtp_main.c b/src/wtp/wtp_main.c index eff6a9f1..543b7b82 100644 --- a/src/wtp/wtp_main.c +++ b/src/wtp/wtp_main.c @@ -29,7 +29,13 @@ struct conn *the_conn; struct cw_actiondef capwap_actions; +bstr_t get_base_rmac() +{ +// static uint8_t rm[8]={0x00,0x4a,0x99,0x02,0xfa,0xc0}; + static uint8_t rm[8]={0x00,0x3a,0x99,0x02,0xfa,0xc0}; + return bstr_create(rm,6); +} @@ -64,11 +70,14 @@ int main() conn->outgoing = cw_itemstore_create(); conn->incomming = cw_itemstore_create(); conn->local = cw_itemstore_create(); + conn->base_rmac=get_base_rmac(); + conn->capwap_mode = CW_MODE_CISCO; 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); @@ -78,11 +87,11 @@ int main() cw_itemstore_set_bstr16n(board_data, CW_ITEM_WTP_BOARD_SERIALNO, bstr_data(conf_serial_no), bstr_len(conf_serial_no)); - +*/ - cw_itemstore_set_avltree(conn->outgoing, CW_ITEM_WTP_BOARD_DATA, board_data); +// cw_itemstore_set_avltree(conn->outgoing, CW_ITEM_WTP_BOARD_DATA, board_data); cw_acpriolist_t acprios = cw_acpriolist_create(); cw_acpriolist_set(acprios,"Master AC",strlen("Master AC"),1); @@ -100,7 +109,7 @@ int main() the_conn->strict_capwap=0; discovery(); join(); - image_update(); + //image_update(); }