diff options
author | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2017-10-13 19:33:42 +0200 |
---|---|---|
committer | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2017-12-07 13:53:42 +0100 |
commit | 5ee69d11f2e859b77ff04bb4068f43082fd1794f (patch) | |
tree | fda0d5f87307d733ecfd830ad8996a9e6d176544 /proto | |
parent | 8b58f565e4fcd076e2d9fe008c7f2b19e264b319 (diff) |
Babel: Fix Hello and IHU expiration
Diffstat (limited to 'proto')
-rw-r--r-- | proto/babel/babel.c | 6 | ||||
-rw-r--r-- | proto/babel/babel.h | 1 |
2 files changed, 6 insertions, 1 deletions
diff --git a/proto/babel/babel.c b/proto/babel/babel.c index 8a39f022..10974474 100644 --- a/proto/babel/babel.c +++ b/proto/babel/babel.c @@ -343,6 +343,7 @@ static void babel_expire_ihu(struct babel_neighbor *nbr) { nbr->txcost = BABEL_INFINITY; + nbr->ihu_expiry = 0; } static void @@ -353,7 +354,9 @@ babel_expire_hello(struct babel_neighbor *nbr) if (nbr->hello_cnt < 16) nbr->hello_cnt++; - if (!nbr->hello_map) + if (nbr->hello_map) + nbr->hello_expiry += nbr->last_hello_int; + else babel_flush_neighbor(nbr); } @@ -929,6 +932,7 @@ babel_update_hello_history(struct babel_neighbor *n, u16 seqno, uint interval) n->next_hello_seqno = seqno+1; if (n->hello_cnt < 16) n->hello_cnt++; n->hello_expiry = current_time() + BABEL_HELLO_EXPIRY_FACTOR(interval); + n->last_hello_int = interval; } static void diff --git a/proto/babel/babel.h b/proto/babel/babel.h index 95ea3036..1b857f09 100644 --- a/proto/babel/babel.h +++ b/proto/babel/babel.h @@ -191,6 +191,7 @@ struct babel_neighbor { u8 hello_cnt; u16 hello_map; u16 next_hello_seqno; + uint last_hello_int; /* expiry timers */ btime hello_expiry; btime ihu_expiry; |