Improved debugging

This commit is contained in:
7u83 2022-08-20 21:00:46 +02:00
parent 6405a937d2
commit ee16f3794f
12 changed files with 157 additions and 147 deletions

View File

@ -32,7 +32,7 @@ struct cw_StrListElem capwap_strings_elem[] = {
{CAPWAP_ELEM_ECN_SUPPORT, "ECN Support"},
{CAPWAP_ELEM_IDLE_TIMEOUT, "Idle Timeout"},
{CW_ELEM_IMAGE_DATA, "Image Data"},
{CW_ELEM_IMAGE_IDENTIFIER, "Image Identifier"},
{CAPWAP_ELEM_IMAGE_IDENTIFIER, "Image Identifier"},
{CW_ELEM_IMAGE_INFORMATION, "Image Information"},
{CW_ELEM_INITIATE_DOWNLOAD, "Initiate Download"},
{CAPWAP_ELEM_LOCATION_DATA, "Location Data"},

View File

@ -474,9 +474,10 @@ static int process_elements(struct cw_Conn *conn, uint8_t * rawmsg, int len,
elems_ptr = cw_get_msg_elems_ptr(msg_ptr);
cw_dbg(DBG_MSG_PARSING, "*** Parsing message of type %d - (%s) ***",
message->type, message->name);
/* if (cw_dbg_is_level(DBG_ELEM_IN)){
cw_dbg(DBG_MSG_PARSING, "Parsing message of type %d - (%s)",
message->type, message->name);
}*/
memset(&params,0,sizeof(struct cw_ElemHandlerParams));
@ -493,6 +494,7 @@ static int process_elements(struct cw_Conn *conn, uint8_t * rawmsg, int len,
params.msgdata = message;
params.msgset=conn->msgset;
params.conn = conn;
params.dbg_level = DBG_ELEM_IN;
cw_decode_elements(&params,elems_ptr, elems_len);
@ -502,8 +504,8 @@ static int process_elements(struct cw_Conn *conn, uint8_t * rawmsg, int len,
if (params.mand_found)
cw_check_missing_mand(message, params.mand_found,conn->msgset->handlers_by_key);
cw_dbg(DBG_MSG_PARSING, "*** End parsing message of type %d (%s) ***",
message->type, message->name);
// cw_dbg(DBG_MSG_PARSING, "*** End parsing message of type %d (%s) ***",
// message->type, message->name);
if (params.mand_found)
mavl_destroy(params.mand_found);

View File

@ -14,6 +14,41 @@ int conn_send_msg(struct cw_Conn * conn, uint8_t *rawmsg)
packetlen = cw_get_hdr_msg_total_len(rawmsg);
cw_dbg_msg(DBG_MSG_OUT, conn,rawmsg, packetlen,(struct sockaddr*)&conn->addr);
{
int type;
uint8_t *msgptr;
msgptr = rawmsg + cw_get_hdr_msg_offset(rawmsg);
struct cw_MsgData * msg;
type = cw_get_msg_type(msgptr);
msg = cw_msgset_get_msgdata(conn->msgset,type);
uint8_t *elems_ptr;
int offset = cw_get_hdr_msg_offset(rawmsg);
uint8_t *msg_ptr = rawmsg + offset;
int elems_len = cw_get_msg_elems_len(msg_ptr);
elems_ptr = cw_get_msg_elems_ptr(msg_ptr);
cw_Cfg_t * cfg = cw_cfg_create();
struct cw_ElemHandlerParams params;
memset(&params,0,sizeof(struct cw_ElemHandlerParams));
params.cfg=cfg;
params.msgset=conn->msgset;
params.msgdata=msg;
params.mand_found = mavl_create_conststr();
params.dbg_level = DBG_ELEM_OUT;
cw_decode_elements( &params, elems_ptr,elems_len);
cw_cfg_destroy(cfg);
if (params.mand_found){
cw_check_missing_mand(msg, params.mand_found,conn->msgset->handlers_by_key);
mavl_destroy(params.mand_found);
}
}
/* Zyxel doesn't count msg element length from

View File

@ -18,9 +18,9 @@ void cw_dbg_set_level (int level, int on)
break;
default:
if (on)
cw_dbg_opt_level |= (1 << (level));
cw_dbg_opt_level |= (level);
else
cw_dbg_opt_level &= (0xffffffff) ^ (1 << (level));
cw_dbg_opt_level &= (0xffffffff) ^ (level);
}
}

View File

@ -79,7 +79,7 @@ static struct cw_StrListElem theme0[] = {
{DBG_PKT_ERR, ANSI_RED},
{DBG_ELEM_ERR, ANSI_RED},
{DBG_SUBELEM, ANSI_BBLACK},
// {DBG_SUBELEM, ANSI_BBLACK},
{DBG_DTLS, ANSI_MAGENTA ANSI_BOLD},
{DBG_DTLS_DETAIL, ANSI_MAGENTA},
{DBG_DTLS_BIO, ANSI_BMAGENTA},
@ -94,7 +94,7 @@ static struct cw_StrListElem theme0[] = {
{DBG_MOD, ANSI_WHITE},
{DBG_CFG_DMP, ANSI_BCYAN },
{CW_STR_STOP, ""}
};
@ -117,22 +117,22 @@ static struct cw_StrListElem color_off[] = {
*/
static struct cw_StrListElem prefix[] = {
{DBG_INFO, " Info -"},
{DBG_PKT_IN, " Pkt IN -"},
{DBG_PKT_OUT, " Pkt Out -"},
{DBG_MSG_IN, " Msg IN -"},
{DBG_MSG_OUT, " Msg Out -"},
{DBG_INFO, "Info -"},
{DBG_PKT_IN, "Pkt IN -"},
{DBG_PKT_OUT, "Pkt Out -"},
{DBG_MSG_IN, "Msg In - "},
{DBG_MSG_OUT, "Msg Out - "},
{DBG_ELEM_IN, " Msg Element -"},
{DBG_ELEM_OUT, " Msg Element -"},
{DBG_MSG_PARSING, "" },
{DBG_ELEM_IN, " Msg Element -"},
{DBG_ELEM_OUT, " Msg Element -"},
{DBG_MSG_ERR, " Msg Error -"},
{DBG_PKT_ERR, " Pkt Error -"},
{DBG_ELEM_ERR, " Elem Error -"},
{DBG_RFC, " RFC -"},
{DBG_SUBELEM, " Sub-Element - "},
{DBG_DTLS, " DTLS - "},
{DBG_DTLS_DETAIL, " DTLS - "},
{DBG_MSG_ERR, " Msg Error -"},
{DBG_PKT_ERR, " Pkt Error -"},
{DBG_ELEM_ERR, " Elem Error -"},
{DBG_RFC, " RFC -"},
{DBG_DTLS, "DTLS - "},
{DBG_DTLS_DETAIL, "DTLS - "},
{DBG_WARN, " Warning - "},
{DBG_MOD, " Mod - "},
{DBG_STATE, " STATEMACHINE - "},
@ -142,6 +142,7 @@ static struct cw_StrListElem prefix[] = {
{DBG_X, "XXXXX - "},
{CW_STR_STOP, ""}
};
@ -183,10 +184,13 @@ const char *get_dbg_color_ontext(int level)
int cw_dbg_is_level(int level)
{
if (level >= DBG_ALL ){
if (level > 1 && (level &1))
return 1;
}
return (cw_dbg_opt_level & (1<<level));
/* if (level >= DBG_ALL ){
return 1;
}*/
return (cw_dbg_opt_level & (level));
}
@ -197,11 +201,11 @@ static void cw_dbg_vlog_line(struct cw_LogWriter * writer,
char fbuf[512];
if ( writer->colored){
sprintf(fbuf,"DBG: %s%s %s%s%s",
sprintf(fbuf,"DBG: %s%s%s%s%s",
prefix_color,prefix,textcolor,format,DBG_CLR_OFF);
}
else{
sprintf(fbuf,"DBG: %s %s",
sprintf(fbuf,"DBG: %s%s",
prefix,format);
}
@ -421,38 +425,6 @@ void cw_dbg_elem(int level, struct cw_Conn *conn, int msg,
void cw_dbg_ktv_dump(mavl_t ktv, uint32_t dbglevel,
const char *header, const char *prefix, const char *footer )
{
char value[500];
struct cw_Val * data;
mavliter_t it;
const struct cw_Type * type;
if (header != NULL)
cw_dbg (dbglevel, header);
mavliter_init(&it,ktv);
mavliter_foreach(&it){
data = mavliter_get(&it);
type = data->type;
type->to_str(data,value,0);
cw_dbg(dbglevel,"%s%s :%s: %s",prefix,data->key,type->get_type_name(data), value);
}
if (footer != NULL)
cw_dbg (dbglevel, footer);
}

View File

@ -47,93 +47,88 @@
* Debug levels
*/
enum cw_dbg_levels{
/** Show headers of incomming CAPWAP packets */
DBG_PKT_IN=0,
/** Show headers of outgoing CAPWAP packets */
DBG_PKT_OUT,
/** Show headers of incomming/outgoing CAPWAP packets */
DBG_PKT_IN = (1<<0),
DBG_PKT_OUT = (1<<1),
/** Incomming CAPWAP packets with errors, wich would
usually silently discarded */
DBG_PKT_ERR,
DBG_PKT_ERR = (1<<2),
/** Dump content of incomming packets */
DBG_PKT_DMP,
/** Dump content of packets */
DBG_PKT_DMP = (1<<3),
/** Display incomming CAPWAP/LWAPP messages */
DBG_MSG_IN,
/** Display incomming/outgoing CAPWAP/LWAPP messages */
DBG_MSG_IN = (1<<4),
DBG_MSG_OUT = (1<<5),
/** Display outgoing CAPWAP/LWAPP messages */
DBG_MSG_OUT,
DBG_MSG_DMP,
/** Show hex-dump of messages */
DBG_MSG_DMP = (1<<6),
/** Message errors */
DBG_MSG_ERR,
DBG_MSG_ERR = (1<<7),
/** Show message elements in incomming messages */
DBG_ELEM_IN,
/** Show message elements assembled for outgoing messages */
DBG_ELEM_OUT,
/** Show message elements in incomming/outgoing messages */
DBG_ELEM_IN = (1<<8),
DBG_ELEM_OUT = (1<<9),
/** Show message element details */
DBG_ELEM_DETAIL,
DBG_ELEM_DETAIL = (1<<10),
/** Error in msg elements */
DBG_ELEM_ERR,
/** Show subelements */
DBG_SUBELEM,
/** Show dump of subelements */
DBG_SUBELEM_DMP,
DBG_ELEM_ERR = (1<<11),
/** hex dump elements */
DBG_ELEM_DMP,
DBG_ELEM_DMP = (1<<12),
/** General infos, like CAPWAP state */
DBG_INFO,
DBG_INFO = (1<<13),
/** Misc. warnings */
DBG_WARN,
DBG_WARN = (1<<14),
/** RFC related */
DBG_RFC,
DBG_RFC = (1<<15),
/** DTLS related messages */
DBG_DTLS,
DBG_DTLS = (1<<16),
/** DTLS BIOs in/out */
DBG_DTLS_BIO,
DBG_DTLS_BIO = (1<<17),
/** Dump DTLS BIO i/o */
DBG_DTLS_BIO_DMP,
DBG_DTLS_BIO_DMP = (1<<18),
/** Show DTLS Details */
DBG_DTLS_DETAIL,
DBG_DTLS_DETAIL = (1<<19),
DBG_CFG_DMP,
DBG_CFG_DMP = (1<<20),
DBG_CFG_SET,
DBG_CFG_SET = (1<<21),
/** Debug Mods */
DBG_MOD,
DBG_MOD = (1<<22),
DBG_STATE, /**<Debug State machine */
/**Debug State machine */
DBG_STATE = (1<<23),
DBG_ALL,
DBG_PKT_DMP_OUT,
DBG_PKT_DMP_IN,
DBG_PKT_DMP_OUT = (1<<24),
DBG_PKT_DMP_IN = (1<<25),
DBG_MSG_IN_DMP,
DBG_MSG_OUT_DMP,
DBG_MSG_ASSEMBLY,
DBG_MSG_PARSING,
DBG_MSG_ASSEMBLY = (1<<26),
DBG_MSG_IN_DMP = (1<<27),
DBG_MSG_OUT_DMP = (1<<29),
DBG_X
DBG_X = (1<<29),
DBG_ALL = (0xffffffff),
DBG_MSG_PARSING = 3,
DBG_MSG_COMPOSING = 5,
};

View File

@ -51,10 +51,10 @@ struct cw_StrListElem cw_dbg_strings[] = {
{ DBG_ELEM_OUT, "elem_out"},
{ DBG_ELEM_DMP, "elem_dmp"},
{ DBG_SUBELEM, "subelem"},
{ DBG_SUBELEM_DMP, "subelem_dmp" },
// { DBG_SUBELEM, "subelem"},
// { DBG_SUBELEM_DMP, "subelem_dmp" },
{ DBG_ELEM_DETAIL, "elem_detail"},
// { DBG_ELEM_DETAIL, "elem_detail"},
{ DBG_ELEM_ERR, "elem_err" },
@ -72,7 +72,13 @@ struct cw_StrListElem cw_dbg_strings[] = {
{ DBG_MOD,"mod"},
{ DBG_STATE, "state" },
{ (DBG_MSG_IN | DBG_MSG_OUT), "msg" },
{ (DBG_MSG_IN | DBG_MSG_OUT | DBG_ELEM_IN | DBG_ELEM_OUT ), "std" },
{ DBG_ALL, "all"},
{ CW_STR_STOP, NULL }
};

View File

@ -159,8 +159,8 @@ int cw_compose_message(struct cw_Conn *conn, uint8_t * rawout)
{
printf ("----------------------------------- redecode -----------------------------\n");
uint8_t *elems_ptr;
// printf ("----------------------------------- redecode -----------------------------\n");
/* uint8_t *elems_ptr;
int offset = cw_get_hdr_msg_offset(rawout);
@ -176,7 +176,7 @@ int cw_compose_message(struct cw_Conn *conn, uint8_t * rawout)
params.msgset=conn->msgset;
params.msgdata=msg;
params.mand_found = mavl_create_conststr();
params.dbg_level = DBG_ELEM_OUT;
cw_decode_elements( &params, elems_ptr,elems_len);
cw_cfg_destroy(cfg);
@ -184,8 +184,8 @@ int cw_compose_message(struct cw_Conn *conn, uint8_t * rawout)
cw_check_missing_mand(msg, params.mand_found,conn->msgset->handlers_by_key);
mavl_destroy(params.mand_found);
}
printf ("----------------------------------- end redecode -----------------------------\n");
*/
// printf ("----------------------------------- end redecode -----------------------------\n");
}
@ -249,8 +249,9 @@ int cw_decode_element(struct cw_ElemHandlerParams *params, int proto,
return -1;
}
cw_dbg_elem(DBG_ELEM_IN, NULL, params->msgdata->type, handler,
data, len);
if (!handler->flags)
cw_dbg_elem(params->dbg_level, NULL, params->msgdata->type, handler,
data, len);
if (handler->get == NULL) {
cw_log(LOG_ERR, "No get method defined for %d %s", handler->id,

View File

@ -33,6 +33,7 @@ struct cw_ElemHandlerParams {
mlist_t unrecognized;
// cw_Val_t * elem;
char * debug_details;
uint32_t dbg_level;
cw_Cfg_t * cfg;
cw_Cfg_t * cfg_list[10];
};
@ -57,7 +58,7 @@ struct cw_ElemHandler {
int (*mkkey)(const char *pkey, uint8_t*data, int len, char *dst);
int (*patch)(uint8_t *dst, void *data );
void * param;
uint8_t flags;
};

View File

@ -166,7 +166,13 @@ static struct cw_ElemHandler handlers[] = {
NULL, /* type */
"vendor_specific_payload", /* Key */
capwap_in_vendor_specific_payload, /* get */
NULL /* put */
NULL, /* put */
NULL, /* mkkey*/
NULL, /* patch*/
NULL, /* param */
1 /* flags */
}
,
{

View File

@ -947,7 +947,11 @@ static struct cw_ElemHandler handlers70[] = {
NULL, /* type */
"cisco_spam_vendor_specific", /* Key */
cisco_in_spam_vendor_specific, /* get */
NULL /* put */
NULL, /* put */
NULL,
NULL,
NULL, /* param */
1
}
,
{

View File

@ -2,21 +2,13 @@
# This file is igenerated by WAT
# If you edit this, your cahnges might be overwritten
#
ac-name-with-index.0:
ac-name-with-index.1:
ac-name-with-index.2:
capwap-local-ip-address: 192.168.0.13
capwap-timers/echo-interval: 30
capwap-timers/max-discovery-interval: 10
capwap/ac-name:
capwap/image-identifier/identifier: .x0600c704
capwap/image-identifier/vendor-id: 4232704
cisco-8011-assoc-limit/enable: false
cisco-8011-assoc-limit/interval: 500
cisco-8011-assoc-limit/limit: 25
cisco/ac-ip-addr-with-index.0: 0.0.0.0
cisco/ac-ip-addr-with-index.1: 0.0.0.0
cisco/ac-ip-addr-with-index.2: 0.0.0.0
cisco/ap-backup-software-version: .x00000000
cisco/ap-dtls-data-cfg/cabable: true
cisco/ap-dtls-data-cfg/enabled: false
@ -47,18 +39,15 @@ cisco/ap-static-ip-addr/gateway: 192.168.0.1
cisco/ap-static-ip-addr/netmask: 255.255.255.0
cisco/ap-static-ip-addr/unknown: 0.0.0.0
cisco/ap-sub-mode: 0
cisco/ap-telnet-ssh/ssh: true
cisco/ap-telnet-ssh/telnet: true
cisco/ap-telnet-ssh/ssh: false
cisco/ap-telnet-ssh/telnet: false
cisco/ap-uptime/current-uptime: 84
cisco/ap-uptime/last-uptime: 1
cisco/ap-username-and-password/802.1x-credentials/option: 2
cisco/ap-username-and-password/802.1x-credentials/password:
cisco/ap-username-and-password/802.1x-credentials/username:
cisco/ap-username-and-password/login-credentials/enable-password: $1$qve.$obrsuC2vFk5/TepRMiMxa.
cisco/ap-username-and-password/login-credentials/option: 1025
cisco/ap-username-and-password/login-credentials/password: $1$MX4t$F19wCuY8yN5jBD7g2Qutr/
cisco/ap-username-and-password/login-credentials/username: admin
cisco/cisco-discovery-protocol/data: 0
cisco/cisco-discovery-protocol/data: 513
cisco/cisco-discovery-protocol/enabled: false
cisco/elem132: .x0100000000
cisco/loghost-config/last-joined-ap: None
@ -72,8 +61,8 @@ cisco/mwar-addr/address: 192.168.0.14
cisco/mwar-addr/mwar-type: 0
cisco/mwar-addr/unknown: 0
cisco/reset-button-state: true
cisco/rouge-and-mss/enable: true
cisco/rouge-and-mss/tcp-adjust-mss: 1363
cisco/rouge-and-mss/enable: false
cisco/rouge-and-mss/tcp-adjust-mss: 0
cisco/rouge-detection/rest: .x0000000a
cisco/rouge-detection/rouge-detection: true
cisco/sig-toogle: true
@ -86,7 +75,7 @@ cisco/wtp-board-data/card-revision: 0
cisco/wtp-board-data/ethernet-mac-address: .xc47d4f3af8a6
cisco/wtp-board-data/options/ant-type: 1
cisco/wtp-board-data/options/ap-type: 1
cisco/wtp-board-data/options/failover-priority: 1
cisco/wtp-board-data/options/failover-priority: 0
cisco/wtp-board-data/options/flex-connect: 1
cisco/wtp-board-data/wtp-model-hi: 0
cisco/wtp-board-data/wtp-model-lo: 0
@ -127,7 +116,6 @@ radio.0/cisco/lwelem27: .x00000000000000000000000000000000000000000000000000
radio.0/cisco/lwelem28: .x0303020202000000000000000000000000000000000000000000313f01
radio.0/cisco/lwelem29: .x00010000000000000200001400
radio.0/cisco/lwelem48: .x01055a0101a6c405b06432b03232
radio.0/cisco/lwelem55: .x000000000000000000000000
radio.0/cisco/lwelem9: .x0100000000000000000000000000000000
radio.0/cisco/mac-operation/fragmentation-threshold: 2346
radio.0/cisco/mac-operation/long-retry: 4
@ -169,7 +157,7 @@ radio.0/wlan.1/add-wlan/scan-defer-time: 100
radio.0/wlan.1/add-wlan/session-timout: 1800
radio.0/wlan.1/add-wlan/ssid: tubeC
radio.0/wlan.1/add-wlan/wep-encryption: false
radio.0/wlan.1/add-wlan/wep-key: .x038c4ffcda555c6a10126ffb70
radio.0/wlan.1/add-wlan/wep-key: .x68f4ae11b1b5b53d3cba571b50
radio.0/wlan.1/add-wlan/wep-key-index: 1
radio.0/wlan.1/add-wlan/wlan-capability: 1073
radio.0/wlan.1/add-wlan/wlan-id: 1
@ -186,7 +174,7 @@ radio.0/wlan.13/add-wlan/scan-defer-time: 100
radio.0/wlan.13/add-wlan/session-timout: 1800
radio.0/wlan.13/add-wlan/ssid: SuperSSID
radio.0/wlan.13/add-wlan/wep-encryption: false
radio.0/wlan.13/add-wlan/wep-key: .x038c4ffcda555c6a10126ffb70
radio.0/wlan.13/add-wlan/wep-key: .x68f4ae11b1b5b53d3cba571b50
radio.0/wlan.13/add-wlan/wep-key-index: 1
radio.0/wlan.13/add-wlan/wlan-capability: 1057
radio.0/wlan.13/add-wlan/wlan-id: 13
@ -204,7 +192,7 @@ radio.1/cisco/antenna-payload/unknown: 3
radio.1/cisco/channel-power: .x0808102408221c16100a04fefe2808221c16100a04fefe2c08221c16100a04fefe3008221c16100a04fefe3408221c16100a04fefe3808221c16100a04fefe3c08221c16100a04fefe4008221c16100a04fefe6408221c16100a04fefe6808221c16100a04fefe6c08221c16100a04fefe7008221c16100a04fefe7408221c16100a04fefe8408221c16100a04fefe8808221c16100a04fefe8c08221c16100a04fefe
radio.1/cisco/elem145: .x01
radio.1/cisco/elem15/cfg-type: 1 - global
radio.1/cisco/elem15/channel: 140
radio.1/cisco/elem15/channel: 116
radio.1/cisco/elem15/rest: .x07ffffffce010001
radio.1/cisco/elem153: .x00
radio.1/cisco/elem156: .x020100
@ -235,7 +223,7 @@ radio.1/cisco/multi-domain-capability/number-of-channels: 4
radio.1/cisco/multi-domain-capability/reserved: 1
radio.1/cisco/tx-power-levels: .x070011000e000b000800050002ffff0000
radio.1/cisco/tx-power/cfg-type: 1 - global
radio.1/cisco/tx-power/current-tx-power: 6
radio.1/cisco/tx-power/current-tx-power: 1
radio.1/cisco/wtp-radio-config/beacon-period: 100
radio.1/cisco/wtp-radio-config/bss-id: .x04fe7f499b90
radio.1/cisco/wtp-radio-config/cfg-period: 4
@ -262,7 +250,7 @@ radio.1/wlan.1/add-wlan/scan-defer-time: 100
radio.1/wlan.1/add-wlan/session-timout: 1800
radio.1/wlan.1/add-wlan/ssid: tubeC
radio.1/wlan.1/add-wlan/wep-encryption: false
radio.1/wlan.1/add-wlan/wep-key: .xd3f088160e08fa1438ce106965
radio.1/wlan.1/add-wlan/wep-key: .x47067708e07287af779e30c94a
radio.1/wlan.1/add-wlan/wep-key-index: 1
radio.1/wlan.1/add-wlan/wlan-capability: 17
radio.1/wlan.1/add-wlan/wlan-id: 1
@ -279,7 +267,7 @@ radio.1/wlan.13/add-wlan/scan-defer-time: 100
radio.1/wlan.13/add-wlan/session-timout: 1800
radio.1/wlan.13/add-wlan/ssid: SuperSSID
radio.1/wlan.13/add-wlan/wep-encryption: false
radio.1/wlan.13/add-wlan/wep-key: .xd3f088160e08fa1438ce106965
radio.1/wlan.13/add-wlan/wep-key: .x47067708e07287af779e30c94a
radio.1/wlan.13/add-wlan/wep-key-index: 1
radio.1/wlan.13/add-wlan/wlan-capability: 1
radio.1/wlan.13/add-wlan/wlan-id: 13
@ -289,7 +277,7 @@ radio.255/admin-state: 1 - enabled
radio.255/operational-state/cause: Normal
radio.255/operational-state/state: enabled
session-id: .x4a230869
statistics-timer: 2502
statistics-timer: 180
wtp-board-data/board-id: .x0000
wtp-board-data/mac-address: .x0800276edf58
wtp-board-data/model-no: "AIR-LAP1142N-E-K9 "