typedef struct DNSConfig_ {
uint32_t request_flood;
+ uint32_t state_memcap; /**< memcap in bytes per state */
+ uint64_t global_memcap; /**< memcap in bytes globally for parser */
} DNSConfig;
static DNSConfig dns_config;
dns_config.request_flood = value;
}
+void DNSConfigSetStateMemcap(uint32_t value) {
+ dns_config.state_memcap = value;
+}
+
+void DNSConfigSetGlobalMemcap(uint64_t value) {
+ dns_config.global_memcap = value;
+}
+
SCEnumCharMap dns_decoder_event_table[ ] = {
{ "UNSOLLICITED_RESPONSE", DNS_DECODER_EVENT_UNSOLLICITED_RESPONSE, },
{ "MALFORMED_DATA", DNS_DECODER_EVENT_MALFORMED_DATA, },
} DNSState;
#define DNS_CONFIG_DEFAULT_REQUEST_FLOOD 500
+#define DNS_CONFIG_DEFAULT_STATE_MEMCAP 512*1024
+#define DNS_CONFIG_DEFAULT_GLOBAL_MEMCAP 16*1024*1024
void DNSConfigInit(void);
void DNSConfigSetRequestFlood(uint32_t value);
+void DNSConfigSetStateMemcap(uint32_t value);
+void DNSConfigSetGlobalMemcap(uint64_t value);
void RegisterDNSParsers(void);
void DNSParserTests(void);
static void DNSUDPConfigure(void) {
uint32_t request_flood = DNS_CONFIG_DEFAULT_REQUEST_FLOOD;
+ uint32_t state_memcap = DNS_CONFIG_DEFAULT_STATE_MEMCAP;
+ uint64_t global_memcap = DNS_CONFIG_DEFAULT_GLOBAL_MEMCAP;
ConfNode *p = ConfGetNode("app-layer.protocols.dns.request-flood");
if (p != NULL) {
}
SCLogInfo("DNS request flood protection level: %u", request_flood);
DNSConfigSetRequestFlood(request_flood);
+
+ p = ConfGetNode("app-layer.protocols.dns.state-memcap");
+ if (p != NULL) {
+ uint32_t value;
+ if (ParseSizeStringU32(p->val, &value) < 0) {
+ SCLogError(SC_ERR_DNS_CONFIG, "invalid value for state-memcap %s", p->val);
+ } else {
+ state_memcap = value;
+ }
+ }
+ SCLogInfo("DNS per flow memcap (state-memcap): %u", state_memcap);
+ DNSConfigSetStateMemcap(state_memcap);
+
+ p = ConfGetNode("app-layer.protocols.dns.global-memcap");
+ if (p != NULL) {
+ uint64_t value;
+ if (ParseSizeStringU64(p->val, &value) < 0) {
+ SCLogError(SC_ERR_DNS_CONFIG, "invalid value for global-memcap %s", p->val);
+ } else {
+ global_memcap = value;
+ }
+ }
+ SCLogInfo("DNS global memcap: %"PRIu64, global_memcap);
+ DNSConfigSetGlobalMemcap(global_memcap);
}
void RegisterDNSUDPParsers(void) {