nl: Print file:line:func in debugging messages and provide --disable-debug to disable debugging
Compiling libnl with --disable-debug will result in the ignorance of the 'NLDBG' environment variable. Signed-off-by: Thomas Graf <tgraf@suug.ch>
This commit is contained in:
parent
f9241d57fe
commit
ff567100d6
|
@ -92,6 +92,11 @@ AC_ARG_ENABLE([pthreads],
|
||||||
[enable_pthreads="$enableval"], [enable_pthreads="yes"])
|
[enable_pthreads="$enableval"], [enable_pthreads="yes"])
|
||||||
AM_CONDITIONAL([DISABLE_PTHREADS], [test "$enable_pthreads" = "no"])
|
AM_CONDITIONAL([DISABLE_PTHREADS], [test "$enable_pthreads" = "no"])
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([debug],
|
||||||
|
AS_HELP_STRING([--disable-debug], [Do not include debugging statements]),
|
||||||
|
[enable_debug="$enableval"], [enable_debug="yes"])
|
||||||
|
AM_CONDITIONAL([ENABLE_DEBUG], [test "$enable_debug" = "no" ])
|
||||||
|
|
||||||
AC_CHECK_LIB([m], [pow], [], AC_MSG_ERROR([libm is required]))
|
AC_CHECK_LIB([m], [pow], [], AC_MSG_ERROR([libm is required]))
|
||||||
|
|
||||||
if test "x$enable_pthreads" = "xno"; then
|
if test "x$enable_pthreads" = "xno"; then
|
||||||
|
@ -100,6 +105,10 @@ else
|
||||||
AC_CHECK_LIB([pthread], [pthread_mutex_lock], [], AC_MSG_ERROR([libpthread is required]))
|
AC_CHECK_LIB([pthread], [pthread_mutex_lock], [], AC_MSG_ERROR([libpthread is required]))
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "x$enable_debug" = "xyes"; then
|
||||||
|
AC_DEFINE([NL_DEBUG], [1], [Define to 1 to enable debugging])
|
||||||
|
fi
|
||||||
|
|
||||||
AC_CONFIG_SUBDIRS([doc])
|
AC_CONFIG_SUBDIRS([doc])
|
||||||
|
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
|
|
|
@ -80,24 +80,29 @@ struct trans_list {
|
||||||
struct nl_list_head list;
|
struct nl_list_head list;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define NL_DEBUG 1
|
#ifdef NL_DEBUG
|
||||||
|
#define NL_DBG(LVL,FMT,ARG...) \
|
||||||
#define NL_DBG(LVL,FMT,ARG...) \
|
do { \
|
||||||
do { \
|
if (LVL <= nl_debug) \
|
||||||
if (LVL <= nl_debug) \
|
fprintf(stderr, \
|
||||||
fprintf(stderr, "DBG<" #LVL ">: " FMT, ##ARG); \
|
"DBG<" #LVL ">%20s:%-4u %s: " FMT, \
|
||||||
|
__FILE__, __LINE__, \
|
||||||
|
__PRETTY_FUNCTION__, ##ARG); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
#else /* NL_DEBUG */
|
||||||
|
#define NL_DBG(LVL,FMT,ARG...) do { } while(0)
|
||||||
|
#endif /* NL_DEBUG */
|
||||||
|
|
||||||
#define BUG() \
|
#define BUG() \
|
||||||
do { \
|
do { \
|
||||||
NL_DBG(1, "BUG: %s:%d\n", \
|
fprintf(stderr, "BUG at file position %s:%d:%s\n", \
|
||||||
__FILE__, __LINE__); \
|
__FILE__, __LINE__, __PRETTY_FUNCTION__); \
|
||||||
assert(0); \
|
assert(0); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define APPBUG(msg) \
|
#define APPBUG(msg) \
|
||||||
do { \
|
do { \
|
||||||
NL_DBG(1, "APPLICATION BUG: %s:%d:%s: %s\n", \
|
fprintf(stderr, "APPLICATION BUG: %s:%d:%s: %s\n", \
|
||||||
__FILE__, __LINE__, __PRETTY_FUNCTION__, msg); \
|
__FILE__, __LINE__, __PRETTY_FUNCTION__, msg); \
|
||||||
assert(0); \
|
assert(0); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
|
@ -211,7 +211,9 @@ static void neigh_keygen(struct nl_object *obj, uint32_t *hashkey,
|
||||||
uint32_t n_ifindex;
|
uint32_t n_ifindex;
|
||||||
char n_addr[0];
|
char n_addr[0];
|
||||||
} __attribute__((packed)) *nkey;
|
} __attribute__((packed)) *nkey;
|
||||||
|
#ifdef NL_DEBUG
|
||||||
char buf[INET6_ADDRSTRLEN+5];
|
char buf[INET6_ADDRSTRLEN+5];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (neigh->n_family == AF_BRIDGE) {
|
if (neigh->n_family == AF_BRIDGE) {
|
||||||
if (neigh->n_lladdr)
|
if (neigh->n_lladdr)
|
||||||
|
|
|
@ -307,7 +307,9 @@ static void route_keygen(struct nl_object *obj, uint32_t *hashkey,
|
||||||
uint32_t rt_prio;
|
uint32_t rt_prio;
|
||||||
char rt_addr[0];
|
char rt_addr[0];
|
||||||
} __attribute__((packed)) *rkey;
|
} __attribute__((packed)) *rkey;
|
||||||
|
#ifdef NL_DEBUG
|
||||||
char buf[INET6_ADDRSTRLEN+5];
|
char buf[INET6_ADDRSTRLEN+5];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (route->rt_dst)
|
if (route->rt_dst)
|
||||||
addr = route->rt_dst;
|
addr = route->rt_dst;
|
||||||
|
@ -449,8 +451,10 @@ static int route_update(struct nl_object *old_obj, struct nl_object *new_obj)
|
||||||
struct rtnl_route *new_route = (struct rtnl_route *) new_obj;
|
struct rtnl_route *new_route = (struct rtnl_route *) new_obj;
|
||||||
struct rtnl_route *old_route = (struct rtnl_route *) old_obj;
|
struct rtnl_route *old_route = (struct rtnl_route *) old_obj;
|
||||||
struct rtnl_nexthop *new_nh;
|
struct rtnl_nexthop *new_nh;
|
||||||
char buf[INET6_ADDRSTRLEN+5];
|
|
||||||
int action = new_obj->ce_msgtype;
|
int action = new_obj->ce_msgtype;
|
||||||
|
#ifdef NL_DEBUG
|
||||||
|
char buf[INET6_ADDRSTRLEN+5];
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ipv6 ECMP route notifications from the kernel come as
|
* ipv6 ECMP route notifications from the kernel come as
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
int nl_debug = 0;
|
int nl_debug = 0;
|
||||||
|
|
||||||
/** @cond SKIP */
|
/** @cond SKIP */
|
||||||
|
#ifdef NL_DEBUG
|
||||||
struct nl_dump_params nl_debug_dp = {
|
struct nl_dump_params nl_debug_dp = {
|
||||||
.dp_type = NL_DUMP_DETAILS,
|
.dp_type = NL_DUMP_DETAILS,
|
||||||
};
|
};
|
||||||
|
@ -65,6 +66,7 @@ static void __init nl_debug_init(void)
|
||||||
|
|
||||||
nl_debug_dp.dp_fd = stderr;
|
nl_debug_dp.dp_fd = stderr;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int __nl_read_num_str_file(const char *path, int (*cb)(long, const char *))
|
int __nl_read_num_str_file(const char *path, int (*cb)(long, const char *))
|
||||||
{
|
{
|
||||||
|
|
Reference in New Issue