Set TTL to the new value when updating cached service entry
authorRafał Miłecki <rafal@milecki.pl>
Mon, 13 Feb 2017 07:43:27 +0000 (08:43 +0100)
committerRafał Miłecki <rafal@milecki.pl>
Mon, 13 Feb 2017 09:20:46 +0000 (10:20 +0100)
In the simplest case host may change TTL to some different value. It's
the most important for the goodbye packets though.

Consider situation when host (for which we have no no cached entries)
restarts. First it sends goodbye with TTL 0 (we cache it), then seconds
later it announces with standard TTL values (but we keep TTL 0).
It results in wrong cache state and could cause dropping valid entries.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: John Crispin <john@phrozen.org>
cache.c

diff --git a/cache.c b/cache.c
index fa32465f953bb18a3577ef48282f70bc18050a12..6bf0d26ed60a95db262c2b2a43c7b1ce668b7c20 100644 (file)
--- a/cache.c
+++ b/cache.c
@@ -143,6 +143,7 @@ cache_service(struct interface *iface, char *entry, int hlen, int ttl)
                if (!strcmp(s->entry, entry)) {
                        s->refresh = 50;
                        s->time = monotonic_time();
+                       s->ttl = ttl;
                        return s;
                }