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/src/ac/config.ktv b/src/ac/config.ktv index 1105dbd8..e2caf860 100644 --- a/src/ac/config.ktv +++ b/src/ac/config.ktv @@ -29,7 +29,6 @@ ac-descriptor/software/vendor :Dword: 4232704 ac-descriptor/software/version :Bstr16: .x07036500 ac-descriptor/station-limit :Word: 1000 ac-descriptor/stations :Word: 0 -ac-name :Bstr16: CiscoAC73 capwap-control-ip-address/address.0 :IPAddress: 192.168.0.14 capwap-control-ip-address/wtps.0 :Word: 2 cisco/mwar-type :Byte: 0 diff --git a/src/cw/cw_ktv_mavlcmp.c b/src/cw/cw_ktv_mavlcmp.c index 4b249306..c0a56d6b 100644 --- a/src/cw/cw_ktv_mavlcmp.c +++ b/src/cw/cw_ktv_mavlcmp.c @@ -11,20 +11,24 @@ int cw_ktv_mavlcmp(const void *v1, const void *v2) char *d1,*d2; int l1,l2,rc,i1,i2; - + /* Find dots in both keys */ d1 = strchr(((cw_KTV_t *) v1)->key,'.'); d2 = strchr(((cw_KTV_t *) v2)->key,'.'); + /* if there are no dots, compare keys as normal */ if (d1==NULL || d2==NULL) return strcmp(((cw_KTV_t *) v1)->key, ((cw_KTV_t *) v2)->key); + /* calculate the length of the key till dots */ l1=d1-((cw_KTV_t *) v1)->key; l2=d2-((cw_KTV_t *) v2)->key; + /* if length differs do a normal compare */ if (l1!=l2){ return strcmp(((cw_KTV_t *) v1)->key, ((cw_KTV_t *) v2)->key); } + rc = strncmp(((cw_KTV_t *) v1)->key,((cw_KTV_t *) v2)->key,l1); if (rc!=0){ return rc; diff --git a/src/cw/cw_out_generic_struct.c b/src/cw/cw_out_generic_struct.c index 3615e16d..e50af373 100644 --- a/src/cw/cw_out_generic_struct.c +++ b/src/cw/cw_out_generic_struct.c @@ -8,28 +8,32 @@ int cw_out_generic_struct(struct cw_ElemHandler * handler, struct cw_ElemHandler , uint8_t * dst) { int start; - int len,l; - + int len; + cw_KTV_t search, *result; - if (!handler->type){ cw_log(LOG_ERR,"Can't handle element: %s, no type defined",handler->name); return 0; } + + search.key = (char*)handler->key; + result = mavl_get_first(params->conn->local_cfg,&search); + if (result == NULL ){ + if (params->elemdata->mand) + cw_log(LOG_ERR,"Can't put mandatory message element %s, no data available",handler->name); + return 0; + } + + if (strncmp(result->key,handler->key, strlen(handler->key))!=0){ + if (params->elemdata->mand) + cw_log(LOG_ERR,"Can't put mandatory message element %s, no data available",handler->name); + return 0; + } start = params->conn->header_len(handler); - len = cw_ktv_write_struct(params->conn->local_cfg,handler->type,handler->key,dst+start); return params->conn->write_header(handler,dst,len); - -/* if (handler->vendor) - return len + cw_put_elem_vendor_hdr(dst, handler->vendor, handler->id, len); - l = len + cw_put_elem_hdr(dst, handler->id, len); -*/ - return l; - - } diff --git a/src/cw/cw_out_idx_generic_struct.c b/src/cw/cw_out_idx_generic_struct.c index 385599fd..edd0c010 100644 --- a/src/cw/cw_out_idx_generic_struct.c +++ b/src/cw/cw_out_idx_generic_struct.c @@ -7,18 +7,15 @@ int cw_out_idx_generic_struct(struct cw_ElemHandler * handler, struct cw_ElemHan { char key[CW_KTV_MAX_KEY_LEN]; struct cw_KTV * elem, search; - - int len,i,l; - int radios; + int i; int idx, sr; - int pos; - uint8_t * mdst; + int len; + uint8_t * mdst, *start; + - len =0; - i=0; - pos = 0; + len = 0; mdst = dst; do { @@ -29,51 +26,42 @@ int cw_out_idx_generic_struct(struct cw_ElemHandler * handler, struct cw_ElemHan /*elem = mavl_get(params->conn->local_cfg, &search);*/ elem = mavl_get_first(params->conn->local_cfg,&search); if(elem != NULL){ - printf("Elem key: %s",elem->key); + printf("Elem key: %s\n",elem->key); } sr = sscanf(elem->key,handler->key,&idx); if (sr!=1) break; - if (idx<=i) + if (idxkey,idx); printf("Here we are '%s'! --> %d\n",key,idx); - - pos = params->conn->header_len(handler); + len =0; + start = mdst + params->conn->header_len(handler); - pos += cw_put_byte(mdst+pos,idx); - pos += cw_ktv_write_struct(params->conn->local_cfg,handler->type,key,mdst+pos); + len += cw_put_byte(start+len,idx); + len += cw_ktv_write_struct(params->conn->local_cfg,handler->type,key,start+len); - mdst += params->conn->write_header(handler,mdst,pos); + mdst += params->conn->write_header(handler,mdst,len); - - - - - i=idx+1; - - - - - }while(1); - exit(0); + - radios = cw_ktv_get_byte(params->conn->local_cfg,"wtp-descriptor/max-radios",0); +/* radios = cw_ktv_get_byte(params->conn->local_cfg,"wtp-descriptor/max-radios",0); for(i=1;iconn,params->msgdata->type,handler,dst,l); len+=l; } - return len; +*/ + return mdst-dst; } diff --git a/src/wtp/cisco.ktv b/src/wtp/cisco.ktv index ec296616..171e55d6 100644 --- a/src/wtp/cisco.ktv +++ b/src/wtp/cisco.ktv @@ -35,7 +35,7 @@ wtp-descriptor/software/vendor :Dword: 4232704 wtp-descriptor/software/version :Bstr16: .x06036500 wtp-frame-tunnel-mode :Byte: 4 wtp-mac-type :Byte: 1 -wtp-name :Bstr16: APc47d.4f3a.f8a6 +wtp-name :Bstr16: WFAT-01 capwap-timers/max-discovery-interval:Byte:0 @@ -61,10 +61,10 @@ radio/0/cisco/regulatory-domain/set :Bool: true radio/0/cisco/regulatory-domain/slot :Byte: 0 -cisco/regulatory-domain/019/code0 :Byte: 0 -cisco/regulatory-domain/019/code1 :Byte: 1 -cisco/regulatory-domain/019/set :Bool: true -cisco/regulatory-domain/019/slot :Byte: 0 +cisco/regulatory-domain/000/code0 :Byte: 0 +cisco/regulatory-domain/000/code1 :Byte: 1 +cisco/regulatory-domain/000/set :Bool: true +cisco/regulatory-domain/000/slot :Byte: 0 cisco/regulatory-domain/001/code0 :Byte: 0 cisco/regulatory-domain/001/code1 :Byte: 1 cisco/regulatory-domain/001/set :Bool: true