return 1;
}
-static int handle_log_groups(lua_State *L, void (*action)(log_groups_t grp))
+static int handle_log_groups(lua_State *L, void (*action)(enum kr_log_group grp))
{
if (lua_gettop(L) != 1 || (!lua_isstring(L, 1) && !lua_istable(L, 1)))
lua_error_p(L, "takes string or table of strings");
if (lua_isstring(L, 1)) {
- log_groups_t grp = kr_log_name2grp(lua_tostring(L, 1));
+ enum kr_log_group grp = kr_log_name2grp(lua_tostring(L, 1));
if (grp == 0)
lua_error_p(L, "unknown group \"%s\"", lua_tostring(L, -1));
action(grp);
if (lua_istable(L, 1)) {
int idx = 1;
- log_groups_t grp;
lua_pushnil(L);
while (lua_next(L, 1) != 0) {
if (!lua_isstring(L, -1))
lua_error_p(L, "wrong value at index %d, must be string", idx);
- grp = kr_log_name2grp(lua_tostring(L, -1));
+ enum kr_log_group grp = kr_log_name2grp(lua_tostring(L, -1));
if (grp == 0)
lua_error_p(L, "unknown group \"%s\"", lua_tostring(L, -1));
static int l_get_log_groups(lua_State *L)
{
- char* name;
-
lua_newtable(L);
for (int grp = LOG_GRP_SYSTEM; grp <= LOG_GRP_DEVEL; grp++) {
- name = kr_log_grp2name(grp);
+ const char *name = kr_log_grp2name(grp);
if (kr_fails_assert(name))
continue;
if (kr_log_group_is_set(grp)) {
void (*error)(struct kr_query *, const struct kr_transport *, enum kr_selection_error);
struct local_state *local_state;
};
-typedef unsigned long log_groups_t;
typedef int log_level_t;
-enum kr_log_groups_type {LOG_GRP_SYSTEM = 1, LOG_GRP_CACHE, LOG_GRP_IO, LOG_GRP_NETWORK, LOG_GRP_TA, LOG_GRP_TLS, LOG_GRP_GNUTLS, LOG_GRP_TLSCLIENT, LOG_GRP_XDP, LOG_GRP_ZIMPORT, LOG_GRP_ZSCANNER, LOG_GRP_DOH, LOG_GRP_DNSSEC, LOG_GRP_HINT, LOG_GRP_PLAN, LOG_GRP_ITERATOR, LOG_GRP_VALIDATOR, LOG_GRP_RESOLVER, LOG_GRP_SELECTION, LOG_GRP_ZCUT, LOG_GRP_COOKIES, LOG_GRP_STATISTICS, LOG_GRP_REBIND, LOG_GRP_WORKER, LOG_GRP_POLICY, LOG_GRP_TASENTINEL, LOG_GRP_TASIGNALING, LOG_GRP_TAUPDATE, LOG_GRP_DAF, LOG_GRP_DETECTTIMEJUMP, LOG_GRP_DETECTTIMESKEW, LOG_GRP_GRAPHITE, LOG_GRP_PREFILL, LOG_GRP_PRIMING, LOG_GRP_SRVSTALE, LOG_GRP_WATCHDOG, LOG_GRP_NSID, LOG_GRP_DNSTAP, LOG_GRP_TESTS, LOG_GRP_DOTAUTH, LOG_GRP_HTTP, LOG_GRP_DEVEL};
+enum kr_log_group {LOG_GRP_SYSTEM = 1, LOG_GRP_CACHE, LOG_GRP_IO, LOG_GRP_NETWORK, LOG_GRP_TA, LOG_GRP_TLS, LOG_GRP_GNUTLS, LOG_GRP_TLSCLIENT, LOG_GRP_XDP, LOG_GRP_ZIMPORT, LOG_GRP_ZSCANNER, LOG_GRP_DOH, LOG_GRP_DNSSEC, LOG_GRP_HINT, LOG_GRP_PLAN, LOG_GRP_ITERATOR, LOG_GRP_VALIDATOR, LOG_GRP_RESOLVER, LOG_GRP_SELECTION, LOG_GRP_ZCUT, LOG_GRP_COOKIES, LOG_GRP_STATISTICS, LOG_GRP_REBIND, LOG_GRP_WORKER, LOG_GRP_POLICY, LOG_GRP_TASENTINEL, LOG_GRP_TASIGNALING, LOG_GRP_TAUPDATE, LOG_GRP_DAF, LOG_GRP_DETECTTIMEJUMP, LOG_GRP_DETECTTIMESKEW, LOG_GRP_GRAPHITE, LOG_GRP_PREFILL, LOG_GRP_PRIMING, LOG_GRP_SRVSTALE, LOG_GRP_WATCHDOG, LOG_GRP_NSID, LOG_GRP_DNSTAP, LOG_GRP_TESTS, LOG_GRP_DOTAUTH, LOG_GRP_HTTP, LOG_GRP_DEVEL};
kr_layer_t kr_layer_t_static;
_Bool kr_dbg_assertion_abort;
struct kr_query *kr_rplan_resolved(struct kr_rplan *);
struct kr_query *kr_rplan_last(struct kr_rplan *);
int kr_forward_add_target(struct kr_request *, const struct sockaddr *);
-void kr_log_req1(const struct kr_request * const, uint32_t, const unsigned int, log_groups_t, const char *, const char *, ...);
-void kr_log_q1(const struct kr_query * const, log_groups_t, const char *, const char *, ...);
-char *kr_log_grp2name(log_groups_t);
-void kr_log_fmt(log_groups_t, log_level_t, const char *, const char *, const char *, const char *, ...);
+void kr_log_req1(const struct kr_request * const, uint32_t, const unsigned int, enum kr_log_group, const char *, const char *, ...);
+void kr_log_q1(const struct kr_query * const, enum kr_log_group, const char *, const char *, ...);
+const char *kr_log_grp2name(enum kr_log_group);
+void kr_log_fmt(enum kr_log_group, log_level_t, const char *, const char *, const char *, const char *, ...);
int kr_make_query(struct kr_query *, knot_pkt_t *);
void kr_pkt_make_auth_header(knot_pkt_t *);
int kr_pkt_put(knot_pkt_t *, const knot_dname_t *, uint32_t, uint16_t, uint16_t, const uint8_t *, uint16_t);
struct kr_prop
struct kr_module
struct kr_server_selection
- log_groups_t
log_level_t
- enum kr_log_groups_type
+ enum kr_log_group
EOF
# static variables; these lines might not be simple to generate
log_level_t kr_log_level = LOG_CRIT;
log_target_t kr_log_target = LOG_TARGET_STDOUT;
-log_groups_t kr_log_groups = 0;
+
+/** Set of log-groups that are on debug level. It's a bitmap over 1 << enum kr_log_group. */
+static uint64_t kr_log_groups = 0;
+
+static_assert(LOG_GRP_DEVEL <= 8 * sizeof(kr_log_groups), "Too many log groups.");
#define GRP_NAME_ITEM(grp) { grp ## _TAG, grp }
};
#endif
-log_groups_t kr_log_group_is_set(log_groups_t group)
+bool kr_log_group_is_set(enum kr_log_group group)
{
return kr_log_groups & (1ULL << group);
}
-void kr_log_fmt(log_groups_t group, log_level_t level, const char *file,
+void kr_log_fmt(enum kr_log_group group, log_level_t level, const char *file,
const char *line, const char *func, const char *fmt, ...)
{
va_list args;
return -1;
}
-char *kr_log_grp2name(log_groups_t group)
+const char *kr_log_grp2name(enum kr_log_group group)
{
for (int i = 0; log_group_names[i].g_val != -1; ++i)
{
return NULL;
}
-log_groups_t kr_log_name2grp(const char *name)
+enum kr_log_group kr_log_name2grp(const char *name)
{
if (kr_fails_assert(name))
return 0;
return kr_log_level;
}
-void kr_log_add_group(log_groups_t group)
+void kr_log_add_group(enum kr_log_group group)
{
kr_log_groups |= (1ULL << group);
if (group == LOG_GRP_GNUTLS)
kr_gnutls_log_level_set();
}
-void kr_log_del_group(log_groups_t group)
+void kr_log_del_group(enum kr_log_group group)
{
kr_log_groups &= (~(1ULL << group));
if (group == LOG_GRP_GNUTLS)
*/
static void kr_vlog_req(
const struct kr_request * const req, uint32_t qry_uid,
- const unsigned int indent, log_groups_t group, const char *tag, const char *fmt,
+ const unsigned int indent, enum kr_log_group group, const char *tag, const char *fmt,
va_list args)
{
struct mempool *mp = mp_new(512);
}
void kr_log_req1(const struct kr_request * const req, uint32_t qry_uid,
- const unsigned int indent, log_groups_t group, const char *tag, const char *fmt, ...)
+ const unsigned int indent, enum kr_log_group group, const char *tag, const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
}
void kr_log_q1(const struct kr_query * const qry,
- log_groups_t group, const char *tag, const char *fmt, ...)
+ enum kr_log_group group, const char *tag, const char *fmt, ...)
{
unsigned ind = 0;
for (const struct kr_query *q = qry; q; q = q->parent)
/* Groups */
-typedef uint64_t log_groups_t;
-typedef struct {
- char *g_name;
- log_groups_t g_val;
-} log_group_names_t;
-
/* Don't forget add *_TAG below, log_group_names[] item (log.c) and generate
* new kres-gen.lua */
-enum kr_log_groups_type {
+enum kr_log_group {
LOG_GRP_SYSTEM = 1, /* Must be first in enum. */
LOG_GRP_CACHE,
LOG_GRP_IO,
LOG_GRP_DEVEL, /* Must be last entry in enum! */
};
+typedef struct {
+ const char *g_name;
+ enum kr_log_group g_val;
+} log_group_names_t;
#define LOG_GRP_SYSTEM_TAG "system"
#define LOG_GRP_CACHE_TAG "cache"
#define LOG_GRP_DEVEL_TAG "devel"
KR_EXPORT
-extern log_groups_t kr_log_groups;
-KR_EXPORT
-log_groups_t kr_log_group_is_set(log_groups_t group);
+bool kr_log_group_is_set(enum kr_log_group group);
KR_EXPORT
-void kr_log_add_group(log_groups_t group);
+void kr_log_add_group(enum kr_log_group group);
KR_EXPORT
-void kr_log_del_group(log_groups_t group);
+void kr_log_del_group(enum kr_log_group group);
KR_EXPORT
-char *kr_log_grp2name(log_groups_t group);
+const char *kr_log_grp2name(enum kr_log_group group);
KR_EXPORT
-log_groups_t kr_log_name2grp(const char *name);
+enum kr_log_group kr_log_name2grp(const char *name);
/* Log */
KR_EXPORT
extern log_target_t kr_log_target;
KR_EXPORT KR_PRINTF(6)
-void kr_log_fmt(log_groups_t group, log_level_t level, const char *file, const char *line,
+void kr_log_fmt(enum kr_log_group group, log_level_t level, const char *file, const char *line,
const char *func, const char *fmt, ...);
KR_EXPORT
int kr_log_level_set(log_level_t level);
kr_log_req1(req, qry_id, indent, LOG_GRP_ ## grp, LOG_GRP_ ## grp ## _TAG, fmt, ## __VA_ARGS__)
KR_EXPORT KR_PRINTF(6)
void kr_log_req1(const struct kr_request * const req, uint32_t qry_uid,
- const unsigned int indent, log_groups_t group, const char *tag, const char *fmt, ...);
+ const unsigned int indent, enum kr_log_group group, const char *tag, const char *fmt, ...);
/**
* Log a message through the request log handler or stdout.
*/
#define kr_log_q(qry, grp, fmt, ...) kr_log_q1(qry, LOG_GRP_ ## grp, LOG_GRP_ ## grp ## _TAG, fmt, ## __VA_ARGS__)
KR_EXPORT KR_PRINTF(4)
-void kr_log_q1(const struct kr_query *qry, log_groups_t group, const char *tag, const char *fmt, ...);
+void kr_log_q1(const struct kr_query *qry, enum kr_log_group group, const char *tag, const char *fmt, ...);
/** Block run in --verbose mode; optimized when not run. */
#define VERBOSE_STATUS __builtin_expect(KR_LOG_LEVEL_IS(LOG_DEBUG), false) // TODO vyhodit