diff options
author | Lennart Poettering <lennart@poettering.net> | 2010-06-29 02:24:02 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2010-06-29 02:24:02 +0200 |
commit | d7b03753f10d93d278091d39b95adf3b18a2770c (patch) | |
tree | 49e7a335eac64aa01a84c3c1cd0003e83f02c8eb /avahi-daemon/main.c | |
parent | 17cb9485bbf194aadf94642eafe261303fe8a867 (diff) |
core: implement packet rate limiting and enable it by default
Diffstat (limited to 'avahi-daemon/main.c')
-rw-r--r-- | avahi-daemon/main.c | 40 |
1 files changed, 40 insertions, 0 deletions
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; |