Moved debug options into a mavl object

So there is an unlimited number of debug options, instead of 32 as
before.
This commit is contained in:
7u83 2022-09-04 11:13:12 +02:00
parent ca4a6b9996
commit 0eb3e16932
14 changed files with 419 additions and 146 deletions

View File

@ -15,7 +15,6 @@ cd ..
make
Ubuntu
------

View File

@ -5,3 +5,8 @@ Open Source CAPWAP WLC + WTP
Current status: early development.
See also http://7u83.cauwersin.com/?cat=28
What you can do so far ...
Compile as stated in INSTALL.

View File

@ -700,7 +700,6 @@ struct wtpman *wtpman_create(int socklistindex, struct sockaddr *srcaddr,
void wtpman_addpacket(struct wtpman *wtpman, uint8_t * packet, int len)
{
cw_dbg(DBG_X,"ADD PACKET DETECTED %d",wtpman->conn->detected);
conn_q_add_packet(wtpman->conn, packet, len);
}

View File

@ -7,8 +7,6 @@ CWSRC=\
cw_check_missing_mand.c\
cw_clock_lap.c\
cw_dbg_elem.c\
cw_dbg_set_level.c\
cw_dbg_set_level_from_str.c\
cw_filename.c\
cw_format_dump.c\
cw_format_pkt_hdr.c\
@ -136,7 +134,8 @@ LOGSRC=\
log_errno.c\
log_syslog.c\
dbg.c\
dbg_strings.c\
# dbg_strings.c\
MISCSRC=\
bstr16_create.c\

View File

@ -1,26 +0,0 @@
#include "dbg.h"
/**
* Set debug level
* @param level debug level to set, allowed values are enumberated in #cw_dbg_levels structure.
* @param on 1: turns the specified debug level on, 0: turns the specified debug level off.
*/
void cw_dbg_set_level (int level, int on)
{
switch (level) {
case DBG_ALL:
if (on)
cw_dbg_opt_level = 0xffffffff;
else
cw_dbg_opt_level = 0;
break;
default:
if (on)
cw_dbg_opt_level |= (level);
else
cw_dbg_opt_level &= (0xffffffff) ^ (level);
}
}

View File

@ -1,31 +0,0 @@
#include "dbg.h"
int cw_dbg_set_level_from_str(const char *level)
{
int blevel,on;
const char *slevel;
switch(*level){
case '-':
case '!':
case '~':
on =0;
slevel=level+1;
break;
case '+':
slevel=level+1;
on=1;
break;
default:
slevel=level;
on=1;
}
blevel = cw_strlist_get_id(cw_dbg_strings, slevel);
if (blevel==-1)
return 0;
cw_dbg_set_level(blevel,on);
return 1;
}

View File

@ -37,16 +37,13 @@ static int read_struct(cw_Cfg_t * cfg,const cw_ValStruct_t * stru, const char *p
break;
default:
l = stru[i].len;
cw_dbg(DBG_X,"pos: %d, l:%d. len: %d",pos,l,len);
if (pos+l > len){
l = pos<len ? len-pos : 0 ;
}
}
cw_dbg(DBG_X,"This is l %d",l);
l=stru[i].type->read(cfg,key,data+pos,l,stru[i].valguard);
// printf("READ STRUCT (%d): %s: %s\n",pos,key,dbstr);
if (stru[i].len==-1){

View File

@ -47,7 +47,116 @@ uint32_t cw_dbg_opt_display = DBG_DISP_COLORS;
/**
* Current debug level
*/
uint32_t cw_dbg_opt_level = 0;
//static uint32_t cw_dbg_opt_level = 0;
//
static struct mavl * cw_dbg_opt_level = NULL;
static int dbg_cmp(const void *a, const void*b)
{
return (*((int*)a)-*((int*)b));
}
struct cw_DbgStr {
int level;
const char *str;
const char ** str_list;
const char *descr;
};
static const char * dbg_level_msg[] = {
"msg_in", "msg_out", NULL
};
static const char * dbg_level_pkt[] = {
"pkt_in", "pkt_out", NULL
};
static const char * dbg_level_elem[]={
"elem_in","elem_out",NULL
};
static const char * dbg_level_elem_detail[] = {
"elem_detail_in", "elem_detail_out", NULL
};
static const char * dbg_level_std[] = {
"msg","elem","msg_err", "elem_err", "pkt_err", "rfc", "warn", "state", "info", NULL
/*
DBG_MSG_IN, DBG_MSG_OUT,
DBG_ELEM_IN, DBG_ELEM_OUT,
DBG_MSG_ERR, DBG_ELEM_ERR,
DBG_PKT_ERR, DBG_RFC, DBG_WARN,
DBG_STATE, DBG_INFO,
0*/
};
/**
* Debug strings
*/
struct cw_DbgStr cw_dbg_strings[] = {
{ DBG_INFO, "info", NULL, "Infos" },
{ DBG_PKT_IN, "pkt_in",NULL, "Headers of incomming packets." },
{ DBG_PKT_OUT, "pkt_out",NULL, "Headers out outgoing packets." },
{ DBG_PKT_ERR, "pkt_err", NULL, "Packets with errors which are usually discard" },
{ DBG_PKT_DMP_IN, "pkt_dmp_in",NULL, "Hexdump incomming packets" },
{ DBG_PKT_DMP_OUT, "pkt_dmp_out",NULL, "Hexdump outgoing packets" },
{ DBG_MSG_IN, "msg_in" },
{ DBG_MSG_OUT, "msg_out" },
{ DBG_MSG_DMP_IN, "msg_dmp_in" },
{ DBG_MSG_DMP_OUT, "msg_dmp_out" },
{ DBG_MSG_ERR, "msg_err"},
{ DBG_RFC, "rfc", },
{ DBG_ELEM_IN, "elem_in"},
{ DBG_ELEM_OUT, "elem_out"},
{ DBG_ELEM_DMP, "elem_dmp"},
{ DBG_ELEM_ERR, "elem_err" },
{ DBG_ELEM_DETAIL_IN, "elem_detail_in" },
{ DBG_ELEM_DETAIL_OUT, "elem_detail_out" },
{ DBG_ELEM_VNDR, "elem_vndr"},
{ DBG_DTLS, "dtls" },
{ DBG_DTLS_BIO, "dtls_bio" },
{ DBG_DTLS_BIO_DMP, "dtls_bio_dmp"},
{ DBG_DTLS_DETAIL, "dtls_detail"},
{ DBG_CFG_UPDATES, "cfg_updates" },
{ DBG_X, "x" },
// {DBG_CFG_DMP, "cfg_dmp" },
{ DBG_WARN, "warn" },
{ DBG_MOD, "mod"},
{ DBG_STATE, "state" },
{ DBG_MSG_COMPOSE, "msg_compose" },
{ 0, "std", dbg_level_std, "Standard options"},
{ 0, "msg", dbg_level_msg, "Same as" },
{ 0, "pkt", dbg_level_pkt, "Same as" },
{ 0, "elem", dbg_level_elem, "elem" },
{ 0, "elem_detail", dbg_level_elem_detail, "elem datail"},
{ (DBG_ELEM_DETAIL_IN | DBG_ELEM_DETAIL_OUT), "elem_detail" },
{ (DBG_ELEM_IN | DBG_ELEM_OUT | DBG_ELEM_DMP | DBG_ELEM_DETAIL_IN | DBG_ELEM_DETAIL_OUT), "elem_all" },
{ DBG_ALL, "all"},
{ CW_STR_STOP, NULL }
};
/**
*@}
*/
@ -185,13 +294,19 @@ const char *get_dbg_color_ontext(int level)
int cw_dbg_is_level(int level)
{
if (level > 1 && (level &1))
if (cw_dbg_opt_level == NULL)
return 0;
return mavl_get(cw_dbg_opt_level,&level) == NULL ? 0:1;
// if (level > 1 && (level &1))
return 1;
/* if (level >= DBG_ALL ){
return 1;
}*/
return (cw_dbg_opt_level & (level));
// return (cw_dbg_opt_level & (level));
}
@ -428,10 +543,99 @@ void cw_dbg_elem(int level, struct cw_Conn *conn, int msg,
/**
* Set debug level
* @param level debug level to set, allowed values are enumberated in #cw_dbg_levels structure.
* @param on 1: turns the specified debug level on, 0: turns the specified debug level off.
*/
void cw_dbg_set_level (int level, int on)
{
int exists;
if (cw_dbg_opt_level == NULL){
cw_dbg_opt_level = mavl_create(dbg_cmp,NULL,sizeof(int));
if (cw_dbg_opt_level == NULL)
return;
}
if (on){
mavl_insert(cw_dbg_opt_level,&level,&exists);
}
else
mavl_del(cw_dbg_opt_level,&level);
/*
switch (level) {
case DBG_ALL:
if (on)
cw_dbg_opt_level = 0xffffffff;
else
cw_dbg_opt_level = 0;
break;
default:
if (on)
cw_dbg_opt_level |= (level);
else
cw_dbg_opt_level &= (0xffffffff) ^ (level);
}
*/
}
int cw_dbg_set_level_from_str0(const char *level,int on)
{
int i;
for(i=0; cw_dbg_strings[i].str != NULL; i++){
if (strcmp(cw_dbg_strings[i].str,level)==0){
if (cw_dbg_strings[i].str_list==NULL)
cw_dbg_set_level(cw_dbg_strings[i].level,on);
else {
const char **l;
for (l=cw_dbg_strings[i].str_list; *l; l++){
if (!cw_dbg_set_level_from_str0(*l,on)){
stop();
}
}
}
return 1;
}
}
/* blevel = cw_strlist_get_id(cw_dbg_strings, slevel);
if (blevel==-1)
return 0;
*/
// cw_dbg_set_level(blevel,on);
// return 1;
return 0;
}
int cw_dbg_set_level_from_str(const char *level)
{
int on;
const char *slevel;
switch(*level){
case '-':
case '!':
case '~':
on =0;
slevel=level+1;
break;
case '+':
slevel=level+1;
on=1;
break;
default:
slevel=level;
on=1;
}
return cw_dbg_set_level_from_str0(slevel,on);
}
/*
void dbg_istore_dmp(mbag_t s)

View File

@ -48,91 +48,91 @@
*/
enum cw_dbg_levels{
/** Show headers of incomming/outgoing CAPWAP packets */
DBG_PKT_IN = (1<<0),
DBG_PKT_OUT = (1<<1),
DBG_PKT_IN = 1,
DBG_PKT_OUT,
/** Hex-dump incomming/outgoing CAPWAP packets */
DBG_PKT_DMP_IN = (1<<3),
DBG_PKT_DMP_OUT = (1<<4),
DBG_PKT_DMP_IN,
DBG_PKT_DMP_OUT,
/** Incomming CAPWAP packets with errors, wich would
usually silently discarded */
DBG_PKT_ERR = (1<<5),
DBG_PKT_ERR,
/** Display incomming/outgoing CAPWAP/LWAPP messages */
DBG_MSG_IN = (1<<6),
DBG_MSG_OUT = (1<<7),
DBG_MSG_IN,
DBG_MSG_OUT,
/** Show hex-dump of messages */
DBG_MSG_DMP_IN = (1<<8),
DBG_MSG_DMP_OUT = (1<<9),
DBG_MSG_DMP_IN,
DBG_MSG_DMP_OUT,
/** Message errors */
DBG_MSG_ERR = (1<<10),
DBG_MSG_ERR,
/** Show message elements in incomming/outgoing messages */
DBG_ELEM_IN = (1<<11),
DBG_ELEM_OUT = (1<<12),
DBG_ELEM_IN,
DBG_ELEM_OUT,
/** Show message element details */
DBG_ELEM_DETAIL_IN = (1<<13),
DBG_ELEM_DETAIL_OUT = (1<<14),
DBG_ELEM_DETAIL_IN,
DBG_ELEM_DETAIL_OUT,
/** Error in msg elements */
DBG_ELEM_ERR = (1<<15),
DBG_ELEM_ERR,
/** hex dump elements */
DBG_ELEM_DMP = (1<<16),
DBG_ELEM_DMP,
/** General infos, like CAPWAP state */
DBG_INFO = (1<<17),
DBG_INFO,
/** Misc. warnings */
DBG_WARN = (1<<18),
DBG_WARN,
/** RFC related */
DBG_RFC = (1<<19),
DBG_RFC,
/** DTLS related messages */
DBG_DTLS = (1<<20),
DBG_DTLS,
/** DTLS BIOs in/out */
DBG_DTLS_BIO = (1<<21),
DBG_DTLS_BIO,
/** Dump DTLS BIO i/o */
DBG_DTLS_BIO_DMP = (1<<22),
DBG_DTLS_BIO_DMP,
/** Show DTLS Details */
DBG_DTLS_DETAIL = (1<<23),
DBG_DTLS_DETAIL,
// DBG_CFG_DMP = (1<<20),
// DBG_CFG_DMP,
// DBG_CFG_SET = (1<<21),
// DBG_CFG_SET,
/** Debug Mods */
DBG_MOD = (1<<24),
DBG_MOD,
/**Debug State machine */
DBG_STATE = (1<<25),
DBG_STATE,
DBG_MSG_COMPOSE = (1<<26),
DBG_MSG_COMPOSE,
DBG_CFG_UPDATES = (1<<27),
DBG_CFG_UPDATES,
DBG_ELEM_VNDR = (1<<28),
DBG_ELEM_VNDR,
DBG_X = (1<<30),
DBG_X,
DBG_MOD_DETAIL = (1<<31),
DBG_MOD_DETAIL,
DBG_ALL = (0x7fffffff),
DBG_ALL,
DBG_ELEM_DMP_IN = 7,
DBG_ELEM_DMP_OUT = 9,
DBG_ELEM_DMP_IN,
DBG_ELEM_DMP_OUT,
};
@ -192,8 +192,8 @@ void cw_dbg_dmp(int level, const uint8_t * data, int len, const char *format, ..
extern uint32_t cw_dbg_opt_display;
extern uint32_t cw_dbg_opt_level;
extern struct cw_StrListElem cw_dbg_strings[];
//extern uint32_t cw_dbg_opt_level;
//extern struct cw_StrListElem cw_dbg_strings[];
/*
#define cw_dbg cw_dbg_colored

View File

@ -137,7 +137,7 @@
#define LW_ELEM_DIRECT_SEQUENCE_CONTROL 14
#define LW_ELEM_CHANGE_STATE_EVENT 26
#define LW_ELEM_80211_DELETE_WLAN 28
#define LWAPP_ELEM_80211_DELETE_WLAN 28
#define LW_ELEM_AC_NAME 31
#define LW_ELEM_LOCATION_DATA 35

View File

@ -56,8 +56,8 @@
#define CISCO_ELEM_RRM_LOAD 25 /* 25 */
#define CISCO_ELEM_DELETE_WLAN LWAPP_ELEM_80211_DELETE_WLAN /* 28 */
#define CW_CISCO_80211_DELETE_WLAN LW_ELEM_80211_DELETE_WLAN /* 28 */
#define CW_CISCO_MWAR_NAME LW_ELEM_AC_NAME /* 31 */
#define CISCO_ELEM_33 33
@ -77,6 +77,7 @@
#define CISCO_ELEM_WTP_BOARD_DATA LW_ELEM_WTP_BOARD_DATA /* 50 */
#define CISCO_ELEM_BCAST_SSID_MODE LWAPP_ELEM_BCAST_SSID_MODE /* 51 */
#define CISCO_ELEM_AP_MODE_AND_TYPE LW_ELEM_80211_WTP_MODE_AND_TYPE /* 54 */
#define CISCO_ELEM_AP_QOS LW_ELEM_QOS /* 57 */

View File

@ -31,6 +31,7 @@
#define CISCO_LWELEM_9 9
#define CISCO_LWELEM_AP_MFP_CAP_SUBTYPE 11
#define CISCO_LWELEM_AP_MFP_CONFIG_SUBTYPE 14
#define CISCO_LWELEM_15 15
#define CISCO_LWELEM_AP_USERNAME_PASSWORD 18
#define LW_CISCO_MANAGER_IP_ADDR 19
#define CISCO_LWELEM_DISCOVERY_PROTOCOL 20
@ -43,6 +44,7 @@
#define CISCO_LWELEM_33 33
#define CISCO_LWELEM_AP_ETHERNET_PORT_SUBTYPE 34
#define CISCO_LWELEM_AP_LOGHOST_CONFIG 36
#define CISCO_LWELEM_37 37
#define CISCO_LWELEM_MCAST_MGID_INFO 39
#define CISCO_LWELEM_AP_TELNET_SSH 44

View File

@ -434,7 +434,7 @@ static cw_ValStruct_t cisco_wtp_radio_config73[]={
{CW_TYPE_WORD,"@cisco/occupancy-limit",2,-1},
{CW_TYPE_BYTE,"@cisco/cfg-period",1,-1},
{CW_TYPE_WORD,"@cisco/cfp-maximum-duration",2,-1},
{CW_TYPE_BSTR16,"bssid",6,-1},
{CW_TYPE_BSTR16,"capwap80211/bssid",6,-1},
{CW_TYPE_WORD,"beacon-period",2,-1},
{CW_TYPE_STR,"@cisco/country-string",3,-1},
{CW_TYPE_STR,"country-string",2,-1},
@ -535,6 +535,53 @@ static cw_ValStruct_t cisco_station_cfg_stru[]={
static cw_ValStruct_t cisco_ap_qos73[]={
{CW_TYPE_BYTE,"tag-packets",1,-1},
{CW_TYPE_BYTE,"uranium-queue-depth",1,-1},
{CW_TYPE_WORD,"uranium-cwmin",2,-1},
{CW_TYPE_WORD,"uranium-cwmax",2,-1},
{CW_TYPE_BYTE,"uranium-aifs",1,-1},
{CW_TYPE_WORD,"uranium-cbr",2,-1},
{CW_TYPE_BYTE,"uranium-dot1p-tag",1,-1},
{CW_TYPE_BYTE,"uranium-dscp-tag",1,-1},
{CW_TYPE_BYTE,"platinum-queue-depth",1,-1},
{CW_TYPE_WORD,"platinum-cwmin",2,-1},
{CW_TYPE_WORD,"platinum-cwmax",2,-1},
{CW_TYPE_BYTE,"platinum-aifs",1,-1},
{CW_TYPE_WORD,"platinum-cbr",2,-1},
{CW_TYPE_BYTE,"platinum-dot1p-tag",1,-1},
{CW_TYPE_BYTE,"platinum-dscp-tag",1,-1},
{CW_TYPE_BYTE,"gold-queue-depth",1,-1},
{CW_TYPE_WORD,"gold-cwmin",2,-1},
{CW_TYPE_WORD,"gold-cwmax",2,-1},
{CW_TYPE_BYTE,"gold-aifs",1,-1},
{CW_TYPE_WORD,"gold-cbr",2,-1},
{CW_TYPE_BYTE,"gold-dot1p-tag",1,-1},
{CW_TYPE_BYTE,"gold-dscp-tag",1,-1},
{CW_TYPE_BYTE,"silver-queue-depth",1,-1},
{CW_TYPE_WORD,"silver-cwmin",2,-1},
{CW_TYPE_WORD,"silver-cwmax",2,-1},
{CW_TYPE_BYTE,"silver-aifs",1,-1},
{CW_TYPE_WORD,"silver-cbr",2,-1},
{CW_TYPE_BYTE,"silver-dot1p-tag",1,-1},
{CW_TYPE_BYTE,"silver-dscp-tag",1,-1},
{CW_TYPE_BYTE,"bronze-queue-depth",1,-1},
{CW_TYPE_WORD,"bronze-cwmin",2,-1},
{CW_TYPE_WORD,"bronze-cwmax",2,-1},
{CW_TYPE_BYTE,"bronze-aifs",1,-1},
{CW_TYPE_WORD,"bronze-cbr",2,-1},
{CW_TYPE_BYTE,"bronze-dot1p-tag",1,-1},
{CW_TYPE_BYTE,"bronze-dscp-tag",1,-1},
{CW_TYPE_BSTR16, "rest", -1, -1},
{NULL,NULL,0,0}
};
static cw_ValStruct_t cisco_ap_qos[]={
{CW_TYPE_BYTE,"tag-packets",1,-1},
{CW_TYPE_BYTE,"uranium-queue-depth",1,-1},
@ -580,6 +627,12 @@ static cw_ValStruct_t cisco_ap_qos[]={
{NULL,NULL,0,0}
};
static cw_ValStruct_t cisco_ap_core_dump[]={
{CW_TYPE_IPADDRESS,"tftp-server",4,-1},
{CW_TYPE_BOOL,"compression",1,16},
@ -614,6 +667,9 @@ static cw_ValStruct_t cisco_rouge_detections[]={
{NULL,NULL,0,0}
};
static cw_ValStruct_t cisco_ap_venue_settings[]={
{CW_TYPE_WORD,"group",2,-1},
{CW_TYPE_BYTE,"type",1,-1},
@ -661,7 +717,6 @@ static cw_ValStruct_t cisco_add_wlan70[]={
{CW_TYPE_BYTE, "cisco/dtim-period",1,440},
{CW_TYPE_STR,"cisco/profile-name",30,441},
{CW_TYPE_STR, "capwap80211/ssid",33,474},
{NULL,NULL,0,0}
};
@ -690,7 +745,7 @@ static cw_ValStruct_t cisco_add_wlan73[]={
{CW_TYPE_STR, "cisco/profile-name",30,545},
{CW_TYPE_BYTE, "cisco/allow-aaa-override",1,578},
{CW_TYPE_BYTE, "cisco/max-stations",1,580},
{CW_TYPE_STR, "capwap80211/ssid", 512 , 583},
{CW_TYPE_STR, "capwap80211/ssid", -1 , 583},
{NULL,NULL,0,0}
};
static int cisco_add_wlan_mkkey73(const char *pkey, uint8_t*data, int len, char *dst)
@ -702,12 +757,7 @@ static int cisco_add_wlan_mkkey73(const char *pkey, uint8_t*data, int len, char
return 1;
}
static int cisco_in_lw_del_wlan(struct cw_ElemHandler *eh,
static int cisco_in_del_wlan(struct cw_ElemHandler *eh,
struct cw_ElemHandlerParams *params,
uint8_t * data, int len)
{
@ -777,6 +827,7 @@ static cw_ValStruct_t cisco_add_lwwlan73[]={
static int cisoc_add_lwwlan_mkkey73(const char *pkey, uint8_t*data, int len, char *dst)
{
int wlan_id,radio_id;
sprintf(dst,"update-wlan");
return 0;
stop();
radio_id = cw_get_byte(data);
@ -1769,6 +1820,19 @@ static struct cw_ElemHandler handlers70[] = {
cisco_phy_ht_control_stru
},
{
"Cisco LWAP Elem 15", /* name */
CISCO_LWELEM_15, /* Element ID */
CW_VENDOR_ID_CISCO,CW_PROTO_LWAPP, /* Vendor / Proto */
1,1024, /* min/max length */
CW_TYPE_BSTR16, /* type */
"cisco/lwelem15", /* Key */
cw_in_radio_generic, /* get */
cw_out_radio_generic /* put */
},
{
@ -1784,6 +1848,19 @@ static struct cw_ElemHandler handlers70[] = {
cw_out_generic /* put */
},
{
"Cisco LWAPP Elem 37 (Diagnostic Channel?)", /* name */
CISCO_LWELEM_37, /* Element ID */
CW_VENDOR_ID_CISCO,CW_PROTO_LWAPP, /* Vendor / Proto */
1,1024, /* min/max length */
CW_TYPE_BSTR16, /* type */
"cisco/lwelem37", /* Key */
cw_in_generic, /* get */
cw_out_generic /* put */
},
{
"Cisco LWAP Elem 48", /* name */
@ -2109,15 +2186,27 @@ static struct cw_ElemHandler handlers70[] = {
CISCO_LWELEM_DELETE_WLAN, /* Element ID */
CW_VENDOR_ID_CISCO,CW_PROTO_LWAPP, /* Vendor / Proto */
4,4, /* min/max length */
NULL, /* type */
CW_TYPE_BSTR16, /* type */
"cisco-del-wlan", /* Key */
cisco_in_lw_del_wlan, /* get */
NULL, /* put */
cw_in_generic, /* get */
cw_out_generic, /* put */
NULL
}
,
{
"Cisco Delete WLAN ", /* name */
CISCO_ELEM_DELETE_WLAN, /* Element ID */
CW_VENDOR_ID_CISCO,0, /* Vendor / Proto */
3,3, /* min/max length */
NULL, /* type */
"cisco-del-wlan", /* Key */
cisco_in_del_wlan, /* get */
NULL, /* put */
NULL
}
,
{
"Radio Operational State (Draft 7)", /* name */
CAPWAP_ELEM_RADIO_OPERATIONAL_STATE, /* Element ID */
@ -2302,6 +2391,8 @@ static struct cw_ElemDef discovery_request_elements[] ={
* requests and no WTP Board Data element, so we make them
* non-mandatory here */
{0,0, CAPWAP80211_ELEM_WTP_RADIO_INFORMATION, 0, 0},
{0,0, CAPWAP_ELEM_WTP_BOARD_DATA, 0, 0},
/* Instead of WTP Board Data we get Board Data Options from
@ -2312,7 +2403,6 @@ static struct cw_ElemDef discovery_request_elements[] ={
};
/*static uint16_t discovery_response_states[] = {CAPWAP_STATE_DISCOVERY,0};*/
static struct cw_ElemDef discovery_response_elements[] ={
{0,CW_VENDOR_ID_CISCO, CISCO_ELEM_AP_TIMESYNC, 1, 0},
{0,CW_VENDOR_ID_CISCO, CISCO_ELEM_MWAR_TYPE, 0, 0},
@ -2393,16 +2483,19 @@ static struct cw_ElemDef configuration_status_request_elements70[] ={
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_PHY_HT_CAP, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_28, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_PHY_HT_CONTROL, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_33, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_48, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_55, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_105, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_15, 0, 0}, /* 15 */
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_33, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_37, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_48, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_55, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_105, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_CAPWAP_TIMERS, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_DIRECT_SEQUENCE_CONTROL, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_AP_UPTIME, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_AP_QOS, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_AP_LED_STATE_CONFIG, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_AP_LOG_FACILITY, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_MULTI_DOMAIN_CAPABILITY, 0, 0},
@ -2480,7 +2573,9 @@ static struct cw_ElemDef configuration_status_response_elements[] ={
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_PHY_HT_CAP, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_28, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_PHY_HT_CONTROL, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_15, 0, 0}, /* 15 */
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_33, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_37, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_48, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_55, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_105, 0, 0},
@ -2509,8 +2604,8 @@ static struct cw_ElemDef configuration_status_response_elements[] ={
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_SPAM_DOMAIN_SECRET, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_SSC_HASH_VALIDATION, 1, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_MWAR_HASH_VALUE, 1, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_SSC_HASH_VALIDATION, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_MWAR_HASH_VALUE, 0, 0},
{0,0,0,0}
};
@ -2518,21 +2613,26 @@ static struct cw_ElemDef configuration_status_response_elements[] ={
static struct cw_ElemDef configuration_update_request_elements[] ={
{0, 0, CAPWAP_ELEM_RADIO_ADMINISTRATIVE_STATE, 0, 0},
{0, 0, CAPWAP_ELEM_RADIO_OPERATIONAL_STATE, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_SPAM_VENDOR_SPECIFIC, 0, CW_IGNORE},
{0,CW_VENDOR_ID_CISCO, CISCO_ELEM_AP_GROUP_NAME, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_DELETE_WLAN, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_DELETE_WLAN, 0, 0},
{0, 0, CAPWAP_ELEM_RADIO_ADMINISTRATIVE_STATE, 0, 0},
{0, 0, CAPWAP_ELEM_RADIO_OPERATIONAL_STATE, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_AP_GROUP_NAME, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_BCAST_SSID_MODE, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_SPAM_VENDOR_SPECIFIC,0, CW_IGNORE},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_15, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_15, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_SUPPORTED_RATES, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_19, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_22, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_24, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_19, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_22, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_24, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_RRM_LOAD, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_33, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_39, 0, 0},
@ -2551,7 +2651,9 @@ static struct cw_ElemDef configuration_update_request_elements[] ={
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_PHY_HT_CAP, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_28, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_PHY_HT_CONTROL, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_15, 0, 0}, /* 15 */
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_33, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_37, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_48, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_55, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_105, 0, 0},
@ -2566,6 +2668,7 @@ static struct cw_ElemDef configuration_update_request_elements[] ={
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_AP_UPTIME, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_AP_QOS, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_AP_LED_STATE_CONFIG, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_AP_LOG_FACILITY, 0, 0},
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_MULTI_DOMAIN_CAPABILITY, 0, 0},
@ -2618,7 +2721,6 @@ static struct cw_ElemDef configuration_update_request_elements[] ={
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_SSC_HASH, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_DISCOVERY_PROTOCOL, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_DELETE_WLAN, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_TCP_ADJUST_MSS, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_ROUGE_DETECTION, 0, 0},
@ -2865,7 +2967,22 @@ static struct cw_ElemHandler handlers73[] = {
cisco_wtp_radio_config73,
}
,
{
"AP Quality of Service (>=v7.3)", /* name */
CISCO_ELEM_AP_QOS, /* Element ID */
CW_VENDOR_ID_CISCO,0, /* Vendor / Proto */
67,67, /* min/max length */
CW_TYPE_STRUCT, /* type */
"cisco/ap-qos", /* Key */
cw_in_radio_generic, /* get */
cw_out_radio_generic, /* put */
NULL,
NULL,
cisco_ap_qos73,
},
{
"AP Venue Settings", /* name */
CISCO_ELEM_AP_VENUE_SETTINGS, /* Element ID */
@ -2921,6 +3038,7 @@ static struct cw_ElemDef configuration_status_request_elements73[] ={
};
static struct cw_ElemDef configuration_update_request_elements73[] ={
{0, CW_VENDOR_ID_CISCO, CISCO_ELEM_AP_VENUE_SETTINGS, 0, 0},
{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_ADD_WLAN, 0, 0},
{0,0,0,0,0}

View File

@ -101,21 +101,29 @@ int main (int argc, char **argv)
struct cw_DiscoveryResults * results;
const char *bind_addr, *disc_addr;
/*
/*
{
struct cw_ValBit bits[] = {
{0,"burtstag"},
{10,"windows"},
{2,NULL}
{0,"ess"},
{1,"ibss"},
{2,"cf-pollable"},
{3,"cf-poll-request"},
{4,"privacy"},
{5,"short-preamble"},
{2,"pbcc"},
{3,"cf-poll-request"},
{2,NULL}
};
uint16_t x;
cw_set_word(&x,65534);
cw_set_word(&x,1057);
CW_TYPE_BITS->read(global_cfg,"hello",(uint8_t*)(&x),2,bits);
exit(0);
}
*/
}
*/
bootcfg.nmods=0;
/* read command line args, results are in bootcfg */
@ -166,8 +174,6 @@ int main (int argc, char **argv)
cw_dbg(DBG_INFO,"Local startup '%s' loaded.",bootcfg.local_startup_file);
}
cw_cfg_dump(global_cfg);
/* Create a temp. cfg */
cfg = cw_cfg_create();
if (cfg==NULL)