Configuration Request and Reponse

FossilOrigin-Name: 7ee0e857269b188cb3b1b720d5f9ea4be45c211ea8ccccb7abadcb74587b3870
This commit is contained in:
7u83@mail.ru
2018-04-17 05:46:09 +00:00
parent 7968096687
commit 36905beefd
26 changed files with 438 additions and 99 deletions

View File

@ -130,6 +130,7 @@ KTVSRC=\
cw_ktv_read_struct.c\
cw_ktv_write_struct.c\
cw_ktv_std_types.c\
cw_ktv_base_exists.c\
LWSRC=\
@ -263,6 +264,7 @@ DTLSSRC+=\
RADIOSRC=\
cw_out_radio_generic.c\
cw_out_radio_generic_struct.c\
cw_read_radio_generic.c\

View File

@ -217,10 +217,12 @@
#define CW_ELEM_RESERVED_9 9
#define CAPWAP_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS 10
#define CAPWAP_ELEM_CAPWAP_CONTROL_IPV6_ADDRESS 11
#define CAPWAP_ELEM_CAPWAP_TIMERS 12
/**@}*/
#define CAPWAP_ELEM_CAPWAP_LOCAL_IPV4_ADDRESS 30
#define CAPWAP_ELEM_CAPWAP_LOCAL_IPV6_ADDRESS 50
#define CW_ELEM_CAPWAP_TIMERS 12
#define CW_ELEM_CAPWAP_TRANSPORT_PROTOCOL 51 /* not in draft 7 */
#define CW_ELEM_DATA_TRANSFER_DATA 13
#define CW_ELEM_DATA_TRANSFER_MODE 14

View File

