WTP can run discoveryw/o memory leaks

This commit is contained in:
2022-08-15 00:51:38 +02:00
parent daa808f9a2
commit df5e2bcbb7
19 changed files with 308 additions and 216 deletions

View File

@ -883,7 +883,7 @@ struct cw_MsgSet * capwap_register_msg_set(struct cw_MsgSet * set, int mode){
return NULL;
cw_dbg(DBG_INFO,"CAPWAP: Register messages");
cw_msgset_add(set,messages, handlers);
cw_msgset_add_states(set,statemachine_states);

View File

@ -29,8 +29,6 @@ int capwap_in_capwap_control_ip_address(struct cw_ElemHandler *eh,
struct cw_ElemHandlerParams *params,
uint8_t * data, int len)
{
return 0;
stop();
char key[CW_CFG_MAX_KEY_LEN];
int idx;
@ -40,11 +38,14 @@ int capwap_in_capwap_control_ip_address(struct cw_ElemHandler *eh,
/* printf("SKEY is %s , idx: %d\n",key,idx);*/
sprintf(key,"%s/address.%d",eh->key,idx);
cw_ktv_add(params->cfg,key,CW_TYPE_IPADDRESS,NULL,data,len-2);
sprintf(key,"%s.%d/address",eh->key,idx);
CW_TYPE_IPADDRESS->read(params->cfg,key,data,len-2,eh->param);
// cw_ktv_add(params->cfg,key,CW_TYPE_IPADDRESS,NULL,data,len-2);
sprintf(key,"%s/wtps.%d",eh->key,idx);
cw_ktv_add(params->cfg,key,CW_TYPE_WORD,NULL,data+len-2,2);
sprintf(key,"%s.%d/wtps",eh->key,idx);
CW_TYPE_WORD->read(params->cfg,key,data+len-2,2,eh->param);
// cw_ktv_add(params->cfg,key,CW_TYPE_WORD,NULL,data+len-2,2);
/* if (handler-id == CW_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS) {
struct sockaddr_in addr;

View File

@ -2360,7 +2360,7 @@ static int preprocess_join_request(struct cw_Conn *conn)
return 0;
stop();
/*
use_ac_version = cw_ktv_get_bool(conn->local_cfg,"cisco/wtp-use-ac-version",0);
if (use_ac_version){
@ -2385,5 +2385,6 @@ static int preprocess_join_request(struct cw_Conn *conn)
cw_msgset_add(conn->msgset,messages75, handlers75);
}
}
*/
return 1;
}

View File

@ -8,32 +8,41 @@ int cisco_out_wtp_descriptor(struct cw_ElemHandler * eh,
struct cw_ElemHandlerParams * params, uint8_t * dst)
{
stop();
char key[CW_CFG_MAX_KEY_LEN];
int len;
/* // XXX Dummy WTP Descriptor Header */
uint8_t *d;
cw_Val_t * val;
int rc;
d = dst+4;
sprintf(key,"%s/%s",eh->key,CW_SKEY_MAX_RADIOS);
val = cw_ktv_get(params->cfg,key, CW_TYPE_BYTE);
if (val != NULL)
d+=val->type->put(val,d);
else{
cw_dbg(DBG_WARN,"Cannot get value for %s, setting to 0", CW_SKEY_MAX_RADIOS);
sprintf(key,"%s/%s",eh->key,"max-radios");
rc = cw_generic_write_l(params->cfg_list, CW_TYPE_BYTE,key,
d, eh->param);
// val = cw_ktv_get(params->cfg,key, CW_TYPE_BYTE);
if (rc==-1){
cw_dbg(DBG_WARN,"Cannot get value for %s, setting to 0", key);
d+=cw_put_byte(d,0);
}
else {
d+=rc;
}
sprintf(key,"%s/%s",eh->key,CW_SKEY_RADIOS_IN_USE);
val = cw_ktv_get(params->cfg,key, CW_TYPE_BYTE);
if (val != NULL){
d+=val->type->put(val,d);
rc = cw_generic_write_l(params->cfg_list, CW_TYPE_BYTE,key,
d, eh->param);
// val = cw_ktv_get(params->cfg,key, CW_TYPE_BYTE);
if (rc != -1){
cw_dbg(DBG_WARN,"Cannot get value for %s, setting to 0", key);
d+=cw_put_byte(d,0);
}
else{
d+=cw_put_byte(d,0); /*radios in use*/
d+=rc; /*radios in use*/
}
d+=cw_put_encryption_capabilities_7(d,1);

View File

@ -58,6 +58,7 @@ static struct cw_MsgSet * register_messages(struct cw_MsgSet *set, int mode)
case CW_MOD_MODE_CAPWAP:
{
capwap_mod->register_messages(set, CW_MOD_MODE_CAPWAP);
capwap80211_mod->register_messages(set, CW_MOD_MODE_BINDINGS);
cisco_register_msg_set(set,CW_MOD_MODE_CAPWAP);
@ -229,10 +230,13 @@ int static setup_cfg(struct cw_Conn * conn)
// conn->header_len=header_len;
security = cw_setup_dtls(conn,conn->global_cfg,"cisco",CAPWAP_CIPHER);
cw_cfg_set_int(conn->local_cfg,"ac-descriptor/security",security);
if (conn->role == CW_ROLE_AC){
cw_cfg_set_int(conn->local_cfg,"ac-descriptor/security",security);
if (conn->default_cfg==NULL){
conn->default_cfg=cw_cfg_create();
// if (conn->default_cfg==NULL){
// conn->default_cfg=cw_cfg_create();
// }
}