diff options
author | Simon Kelley <simon@thekelleys.org.uk> | 2022-09-15 22:29:44 +0100 |
---|---|---|
committer | Simon Kelley <simon@thekelleys.org.uk> | 2022-09-15 22:29:44 +0100 |
commit | 271790685adfb5917c9e410cb6b3d86052618af7 (patch) | |
tree | 3e29110ad8fb85d80a39998b1e3c3eb028410019 | |
parent | 7a74037267c481d6dddda8b6aa214763ec2c3475 (diff) | |
download | dnsmasq-271790685adfb5917c9e410cb6b3d86052618af7.tar.gz |
Count NXDOMAIN replies from each server.
-rw-r--r-- | src/cache.c | 11 | ||||
-rw-r--r-- | src/dbus.c | 1 | ||||
-rw-r--r-- | src/dnsmasq.h | 2 | ||||
-rw-r--r-- | src/forward.c | 3 |
4 files changed, 12 insertions, 5 deletions
diff --git a/src/cache.c b/src/cache.c index dde4580..689451c 100644 --- a/src/cache.c +++ b/src/cache.c @@ -1664,18 +1664,19 @@ int cache_make_stat(struct txt_record *t) { char *new, *lenp; int port, newlen, bytes_avail, bytes_needed; - unsigned int queries = 0, failed_queries = 0; + unsigned int queries = 0, failed_queries = 0, nxdomain_replies = 0; for (serv1 = serv; serv1; serv1 = serv1->next) if (!(serv1->flags & SERV_MARK) && sockaddr_isequal(&serv->addr, &serv1->addr)) { serv1->flags |= SERV_MARK; queries += serv1->queries; failed_queries += serv1->failed_queries; + nxdomain_replies += serv1->nxdomain_replies; } port = prettyprint_addr(&serv->addr, daemon->addrbuff); lenp = p++; /* length */ bytes_avail = bufflen - (p - buff ); - bytes_needed = snprintf(p, bytes_avail, "%s#%d %u %u", daemon->addrbuff, port, queries, failed_queries); + bytes_needed = snprintf(p, bytes_avail, "%s#%d %u %u %u", daemon->addrbuff, port, queries, failed_queries, nxdomain_replies); if (bytes_needed >= bytes_avail) { /* expand buffer if necessary */ @@ -1745,16 +1746,18 @@ void dump_cache(time_t now) if (!(serv->flags & SERV_MARK)) { int port; - unsigned int queries = 0, failed_queries = 0; + unsigned int queries = 0, failed_queries = 0, nxdomain_replies = 0; for (serv1 = serv; serv1; serv1 = serv1->next) if (!(serv1->flags & SERV_MARK) && sockaddr_isequal(&serv->addr, &serv1->addr)) { serv1->flags |= SERV_MARK; queries += serv1->queries; failed_queries += serv1->failed_queries; + nxdomain_replies += serv1->nxdomain_replies; } port = prettyprint_addr(&serv->addr, daemon->addrbuff); - my_syslog(LOG_INFO, _("server %s#%d: queries sent %u, retried or failed %u"), daemon->addrbuff, port, queries, failed_queries); + my_syslog(LOG_INFO, _("server %s#%d: queries sent %u, retried or failed %u, nxdomain replies %u"), + daemon->addrbuff, port, queries, failed_queries, nxdomain_replies); } if (option_bool(OPT_DEBUG) || option_bool(OPT_LOG)) @@ -685,6 +685,7 @@ static DBusMessage *dbus_get_server_metrics(DBusMessage* message) add_dict_int(&dict_array, "port", port); add_dict_int(&dict_array, "queries", serv->queries); add_dict_int(&dict_array, "failed_queries", serv->failed_queries); + add_dict_int(&dict_array, "nxdomain", serv->nxdomain_replies); if (strlen(serv->domain) != 0) add_dict_entry(&dict_array, "domain", serv->domain); diff --git a/src/dnsmasq.h b/src/dnsmasq.h index d86df10..ef412b5 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -586,7 +586,7 @@ struct server { struct serverfd *sfd; int tcpfd, edns_pktsz; time_t pktsz_reduced; - unsigned int queries, failed_queries; + unsigned int queries, failed_queries, nxdomain_replies; time_t forwardtime; int forwardcount; #ifdef HAVE_LOOP diff --git a/src/forward.c b/src/forward.c index 49a0bbc..2134528 100644 --- a/src/forward.c +++ b/src/forward.c @@ -865,6 +865,9 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server n = add_pseudoheader(header, n, limit, daemon->edns_pktsz, EDNS0_OPTION_EDE, (unsigned char *)&swap, 2, do_bit, 1); } + if (RCODE(header) == NXDOMAIN) + server->nxdomain_replies++; + return n; } |