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:
2022-09-04 11:13:12 +02:00
parent ca4a6b9996
commit 0eb3e16932
14 changed files with 419 additions and 146 deletions

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