void (*error)(struct kr_query *, const struct kr_transport *, enum kr_selection_error);
struct local_state *local_state;
};
+typedef unsigned int log_groups_t;
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_req(const struct kr_request * const, uint32_t, const unsigned int, const char *, const char *, ...);
-void kr_log_q(const struct kr_query * const, const char *, const char *, ...);
+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 *, ...);
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
EOF
# static variables; these lines might not be simple to generate
# Forwarding
kr_forward_add_target
# Utils
- kr_log_req
- kr_log_q
+ kr_log_req1
+ kr_log_q1
kr_make_query
kr_pkt_make_auth_header
kr_pkt_put
#define MAX_PIPELINED 100
#endif
-#define VERBOSE_MSG(qry, ...) QRVERBOSE(qry, "wrkr", __VA_ARGS__)
+#define VERBOSE_MSG(qry, ...) QRVERBOSE(qry, LOG_GRP_WORKER, __VA_ARGS__)
/** Client request state. */
struct request_ctx
#include "lib/generic/map.h"
#include "lib/generic/array.h"
-#define VERBOSE_MSG(qry, ...) QRVERBOSE(qry, "zimport", __VA_ARGS__)
+#define VERBOSE_MSG(qry, ...) QRVERBOSE(qry, LOG_GRP_ZIMPORT, __VA_ARGS__)
/* Pause between parse and import stages, milliseconds.
* See comment in zi_zone_import() */
-#define VERBOSE_MSG(qry, ...) QRVERBOSE((qry), "cach", ## __VA_ARGS__)
+#define VERBOSE_MSG(qry, ...) QRVERBOSE((qry), LOG_GRP_CACHE, ## __VA_ARGS__)
/** Shorthand for operations on cache backend */
#define cache_op(cache, op, ...) (cache)->api->op((cache)->db, &(cache)->stats, ## __VA_ARGS__)
auto_free char
*name_str = kr_dname_text(covered->owner),
*type_str = kr_rrtype_text(covered->type);
- QRVERBOSE(NULL, "vldr",
+ QRVERBOSE(NULL, LOG_GRP_VALIDATOR,
"trimming TTL of %s %s: %d -> %d\n",
name_str, type_str,
(int)covered->ttl, (int)ttl_max);
* \param _cls identifying string, typically of length exactly four (padded)
* \param ... printf-compatible list of parameters
*/
-#define QRVERBOSE(_query, _cls, ...) do { \
+#define QRVERBOSE(_query, grp, ...) do { \
const struct kr_query *_qry = (_query); \
if (VERBOSE_STATUS || kr_log_qtrace_enabled(_qry)) { \
- kr_log_q(_qry, (_cls), __VA_ARGS__); \
+ kr_log_q1(_query, grp, grp ## _TAG, __VA_ARGS__); \
} \
} while (false)
#include "lib/module.h"
#include "lib/dnssec/ta.h"
-#define VERBOSE_MSG(...) QRVERBOSE(req->current_query, "iter", __VA_ARGS__)
-#define QVERBOSE_MSG(qry, ...) QRVERBOSE(qry, "iter", __VA_ARGS__)
+#define VERBOSE_MSG(...) QRVERBOSE(req->current_query, LOG_GRP_ITERATOR, __VA_ARGS__)
+#define QVERBOSE_MSG(qry, ...) QRVERBOSE(qry, LOG_GRP_ITERATOR, __VA_ARGS__)
/* Iterator often walks through packet section, this is an abstraction. */
typedef int (*rr_callback_t)(const knot_rrset_t *, unsigned, struct kr_request *);
#include "lib/module.h"
#include "lib/selection.h"
-#define VERBOSE_MSG(qry, ...) QRVERBOSE(qry, "vldr", __VA_ARGS__)
+#define VERBOSE_MSG(qry, ...) QRVERBOSE(qry, LOG_GRP_VALIDATOR, __VA_ARGS__)
#define MAX_REVALIDATION_CNT 2
return signame;
} else {
/* otherwise it's some nonsense, so we skip it */
- kr_log_q(qry, "vldr", "protocol violation: "
+ kr_log_q(qry, LOG_GRP_VALIDATOR, "protocol violation: "
"out-of-bailwick RRSIG signer, skipping\n");
}
}
#include <stdio.h>
#include <gnutls/gnutls.h>
+#include "contrib/ucw/mempool.h"
#include "lib/log.h"
+#include "lib/resolve.h"
#if ENABLE_LIBSYSTEMD
#include <stdlib.h>
log_target_t kr_log_target = LOG_TARGET_STDOUT;
log_groups_t kr_log_groups = 0;
+#define GRP_NAME_ITEM(grp) { grp ## _TAG, grp }
+
log_group_names_t log_group_names[] = {
- { "system", LOG_GRP_SYSTEM },
- { "cache", LOG_GRP_CACHE },
- { "io", LOG_GRP_IO },
- { "network", LOG_GRP_NETWORK },
- { "ta", LOG_GRP_TA },
- { "tls", LOG_GRP_TLS },
- { "gnutls", LOG_GRP_GNUTLS },
- { "tlsclient", LOG_GRP_TLSCLIENT },
- { "xdp", LOG_GRP_XDP },
- { "zimport", LOG_GRP_ZIMPORT },
- { "zscanner", LOG_GRP_ZSCANNER },
- { "doh", LOG_GRP_DOH },
- { "dnssec", LOG_GRP_DNSSEC },
- { "hint", LOG_GRP_HINT },
+ GRP_NAME_ITEM(LOG_GRP_SYSTEM),
+ GRP_NAME_ITEM(LOG_GRP_CACHE),
+ GRP_NAME_ITEM(LOG_GRP_IO),
+ GRP_NAME_ITEM(LOG_GRP_NETWORK),
+ GRP_NAME_ITEM(LOG_GRP_TA),
+ GRP_NAME_ITEM(LOG_GRP_TLS),
+ GRP_NAME_ITEM(LOG_GRP_GNUTLS),
+ GRP_NAME_ITEM(LOG_GRP_TLSCLIENT),
+ GRP_NAME_ITEM(LOG_GRP_XDP),
+ GRP_NAME_ITEM(LOG_GRP_ZIMPORT),
+ GRP_NAME_ITEM(LOG_GRP_ZSCANNER),
+ GRP_NAME_ITEM(LOG_GRP_DOH),
+ GRP_NAME_ITEM(LOG_GRP_DNSSEC),
+ GRP_NAME_ITEM(LOG_GRP_HINT),
{ NULL, -1 },
};
kr_log_level_set(level);
}
+
+/*
+ * Cleanup callbacks.
+ */
+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,
+ va_list args)
+{
+ if (!(KR_LOG_LEVEL_IS(LOG_DEBUG) || group_is_set(group)))
+ return; // skip alloc and string copy
+
+ struct mempool *mp = mp_new(512);
+
+ const uint32_t req_uid = req ? req->uid : 0;
+ char *msg = mp_printf(mp, "[%05u.%02u] %*s",
+ req_uid, qry_uid, indent, "");
+
+ msg = mp_vprintf_append(mp, msg, fmt, args);
+
+ if (kr_log_rtrace_enabled(req))
+ req->trace_log(req, msg);
+ else
+ kr_log_fmt(group, LOG_DEBUG, SD_JOURNAL_METADATA, "[%s]%s", tag, msg);
+
+ mp_delete(mp);
+}
+
+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, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ kr_vlog_req(req, qry_uid, indent, group, tag, fmt, args);
+ va_end(args);
+}
+
+void kr_log_q1(const struct kr_query * const qry,
+ log_groups_t group, const char *tag, const char *fmt, ...)
+{
+ unsigned ind = 0;
+ for (const struct kr_query *q = qry; q; q = q->parent)
+ ind += 2;
+ const uint32_t qry_uid = qry ? qry->uid : 0;
+ const struct kr_request *req = qry ? qry->request : NULL;
+
+ va_list args;
+ va_start(args, fmt);
+ kr_vlog_req(req, qry_uid, ind, group, tag, fmt, args);
+ va_end(args);
+}
+
log_groups_t g_val;
} log_group_names_t;
-/* Don't forget add name to log_group_names[] (log.c) */
+/* Don't forget add *_TAG below and log_group_names[] item (log.c) */
#define LOG_GRP_SYSTEM (1 << 1)
#define LOG_GRP_CACHE (1 << 2)
#define LOG_GRP_IO (1 << 3)
#define LOG_GRP_DOH (1 << 12)
#define LOG_GRP_DNSSEC (1 << 13)
#define LOG_GRP_HINT (1 << 14)
+#define LOG_GRP_PLAN (1 << 15)
+#define LOG_GRP_ITERATOR (1 << 16)
+#define LOG_GRP_VALIDATOR (1 << 17)
+#define LOG_GRP_RESOLVER (1 << 18)
+#define LOG_GRP_SELECTION (1 << 19)
+#define LOG_GRP_ZCUT (1 << 20)
+#define LOG_GRP_COOKIES (1 << 21)
+#define LOG_GRP_STATISTICS (1 << 22)
+#define LOG_GRP_REBIND (1 << 23)
+#define LOG_GRP_WORKER (1 << 24)
+#define LOG_GRP_POLICY (1 << 25)
+
+#define LOG_GRP_SYSTEM_TAG "system"
+#define LOG_GRP_CACHE_TAG "cache "
+#define LOG_GRP_IO_TAG "io "
+#define LOG_GRP_NETWORK_TAG "net "
+#define LOG_GRP_TA_TAG "ta "
+#define LOG_GRP_TLS_TAG "tls "
+#define LOG_GRP_GNUTLS_TAG "gnutls"
+#define LOG_GRP_TLSCLIENT_TAG "tls_cl"
+#define LOG_GRP_XDP_TAG "xdp "
+#define LOG_GRP_ZIMPORT_TAG "zimprt"
+#define LOG_GRP_ZSCANNER_TAG "zscann"
+#define LOG_GRP_DOH_TAG "doh "
+#define LOG_GRP_DNSSEC_TAG "dnssec"
+#define LOG_GRP_HINT_TAG "hint "
+#define LOG_GRP_PLAN_TAG "plan "
+#define LOG_GRP_ITERATOR_TAG "iterat"
+#define LOG_GRP_VALIDATOR_TAG "valdtr"
+#define LOG_GRP_RESOLVER_TAG "resolv"
+#define LOG_GRP_SELECTION_TAG "select"
+#define LOG_GRP_ZCUT_TAG "zoncut"
+#define LOG_GRP_COOKIES_TAG "cookie"
+#define LOG_GRP_STATISTICS_TAG "statis"
+#define LOG_GRP_REBIND_TAG "rebind"
+#define LOG_GRP_WORKER_TAG "worker"
+#define LOG_GRP_POLICY_TAG "policy"
+
KR_EXPORT
extern log_groups_t kr_log_groups;
#define SD_JOURNAL_METADATA "CODE_FILE=" __FILE__, "CODE_LINE=" TO_STR(__LINE__), ""
#define kr_log_debug(grp, fmt, ...) \
- kr_log_fmt(grp, LOG_DEBUG, SD_JOURNAL_METADATA, fmt, ## __VA_ARGS__)
+ kr_log_fmt(grp, LOG_DEBUG, SD_JOURNAL_METADATA, "[" grp ## _TAG "] " fmt, ## __VA_ARGS__)
#define kr_log_info(grp, fmt, ...) \
- kr_log_fmt(grp, LOG_INFO, SD_JOURNAL_METADATA, fmt, ## __VA_ARGS__)
+ kr_log_fmt(grp, LOG_INFO, SD_JOURNAL_METADATA, "[" grp ## _TAG "] " fmt, ## __VA_ARGS__)
#define kr_log_notice(grp, fmt, ...) \
- kr_log_fmt(grp, LOG_NOTICE, SD_JOURNAL_METADATA, fmt, ## __VA_ARGS__)
+ kr_log_fmt(grp, LOG_NOTICE, SD_JOURNAL_METADATA, "[" grp ## _TAG "] " fmt, ## __VA_ARGS__)
#define kr_log_warning(grp, fmt, ...) \
- kr_log_fmt(grp, LOG_WARNING, SD_JOURNAL_METADATA, fmt, ## __VA_ARGS__)
+ kr_log_fmt(grp, LOG_WARNING, SD_JOURNAL_METADATA, "[" grp ## _TAG "] " fmt, ## __VA_ARGS__)
#define kr_log_error(grp, fmt, ...) \
- kr_log_fmt(grp, LOG_ERR, SD_JOURNAL_METADATA, fmt, ## __VA_ARGS__)
+ kr_log_fmt(grp, LOG_ERR, SD_JOURNAL_METADATA, "[" grp ## _TAG "] " fmt, ## __VA_ARGS__)
#define kr_log_fatal(grp, fmt, ...) \
- kr_log_fmt(grp, LOG_CRIT, SD_JOURNAL_METADATA, fmt, ## __VA_ARGS__)
+ kr_log_fmt(grp, LOG_CRIT, SD_JOURNAL_METADATA, "[" grp ## _TAG "] " fmt, ## __VA_ARGS__)
#define kr_log_deprecate(grp, fmt, ...) \
- kr_log_fmt(grp, LOG_WARNING,SD_JOURNAL_METADATA, "deprecation WARNING: " fmt, ## __VA_ARGS__)
+ kr_log_fmt(grp, LOG_WARNING,SD_JOURNAL_METADATA, "[" grp ## _TAG "] deprecation WARNING: " fmt, ## __VA_ARGS__)
#define KR_LOG_LEVEL_IS(exp) ((kr_log_level >= (exp)) ? true : false)
KR_EXPORT
extern syslog_code_t prioritynames[];
#endif
+
+
+/* Misc. */
+
+struct kr_request;
+struct kr_query;
+
+/**
+ * Log a message through the request log handler or stdout.
+ * Caller is responsible for detecting verbose mode, use QRVERBOSE() macro.
+ * @param qry_uid query ID to append to request ID, 0 means "no query"
+ * @param indent level of indentation between [req.qry][source] and message
+ * @param source message source
+ * @param fmt message format
+ */
+#define kr_log_req(req, qry_id, indent, grp, fmt, ...) \
+ kr_log_req1(req, qry_id, indent, 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, ...);
+
+/**
+ * Log a message through the request log handler or stdout.
+ * Caller is responsible for detecting verbose mode, use QRVERBOSE() macro.
+ * @param qry current query
+ * @param source message source
+ * @param fmt message format
+ */
+#define kr_log_q(qry, grp, fmt, ...) kr_log_q1(qry, 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, ...);
+
+/** Block run in --verbose mode; optimized when not run. */
+#define VERBOSE_STATUS __builtin_expect(KR_LOG_LEVEL_IS(LOG_DEBUG), false) // TODO vyhodit
+#define WITH_VERBOSE(query) if(__builtin_expect(KR_LOG_LEVEL_IS(LOG_DEBUG) || kr_log_qtrace_enabled(query), false))
+#define kr_log_verbose if(VERBOSE_STATUS) printf
#define KNOT_EDNS_OPTION_COOKIE 10
#endif /* ENABLE_COOKIES */
-#define VERBOSE_MSG(qry, ...) QRVERBOSE((qry), "resl", __VA_ARGS__)
+#define VERBOSE_MSG(qry, ...) QRVERBOSE((qry), LOG_GRP_RESOLVER, __VA_ARGS__)
bool kr_rank_check(uint8_t rank)
{
{
/* Note: OPT in SERVFAIL response is still useful for cookies/additional info. */
if (VERBOSE_STATUS || kr_log_rtrace_enabled(request))
- kr_log_req(request, 0, 0, "resl",
+ kr_log_req(request, 0, 0, LOG_GRP_RESOLVER,
"request failed, answering with empty SERVFAIL\n");
knot_pkt_t *answer = request->answer;
knot_rrset_t *opt_rr = answer->opt_rr; /* it gets NULLed below */
if (request->state & KR_STATE_FAIL) {
if (++request->count_fail_row > KR_CONSUME_FAIL_ROW_LIMIT) {
if (VERBOSE_STATUS || kr_log_rtrace_enabled(request)) {
- kr_log_req(request, 0, 2, "resl",
+ kr_log_req(request, 0, 2, LOG_GRP_RESOLVER,
"=> too many failures in a row, "
"bail out (mitigation for NXNSAttack "
"CVE-2020-12667)\n");
#include "lib/defines.h"
#include "lib/layer.h"
-#define VERBOSE_MSG(qry, ...) QRVERBOSE(qry, "plan", __VA_ARGS__)
+#define VERBOSE_MSG(qry, ...) QRVERBOSE(qry, LOG_GRP_PLAN, __VA_ARGS__)
inline static unsigned char chars_or(const unsigned char a, const unsigned char b)
{
#include "lib/utils.h"
-#define VERBOSE_MSG(qry, ...) QRVERBOSE((qry), "slct", __VA_ARGS__)
+#define VERBOSE_MSG(qry, ...) QRVERBOSE((qry), LOG_GRP_SELECTION, __VA_ARGS__)
#define DEFAULT_TIMEOUT 400
#define MAX_TIMEOUT 10000
#include "lib/selection_forward.h"
#include "lib/resolve.h"
-#define VERBOSE_MSG(qry, ...) QRVERBOSE((qry), "slct", __VA_ARGS__)
+#define VERBOSE_MSG(qry, ...) QRVERBOSE((qry), LOG_GRP_SELECTION, __VA_ARGS__)
#define FORWARDING_TIMEOUT 2000
#include "lib/zonecut.h"
#include "lib/resolve.h"
-#define VERBOSE_MSG(qry, ...) QRVERBOSE((qry), "slct", __VA_ARGS__)
+#define VERBOSE_MSG(qry, ...) QRVERBOSE((qry), LOG_GRP_SELECTION, __VA_ARGS__)
/// To be held per query and locally. Allocations are in the kr_request's mempool.
struct iter_local_state {
return 5;
}
-/*
- * Cleanup callbacks.
- */
-static void kr_vlog_req(
- const struct kr_request * const req, uint32_t qry_uid,
- const unsigned int indent, const char *source, const char *fmt,
- va_list args)
-{
- struct mempool *mp = mp_new(512);
-
- const uint32_t req_uid = req ? req->uid : 0;
- char *msg = mp_printf(mp, "[%05u.%02u][%-4s] %*s",
- req_uid, qry_uid, source, indent, "");
-
- msg = mp_vprintf_append(mp, msg, fmt, args);
-
- if (kr_log_rtrace_enabled(req))
- req->trace_log(req, msg);
- else
- /* caller is responsible for detecting verbose mode, use QRVERBOSE() macro */
- printf("%s", msg);
-
- mp_delete(mp);
-}
-
-void kr_log_req(const struct kr_request * const req, uint32_t qry_uid,
- const unsigned int indent, const char *source, const char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- kr_vlog_req(req, qry_uid, indent, source, fmt, args);
- va_end(args);
-}
-
-void kr_log_q(const struct kr_query * const qry,
- const char *source, const char *fmt, ...)
-{
- unsigned ind = 0;
- for (const struct kr_query *q = qry; q; q = q->parent)
- ind += 2;
- const uint32_t qry_uid = qry ? qry->uid : 0;
- const struct kr_request *req = qry ? qry->request : NULL;
-
- va_list args;
- va_start(args, fmt);
- kr_vlog_req(req, qry_uid, ind, source, fmt, args);
- va_end(args);
-}
-
char* kr_strcatdup(unsigned n, ...)
{
if (n < 1) {
if (knot_rdata_cmp(ra->at[i], ra->at[i + 1]) == 0) {
ra->at[i] = NULL;
++dup_count;
- QRVERBOSE(NULL, "iter", "deleted duplicate RR\n");
+ QRVERBOSE(NULL, LOG_GRP_ITERATOR, "deleted duplicate RR\n");
}
}
/* Prepare rdataset, except rdata contents. */
#include "lib/generic/array.h"
#include "lib/log.h"
-struct kr_query;
-struct kr_request;
/*
* Logging and debugging.
(qry) && kr_log_rtrace_enabled(qry->request), \
false))
-/**
- * Log a message through the request log handler or stdout.
- * Caller is responsible for detecting verbose mode, use QRVERBOSE() macro.
- * @param qry_uid query ID to append to request ID, 0 means "no query"
- * @param indent level of indentation between [req.qry][source] and message
- * @param source message source
- * @param fmt message format
- */
-KR_EXPORT KR_PRINTF(5)
-void kr_log_req(const struct kr_request * const req, uint32_t qry_uid,
- const unsigned int indent, const char *source, const char *fmt, ...);
-
-/**
- * Log a message through the request log handler or stdout.
- * Caller is responsible for detecting verbose mode, use QRVERBOSE() macro.
- * @param qry current query
- * @param source message source
- * @param fmt message format
- */
-KR_EXPORT KR_PRINTF(3)
-void kr_log_q(const struct kr_query *qry, const char *source, const char *fmt, ...);
-
-/** Block run in --verbose mode; optimized when not run. */
-#define VERBOSE_STATUS __builtin_expect(KR_LOG_LEVEL_IS(LOG_DEBUG), false)
-#define WITH_VERBOSE(query) if(__builtin_expect(KR_LOG_LEVEL_IS(LOG_DEBUG) || kr_log_qtrace_enabled(query), false))
-#define kr_log_verbose if(VERBOSE_STATUS) printf
-
#define KR_DNAME_GET_STR(dname_str, dname) \
char dname_str[KR_DNAME_STR_MAXLEN]; \
knot_dname_to_str(dname_str, (dname), sizeof(dname_str)); \
#include <libknot/packet/wire.h>
#include <libknot/rrtype/rdname.h>
-#define VERBOSE_MSG(qry, ...) QRVERBOSE(qry, "zcut", __VA_ARGS__)
+#define VERBOSE_MSG(qry, ...) QRVERBOSE(qry, LOG_GRP_ZCUT, __VA_ARGS__)
/** Information for one NS name + address type. */
typedef enum {
#include "lib/rplan.h"
#include "modules/cookies/cookiemonster.h"
-#define VERBOSE_MSG(qry, ...) QRVERBOSE(qry, "cookies", __VA_ARGS__)
+#define VERBOSE_MSG(qry, ...) QRVERBOSE(qry, LOG_GRP_COOKIES, __VA_ARGS__)
/**
* Obtain address from query/response context if if can be obtained.
#include <math.h>
/* Defaults */
-#define VERBOSE_MSG(qry, ...) QRVERBOSE(qry, "hint", __VA_ARGS__)
-#define ERR_MSG(...) kr_log_error(LOG_GRP_HINT, "[ ][hint]" __VA_ARGS__)
+#define VERBOSE_MSG(qry, ...) QRVERBOSE(qry, LOG_GRP_HINT, __VA_ARGS__)
+#define ERR_MSG(...) kr_log_error(LOG_GRP_HINT, "[ ]" __VA_ARGS__)
struct hints_data {
struct kr_zonecut hints;
local debug_logfinish_cb = ffi.cast('trace_callback_f', function (req)
jit.off(true, true) -- JIT for (C -> lua)^2 nesting isn't allowed
- ffi.C.kr_log_req(req, 0, 0, 'dbg',
+ local LOG_GRP_POLICY= bit.lshift(1, 25)
+ local LOG_GRP_POLICY_TAG="policy"
+ ffi.C.kr_log_req1(req, 0, 0, LOG_GRP_POLICY, LOG_GRP_POLICY_TAG,
'following rrsets were marked as interesting:\n' ..
req:selected_tostring())
if req.answer ~= nil then
- ffi.C.kr_log_req(req, 0, 0, 'dbg',
+ ffi.C.kr_log_req1(req, 0, 0, LOG_GRP_POLICY, LOG_GRP_POLICY_TAG,
'answer packet:\n' ..
tostring(req.answer))
else
- ffi.C.kr_log_req(req, 0, 0, 'dbg',
+ ffi.C.kr_log_req1(req, 0, 0, LOG_GRP_POLICY, LOG_GRP_POLICY_TAG,
'answer packet DROPPED\n')
end
end)
-- log request packet
function policy.REQTRACE(_, req)
- ffi.C.kr_log_req(req, 0, 0, 'dbg', 'request packet:\n%s',
+ local LOG_GRP_POLICY= bit.lshift(1, 25)
+ local LOG_GRP_POLICY_TAG="policy"
+ ffi.C.kr_log_req1(req, 0, 0, LOG_GRP_POLICY, LOG_GRP_POLICY_TAG,
+ 'request packet:\n%s',
tostring(req.qsource.packet))
end
state = refuse(req)
end
if verbose() then
- ffi.C.kr_log_q(qry, 'rebinding',
+ local LOG_GRP_REBIND= bit.lshift(1, 23)
+ local LOG_GRP_REBIND_TAG="rebind"
+ ffi.C.kr_log_q1(qry, LOG_GRP_REBIND, LOG_GRP_REBIND_TAG,
'blocking blacklisted IP in RR \'%s\'\n', kres.rr2str(bad_rr))
end
return state
#include "lib/resolve.h"
/* Defaults */
-#define VERBOSE_MSG(qry, ...) QRVERBOSE(qry, "stat", __VA_ARGS__)
+#define VERBOSE_MSG(qry, ...) QRVERBOSE(qry, LOG_GRP_STATISTICS, __VA_ARGS__)
#define FREQUENT_PSAMPLE 10 /* Sampling rate, 1 in N */
#ifdef LRU_REP_SIZE
#define FREQUENT_COUNT LRU_REP_SIZE /* Size of frequent tables */