]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
selection: better error messages for errors
authorŠtěpán Balážik <stepan.balazik@nic.cz>
Thu, 14 Jan 2021 19:09:38 +0000 (20:09 +0100)
committerŠtěpán Balážik <stepan.balazik@nic.cz>
Mon, 25 Jan 2021 14:42:55 +0000 (15:42 +0100)
lib/selection.c

index 486ce68d47fbd9df86c7b691453e41469bc5fef2..239015897b905c0f6b7acb2ef04add2d9368a623 100644 (file)
 #define EPSILON_NOMIN 1
 #define EPSILON_DENOM 20
 
+static const char *kr_selection_error_names[] = {
+       [KR_SELECTION_OK] = "OK",
+       [KR_SELECTION_QUERY_TIMEOUT] = "QUERY_TIMEOUT",
+       [KR_SELECTION_TLS_HANDSHAKE_FAILED] = "TLS_HANDSHAKE_FAILED",
+       [KR_SELECTION_TCP_CONNECT_FAILED] = "TCP_CONNECT_FAILED",
+       [KR_SELECTION_TCP_CONNECT_TIMEOUT] = "TCP_CONNECT_TIMEOUT",
+       [KR_SELECTION_REFUSED] = "REFUSED",
+       [KR_SELECTION_SERVFAIL] = "SERVFAIL",
+       [KR_SELECTION_FORMERROR] = "FORMERROR",
+       [KR_SELECTION_NOTIMPL] = "NOTIMPL",
+       [KR_SELECTION_OTHER_RCODE] = "OTHER_RCODE",
+       [KR_SELECTION_MALFORMED] = "MALFORMED",
+       [KR_SELECTION_MISMATCHED] = "MISMATCHED",
+       [KR_SELECTION_TRUNCATED] = "TRUNCATED",
+       [KR_SELECTION_DNSSEC_ERROR] = "DNSSEC_ERROR",
+       [KR_SELECTION_LAME_DELEGATION] = "LAME_DELEGATION",
+       [KR_SELECTION_BAD_CNAME] = "BAD_CNAME",
+};
+
+static const char *kr_selection_error_str(enum kr_selection_error err) {
+       return err < KR_SELECTION_NUMBER_OF_ERRORS ? kr_selection_error_names[err] : NULL;
+}
+
 /* Simple cache interface follows */
 
 static knot_db_val_t cache_key(const uint8_t *ip, size_t len)
@@ -553,12 +576,13 @@ void error(struct kr_query *qry, struct address_state *addr_state,
        KR_DNAME_GET_STR(ns_name, transport->ns_name);
        KR_DNAME_GET_STR(zonecut_str, qry->zone_cut.name);
        const char *ns_str = kr_straddr(&transport->address.ip);
+       const char *err_str = kr_selection_error_str(sel_error);
 
        VERBOSE_MSG(
                qry,
-               "=> id: '%05u' noting selection error: '%s'@'%s' zone cut: '%s' error no.:%d\n",
+               "=> id: '%05u' noting selection error: '%s'@'%s' zone cut: '%s' error: %d %s\n",
                qry->id, ns_name, ns_str ? ns_str : "", zonecut_str,
-               sel_error);
+               sel_error, err_str ? err_str : "??");
        }
 }