summaryrefslogtreecommitdiffstats
path: root/avahi-daemon
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-06-29 02:24:02 +0200
committerLennart Poettering <lennart@poettering.net>2010-06-29 02:24:02 +0200
commitd7b03753f10d93d278091d39b95adf3b18a2770c (patch)
tree49e7a335eac64aa01a84c3c1cd0003e83f02c8eb /avahi-daemon
parent17cb9485bbf194aadf94642eafe261303fe8a867 (diff)
core: implement packet rate limiting and enable it by default
Diffstat (limited to 'avahi-daemon')
-rw-r--r--avahi-daemon/avahi-daemon.conf2
-rw-r--r--avahi-daemon/main.c40
2 files changed, 42 insertions, 0 deletions
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;