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:
@ -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\
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
@ -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){
|
||||
|
210
src/cw/dbg.c
210
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)
|
||||
|
74
src/cw/dbg.h
74
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
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user