From d7b03753f10d93d278091d39b95adf3b18a2770c Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 29 Jun 2010 02:24:02 +0200 Subject: core: implement packet rate limiting and enable it by default --- avahi-daemon/avahi-daemon.conf | 2 ++ avahi-daemon/main.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) (limited to 'avahi-daemon') diff --git a/avahi-daemon/avahi-daemon.conf b/avahi-daemon/avahi-daemon.conf index 898cee9..c992842 100644 --- a/avahi-daemon/avahi-daemon.conf +++ b/avahi-daemon/avahi-daemon.conf @@ -35,6 +35,8 @@ use-ipv6=no #clients-max=4096 #objects-per-client-max=1024 #entries-per-entry-group-max=32 +ratelimit-interval-usec=1000000 +ratelimit-burst=1000 [wide-area] enable-wide-area=yes diff --git a/avahi-daemon/main.c b/avahi-daemon/main.c index ca1a854..8bd856e 100644 --- a/avahi-daemon/main.c +++ b/avahi-daemon/main.c @@ -551,6 +551,26 @@ static int parse_unsigned(const char *s, unsigned *u) { return 0; } +static int parse_usec(const char *s, AvahiUsec *u) { + char *e = NULL; + unsigned long long ull; + AvahiUsec k; + + errno = 0; + ull = strtoull(s, &e, 0); + + if (!e || *e || errno != 0) + return -1; + + k = (AvahiUsec) ull; + + if ((unsigned long long) k != ull) + return -1; + + *u = k; + return 0; +} + static int load_config_file(DaemonConfig *c) { int r = -1; AvahiIniFile *f; @@ -642,6 +662,26 @@ static int load_config_file(DaemonConfig *c) { c->server_config.deny_interfaces = avahi_string_list_add(c->server_config.deny_interfaces, *t); avahi_strfreev(e); + } else if (strcasecmp(p->key, "ratelimit-interval-usec") == 0) { + AvahiUsec k; + + if (parse_usec(p->value, &k) < 0) { + avahi_log_error("Invalid ratelimit-interval-usec setting %s", p->value); + goto finish; + } + + c->server_config.ratelimit_interval = k; + + } else if (strcasecmp(p->key, "ratelimit-burst") == 0) { + unsigned k; + + if (parse_unsigned(p->value, &k) < 0) { + avahi_log_error("Invalid ratelimit-burst setting %s", p->value); + goto finish; + } + + c->server_config.ratelimit_burst = k; + } else if (strcasecmp(p->key, "cache-entries-max") == 0) { unsigned k; -- cgit