/*
This file is part of libcapwap.
libcapwap is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
libcapwap is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Foobar. If not, see .
*/
/**
* @file
* @brief
*/
#ifndef __DBG_H
#define __DBG_H
#include "conn.h"
#include "cw.h"
#ifndef CW_LOG_DUMP_ROW_LEN
#define CW_LOG_DUMP_ROW_LEN 32
#endif
#ifndef CW_LOG_DUMP_ROW_TAB_LEN
#define CW_LOG_DUMP_ROW_TAB_LEN 8
#endif
/**
*@addtogroup LOGDBG
*@{
*/
/**
* Debug levels
*/
enum cw_dbg_levels{
/** Show headers of incomming/outgoing CAPWAP packets */
DBG_PKT_IN = (1<<0),
DBG_PKT_OUT = (1<<1),
/** Hex-dump incomming/outgoing CAPWAP packets */
DBG_PKT_DMP_IN = (1<<3),
DBG_PKT_DMP_OUT = (1<<4),
/** Incomming CAPWAP packets with errors, wich would
usually silently discarded */
DBG_PKT_ERR = (1<<5),
/** Display incomming/outgoing CAPWAP/LWAPP messages */
DBG_MSG_IN = (1<<6),
DBG_MSG_OUT = (1<<7),
/** Show hex-dump of messages */
DBG_MSG_DMP_IN = (1<<8),
DBG_MSG_DMP_OUT = (1<<9),
/** Message errors */
DBG_MSG_ERR = (1<<10),
/** Show message elements in incomming/outgoing messages */
DBG_ELEM_IN = (1<<11),
DBG_ELEM_OUT = (1<<12),
/** Show message element details */
DBG_ELEM_DETAIL_IN = (1<<13),
DBG_ELEM_DETAIL_OUT = (1<<14),
/** Error in msg elements */
DBG_ELEM_ERR = (1<<15),
/** hex dump elements */
DBG_ELEM_DMP = (1<<16),
/** General infos, like CAPWAP state */
DBG_INFO = (1<<17),
/** Misc. warnings */
DBG_WARN = (1<<18),
/** RFC related */
DBG_RFC = (1<<19),
/** DTLS related messages */
DBG_DTLS = (1<<20),
/** DTLS BIOs in/out */
DBG_DTLS_BIO = (1<<21),
/** Dump DTLS BIO i/o */
DBG_DTLS_BIO_DMP = (1<<22),
/** Show DTLS Details */
DBG_DTLS_DETAIL = (1<<23),
// DBG_CFG_DMP = (1<<20),
// DBG_CFG_SET = (1<<21),
/** Debug Mods */
DBG_MOD = (1<<24),
/**Debug State machine */
DBG_STATE = (1<<25),
DBG_MSG_COMPOSE = (1<<26),
DBG_CFG_UPDATES = (1<<27),
DBG_ELEM_VNDR = (1<<28),
DBG_X = (1<<30),
DBG_ALL = (0x7fffffff),
DBG_ELEM_DMP_IN = 7,
DBG_ELEM_DMP_OUT = 9,
};
#define DBG_MSG (DBG_MSG_IN | DBG_MSG_OUT)
#define DBG_PKT (DBG_PKT_IN | DBG_PKT_OUT)
#define DBG_ELEM (DBG_ELEM_IN | DBG_ELEM_OUT)
#define DBG_LN __FILE__,__LINE__
/*
struct dbg_Context{
int level;
};
*/
void cw_dbg_set_level (int level, int on);
int cw_dbg_set_level_from_str(const char *level);
/*
void cw_dbg_elem_(struct cw_Conn * conn, int msg, int msgelem, const uint8_t * msgbuf, int len);
*/
/*
void cw_dbg_missing_mand(int level,struct cw_Conn *conn,cw_action_in_t ** ml,int n,cw_action_in_t *a);
*/
void cw_dbg_packet(struct cw_Conn *conn, uint8_t * packet, int len);
void cw_dbg_pkt(int level,struct cw_Conn *conn, uint8_t * packet, int len,struct sockaddr *from);
void cw_dbg(int level, const char *format, ...);
void cw_dbg_dmp(int level, const uint8_t * data, int len, const char *format, ...);
#endif
/**
* @defgroup DbgOptions Debug Options
* @{
*/
#define DBG_DISP_LINE_NUMBERS (1<<0)
#define DBG_DISP_ASC_DMP (1<<1)
#define DBG_DISP_COLORS (1<<2)
#define DBG_DETAIL_ALL 0xffffffff
/**@}*/
extern uint32_t cw_dbg_opt_display;
extern uint32_t cw_dbg_opt_level;
extern struct cw_StrListElem cw_dbg_strings[];
/*
#define cw_dbg cw_dbg_colored
*/
/*
#define cw_dbg_dmp(type,...) cw_dbg_dmp_(type,__FILE__,__LINE__,__VA_ARGS__)
*/
/*
#define cw_dbg_dmp cw_dbg_dmp_
*/
void cw_dbg_dmp_(int level, const uint8_t * data, int len, const char *format, ...);
void cw_dbg_elem(int level, struct cw_Conn *conn, int msg,
struct cw_ElemHandler * handler, const uint8_t * msgbuf, int len);
void cw_dbg_pkt_nc(int level,struct netconn *nc, uint8_t * packet, int len,struct sockaddr *from);
void cw_dbg_msg(int level,struct cw_Conn *conn, uint8_t * packet, int len,struct sockaddr *from);
char * cw_dbg_mkdmp(const uint8_t * data, int len);
//void cw_dbg_version_subelem(int level, const char *context, int subtype,
// uint32_t vendor_id, const uint8_t * vstr, int len);
void cw_dbg_ktv_dump(mavl_t ktv, uint32_t dbglevel,
const char *header, const char *prefix, const char *footer );
/**
* 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.
*/
/*#define cw_dbg_set_level(level,on)\
(on ? cw_dbg_opt_level |= (1<<(level)) : (cw_dbg_opt_level &= (-1)^(1<<(level))))
*/
/**
* Check if a specific debug level is set.
* @param level Level to check
* @return 0 if leveln is not set, otherwise level is set
*/
/*
#define cw_dbg_is_level(level)\
(cw_dbg_opt_level & (1<