@ -56,7 +56,7 @@ enum radioelems {
/** IEEE 802.11 OFDM Control */
CW_ELEM80211_ODFM_CONTROL = 1033,
/** IEEE 802.11 Supported WLAN Rates */
CW_ELEM80211_RATE_SET = 1034,
CAPWAP80211_ELEM_RATE_SET = 1034,
/** IEEE 802.11 RSNA Error Report From Station */
CW_ELEM80211_RSNA_ERROR_REPORT_FROM_STATION=1035,
/** IEEE 802.11 Station */

View File

@ -17,7 +17,7 @@ struct cw_StrListElem capwap_strings_elem[] = {
{CAPWAP_ELEM_CAPWAP_CONTROL_IPV6_ADDRESS, "Control IPv6 Address"},
{CAPWAP_ELEM_CAPWAP_LOCAL_IPV4_ADDRESS, "CAWPAP Local IPv4 Address"},
{CAPWAP_ELEM_CAPWAP_LOCAL_IPV6_ADDRESS, "CAPWAP Local IPv6 Address"},
{CW_ELEM_CAPWAP_TIMERS, "CAPWAP Timers"},
{CAPWAP_ELEM_CAPWAP_TIMERS, "CAPWAP Timers"},
{CW_ELEM_CAPWAP_TRANSPORT_PROTOCOL, "CAPWAP Transport Protocol"},
{CW_ELEM_DATA_TRANSFER_DATA, "Data Transfer Data"},
{CW_ELEM_DATA_TRANSFER_MODE, "Data Transfer Mode"},

View File

@ -6,7 +6,7 @@ struct cw_StrListElem capwap_strings_elem80211[] = {
{CW_ELEM80211_ADD_WLAN, "802.11 Add WLAN"},
{CW_ELEM80211_ANTENNA, "802.11 Antenna"},
{CW_ELEM80211_RATE_SET, "802.11 Rate Set"},
{CAPWAP80211_ELEM_RATE_SET, "802.11 Rate Set"},
{CW_ELEM80211_SUPPORTED_RATES,"802.11 Supported Rates"},
{CAPWAP80211_ELEM_WTP_RADIO_INFORMATION, " 802.11 WTP Radio Information"},

View File

@ -419,6 +419,9 @@ int cw_in_radio_generic_struct(struct cw_ElemHandler * handler, struct cw_ElemHa
int cw_out_radio_generic(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams * params
, uint8_t * dst);
int cw_out_radio_generic_struct(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams * params
, uint8_t * dst);
extern int cw_in_wtp_reboot_statistics(struct conn *conn, struct cw_action_in *a,
uint8_t * data, int len, struct sockaddr *from);

View File

@ -17,7 +17,7 @@ int cw_in_radio_generic_struct(struct cw_ElemHandler * handler, struct cw_ElemHa
}
radio = cw_get_byte(elem_data);
sprintf(key,"radio/%d/%s",radio,handler->key);
sprintf(key,"radio.%d/%s",radio,handler->key);
cw_ktv_read_struct(params->conn->remote_cfg,handler->type,key,elem_data+1,elem_len-1);

View File

@ -0,0 +1,29 @@
#include "ktv.h"
/**
* @file
* @description Implementation of cw_ktv_base_exisits
*/
/**
* @brief Check if elements with e certain baskey can be found in
* in ktvstore.
* @param ktvstore ktvstore to search in
* @param basekey basekey to search for
* @return The first ktv element belonging to the base eky,
* otherwise NULL if no element was found.
*
*/
cw_KTV_t * cw_ktv_base_exists(mavl_t ktvstore, const char *basekey)
{
cw_KTV_t * result, search;
search.key=(char*)basekey;
result = mavl_get_first(ktvstore,&search);
if (result == NULL)
return NULL;
if (strncmp(result->key,basekey,strlen(basekey))==0)
return result;
return NULL;
}

View File

@ -43,9 +43,6 @@ void * ktvn(struct mavl *t ,const void *search)
}
int cw_ktv_idx_get(mavl_t ktv, const char *key)
{
char ikey[CW_KTV_MAX_KEY_LEN];

View File

@ -4,54 +4,64 @@
#include "ktv.h"
/**
* @brief Default function to compare two values of type #cw_KTV_t.
*
*
* @param v1
* @param v2
* @return
* @return
*/
int cw_ktv_mavlcmp(const void *v1, const void *v2)
int cw_ktv_mavlcmp (const void *v1, const void *v2)
{
char *d1,*d2;
int l1,l2,rc,i1,i2;
char *d1, *d2, *k1, *k2;
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,'.');
k1 = ( (cw_KTV_t *) v1)->key;
k2 = ( (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;
}
d1++;
d2++;
i1 = atoi(d1);
i2 = atoi(d2);
rc = i1-i2;
if (rc != 0)
return rc;
while (isdigit(*d1))
while (1) {
/* Find dots in both keys */
d1 = strchr (k1, '.');
d2 = strchr (k2, '.');
/* if there are no dots, compare keys as normal */
if (d1 == NULL || d2 == NULL)
return strcmp (k1, k2);
/* calculate the length of the key till dots */
l1 = d1 - k1; /*((cw_KTV_t *) v1)->key;*/
l2 = d2 - k2; /*((cw_KTV_t *) v2)->key;*/
/* if length differs do a normal compare */
if (l1 != l2) {
return strcmp (k1, k2); /*((cw_KTV_t *) v1)->key, ((cw_KTV_t *) v2)->key);*/
}
rc = strncmp (k1, k2, l1); /*((cw_KTV_t *) v1)->key,((cw_KTV_t *) v2)->key,l1);*/
if (rc != 0) {
return rc;
}
d1++;
while (isdigit(*d2))
d2++;
return strcmp(d1,d2);
i1 = atoi (d1);
i2 = atoi (d2);
rc = i1 - i2;
if (rc != 0)
return rc;
while (isdigit (*d1))
d1++;
while (isdigit (*d2))
d2++;
k1=d1;
k2=d2;
/*return strcmp(d1,d2);*/
/*return cw_ktv_mavlcmp(d1,d2);*/
}
}

View File

@ -11,7 +11,7 @@ int cw_out_radio_generic(struct cw_ElemHandler * handler, struct cw_ElemHandlerP
radios = cw_ktv_get_byte(params->conn->local_cfg,"wtp-descriptor/max-radios",0);
for(i=1;i<radios+1;i++){
for(i=0;i<radios;i++){
l = cw_write_radio_element(handler,params,i,dst+len);
cw_dbg_elem(DBG_ELEM_OUT,params->conn,params->msgdata->type,handler,dst,l);
len+=l;

View File

@ -0,0 +1,41 @@
#include "cw.h"
#include "dbg.h"
int cw_out_radio_generic_struct(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams * params
, uint8_t * dst)
{
int i,l, offset;
int radios;
uint8_t * cdst;
cdst = dst;
radios = cw_ktv_get_byte(params->conn->local_cfg,"wtp-descriptor/max-radios",0);
offset = params->conn->header_len(handler);
for(i=0;i<radios;i++){
char basekey[CW_KTV_MAX_KEY_LEN];
cw_KTV_t * result;
sprintf(basekey,"radio.%d/%s",i,handler->key);
result = cw_ktv_base_exists(params->conn->local_cfg,basekey);
if (result == NULL)
continue;
l=0;
l+=cw_put_byte(cdst+offset+l,i);
l+= cw_ktv_write_struct(params->conn->local_cfg,handler->type,basekey,cdst+offset+l);
cdst+=params->conn->write_header(handler,cdst,l);
/* l = cw_write_radio_element(handler,params,i,dst+len);
cw_dbg_elem(DBG_ELEM_OUT,params->conn,params->msgdata->type,handler,dst,l);
len+=l;*/
}
return cdst-dst;
}

View File

@ -19,7 +19,7 @@ int cw_in_radio_generic(struct cw_ElemHandler * handler, struct cw_ElemHandlerPa
}
radio=cw_get_byte(elem_data);
sprintf(key,"radio/%d/%s",radio,handler->key);
sprintf(key,"radio.%d/%s",radio,handler->key);
result = cw_ktv_add(params->conn->remote_cfg, key,
handler->type, elem_data+1,elem_len-1);

View File

@ -11,7 +11,7 @@ int cw_write_radio_element(struct cw_ElemHandler * handler, struct cw_ElemHandle
len =0;
sprintf(key,"radio/%d/%s",idx,handler->key);
sprintf(key,"radio.%d/%s",idx,handler->key);
/*printf("Looking for key: %s\n",key);*/

View File

@ -39,6 +39,7 @@ struct cw_KTV {
void *ptr;
char *str;
int boolean;
float float_val;
} val;
};
typedef struct cw_KTV cw_KTV_t;
@ -170,7 +171,7 @@ void * cw_ktv_get_sysptr(mavl_t ktv,const char *key, void * def);
char * cw_ktv_get_str(mavl_t ktv,const char *key, char * def);
int cw_ktv_idx_get(mavl_t ktv, const char *key);
cw_KTV_t * cw_ktv_base_exists(mavl_t ktvstore, const char *basekey);
extern const cw_Type_t * cw_ktv_std_types[];
#define CW_KTV_STD_TYPES cw_ktv_std_types