From: Mirko Buffoni Date: Wed, 27 May 2009 11:26:00 +0000 (+0200) Subject: dns plugin: Implement the `SelectNumericQueryTypes' option. X-Git-Tag: collectd-4.8.0~107 X-Git-Url: https://git.octo.it/?p=collectd.git;a=commitdiff_plain;h=442f435a3d57762d7db6ed23307e3e32478e68be dns plugin: Implement the `SelectNumericQueryTypes' option. I've added this patch to my collectd because I have my data dir overpopulated by unknown query types (those not found in nameserv.h which are converted to their #xxxx numeric form). When enabled in configuration file, this option just prevent registering these qtypes to the list. I don't see any issues, so I decided to contribute this patch to the list. This has being tested against 4.6.2, but shouldn't have problems with 4.7.0 Your comments are welcome. Mirko Signed-off-by: Florian Forster --- diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod index ec5010fc..a279d0b0 100644 --- a/src/collectd.conf.pod +++ b/src/collectd.conf.pod @@ -921,6 +921,10 @@ may not work on certain platforms, such as MacEOSEX. Ignore packets that originate from this address. +=item B B|B + +Enabled by default, collects unknown (and thus presented as numeric only) query types. + =back =head2 Plugin C diff --git a/src/dns.c b/src/dns.c index 8339377b..bf341a7a 100644 --- a/src/dns.c +++ b/src/dns.c @@ -49,9 +49,10 @@ static const char *config_keys[] = { "Interface", "IgnoreSource", - NULL + "SelectNumericQueryTypes" }; -static int config_keys_num = 2; +static int config_keys_num = STATIC_ARRAY_SIZE (config_keys); +static int select_numeric_qtype = 1; #define PCAP_SNAPLEN 1460 static char *pcap_device = NULL; @@ -158,6 +159,13 @@ static int dns_config (const char *key, const char *value) if (value != NULL) ignore_list_add_name (value); } + else if (strcasecmp (key, "SelectNumericQueryTypes") == 0) + { + if ((value != NULL) && IS_FALSE (value)) + select_numeric_qtype = 0; + else + select_numeric_qtype = 1; + } else { return (-1); @@ -171,13 +179,24 @@ static void dns_child_callback (const rfc1035_header_t *dns) if (dns->qr == 0) { /* This is a query */ + int skip = 0; + if (!select_numeric_qtype) + { + char *str = qtype_str(dns->qtype); + if ((str == NULL) || (str[0] == '#')) + skip = 1; + } + pthread_mutex_lock (&traffic_mutex); tr_queries += dns->length; pthread_mutex_unlock (&traffic_mutex); - pthread_mutex_lock (&qtype_mutex); - counter_list_add (&qtype_list, dns->qtype, 1); - pthread_mutex_unlock (&qtype_mutex); + if (skip == 0) + { + pthread_mutex_lock (&qtype_mutex); + counter_list_add (&qtype_list, dns->qtype, 1); + pthread_mutex_unlock (&qtype_mutex); + } } else {