diff --git a/INSTALL b/INSTALL index 2208b5d6..8f43fc05 100644 --- a/INSTALL +++ b/INSTALL @@ -15,7 +15,6 @@ cd .. make - Ubuntu ------ diff --git a/README.md b/README.md index 7750ba0e..b7771e46 100644 --- a/README.md +++ b/README.md @@ -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. + diff --git a/src/ac/wtpman.c b/src/ac/wtpman.c index 307c166a..a64de01f 100644 --- a/src/ac/wtpman.c +++ b/src/ac/wtpman.c @@ -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); } diff --git a/src/cw/Makefile b/src/cw/Makefile index 60063d7e..471608b1 100644 --- a/src/cw/Makefile +++ b/src/cw/Makefile @@ -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\ diff --git a/src/cw/cw_dbg_set_level.c b/src/cw/cw_dbg_set_level.c deleted file mode 100644 index a67025ee..00000000 --- a/src/cw/cw_dbg_set_level.c +++ /dev/null @@ -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); - } -} - diff --git a/src/cw/cw_dbg_set_level_from_str.c b/src/cw/cw_dbg_set_level_from_str.c deleted file mode 100644 index 02a3efaf..00000000 --- a/src/cw/cw_dbg_set_level_from_str.c +++ /dev/null @@ -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; -} diff --git a/src/cw/cw_type_struct.c b/src/cw/cw_type_struct.c index d8b33aff..41601585 100644 --- a/src/cw/cw_type_struct.c +++ b/src/cw/cw_type_struct.c @@ -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 = posread(cfg,key,data+pos,l,stru[i].valguard); - // printf("READ STRUCT (%d): %s: %s\n",pos,key,dbstr); if (stru[i].len==-1){ diff --git a/src/cw/dbg.c b/src/cw/dbg.c index d6b8db9b..3278b092 100644 --- a/src/cw/dbg.c +++ b/src/cw/dbg.c @@ -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) diff --git a/src/cw/dbg.h b/src/cw/dbg.h index a4efe740..f8f1ca57 100644 --- a/src/cw/dbg.h +++ b/src/cw/dbg.h @@ -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 diff --git a/src/cw/lwapp.h b/src/cw/lwapp.h index 7e0732fc..a3fe7f56 100644 --- a/src/cw/lwapp.h +++ b/src/cw/lwapp.h @@ -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 diff --git a/src/mod/cisco/capwap_cisco.h b/src/mod/cisco/capwap_cisco.h index d62087a1..2eb0beae 100644 --- a/src/mod/cisco/capwap_cisco.h +++ b/src/mod/cisco/capwap_cisco.h @@ -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 */ diff --git a/src/mod/cisco/lwapp_cisco.h b/src/mod/cisco/lwapp_cisco.h index e801a739..aae78d62 100644 --- a/src/mod/cisco/lwapp_cisco.h +++ b/src/mod/cisco/lwapp_cisco.h @@ -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 diff --git a/src/mod/cisco/mod_cisco.c b/src/mod/cisco/mod_cisco.c index 07155678..18a28fc7 100644 --- a/src/mod/cisco/mod_cisco.c +++ b/src/mod/cisco/mod_cisco.c @@ -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} diff --git a/src/wtp/wtp_main.c b/src/wtp/wtp_main.c index f6c84849..6e6b045a 100644 --- a/src/wtp/wtp_main.c +++ b/src/wtp/wtp_main.c @@ -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)