// Send a DNS A query to <domain>.g_nodLookupDomain
static const QType qt(QType::A);
static const uint16_t qc(QClass::IN);
- DNSName qname = dname + g_nodLookupDomain;
+ DNSName qname;
+ try {
+ qname = dname + g_nodLookupDomain;
+ }
+ catch(const std::range_error &e) {
+ ++g_stats.nodLookupsDroppedOversize;
+ return;
+ }
vector<DNSRecord> dummy;
directResolve(qname, qt, qc, dummy);
}
static const oid proxyProtocolInvalidOID[] = { RECURSOR_STATS_OID, 101 };
static const oid recordCacheContendedOID[] = { RECURSOR_STATS_OID, 102 };
static const oid recordCacheAcquiredOID[] = { RECURSOR_STATS_OID, 103 };
+static const oid nodLookupsDroppedOversizeOID[] = { RECURSOR_STATS_OID, 104 };
static std::unordered_map<oid, std::string> s_statsMap;
registerCounter64Stat("proxy-protocol-invalid", proxyProtocolInvalidOID, OID_LENGTH(proxyProtocolInvalidOID));
registerCounter64Stat("record-cache-contended", recordCacheContendedOID, OID_LENGTH(recordCacheContendedOID));
registerCounter64Stat("record-cache-acquired", recordCacheAcquiredOID, OID_LENGTH(recordCacheAcquiredOID));
+ registerCounter64Stat("nod-lookups-dropped-oversize", nodLookupsDroppedOversizeOID, OID_LENGTH(nodLookupsDroppedOversizeOID));
#endif /* HAVE_NET_SNMP */
}
addGetStat("proxy-protocol-invalid", &g_stats.proxyProtocolInvalidCount);
+ addGetStat("nod-lookups-dropped-oversize", &g_stats.nodLookupsDroppedOversize);
+
/* make sure that the ECS stats are properly initialized */
SyncRes::clearECSStats();
for (size_t idx = 0; idx < SyncRes::s_ecsResponsesBySubnetSize4.size(); idx++) {
"Number of record cache lock acquisitions"
::= { stats 103 }
+nodLookupsDroppedOversize OBJECT-TYPE
+ SYNTAX Counter64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Number of NOD lookups dropped because they would exceed the maximum name length"
+ ::= { stats 104 }
+
---
--- Traps / Notifications
---
qnameMinFallbackSuccess,
proxyProtocolInvalid,
recordCacheContended,
- recordCacheAcquired
+ recordCacheAcquired,
+ nodLookupsDroppedOversize
}
STATUS current
DESCRIPTION "Objects conformance group for PowerDNS Recursor"
{"no-packet-error",
MetricDefinition(PrometheusMetricType::counter,
"Number of erroneous received packets")},
+ {"nod-lookups-dropped-oversize",
+ MetricDefinition(PrometheusMetricType::counter,
+ "Number of NOD lookups dropped because they would exceed the maximum name length")},
{"noedns-outqueries",
MetricDefinition(PrometheusMetricType::counter,
"Number of queries sent out without EDNS")},
std::map<DNSFilterEngine::PolicyKind, std::atomic<uint64_t> > policyResults;
std::atomic<uint64_t> rebalancedQueries{0};
std::atomic<uint64_t> proxyProtocolInvalidCount{0};
+ std::atomic<uint64_t> nodLookupsDroppedOversize{0};
};
//! represents a running TCP/IP client session