summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Kelley <simon@thekelleys.org.uk>2022-09-15 22:29:44 +0100
committerSimon Kelley <simon@thekelleys.org.uk>2022-09-15 22:29:44 +0100
commit271790685adfb5917c9e410cb6b3d86052618af7 (patch)
tree3e29110ad8fb85d80a39998b1e3c3eb028410019
parent7a74037267c481d6dddda8b6aa214763ec2c3475 (diff)
downloaddnsmasq-271790685adfb5917c9e410cb6b3d86052618af7.tar.gz
Count NXDOMAIN replies from each server.
-rw-r--r--src/cache.c11
-rw-r--r--src/dbus.c1
-rw-r--r--src/dnsmasq.h2
-rw-r--r--src/forward.c3
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))
diff --git a/src/dbus.c b/src/dbus.c
index e0089fc..43cae30 100644
--- a/src/dbus.c
+++ b/src/dbus.c
@@ -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;
}