mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-18 00:58:42 +00:00
Babel: Send out low-interval hello on shutdown
When shutting down a Babel instance we send a wildcard retraction to make sure all peers can quickly switch to other route origins. Add another small optimisation borrowed from babeld: sending a Hello message (along with the retraction) with a very low interval. This will cause neighbours to modify their expiry timers for the node's state to quickly time it out, thus conserving resources in the network.
This commit is contained in:
parent
9eec503b25
commit
4aef70136d
@ -842,14 +842,14 @@ babel_send_ihus(struct babel_iface *ifa)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
babel_send_hello(struct babel_iface *ifa)
|
babel_send_hello(struct babel_iface *ifa, uint interval)
|
||||||
{
|
{
|
||||||
struct babel_proto *p = ifa->proto;
|
struct babel_proto *p = ifa->proto;
|
||||||
union babel_msg msg = {};
|
union babel_msg msg = {};
|
||||||
|
|
||||||
msg.type = BABEL_TLV_HELLO;
|
msg.type = BABEL_TLV_HELLO;
|
||||||
msg.hello.seqno = ifa->hello_seqno++;
|
msg.hello.seqno = ifa->hello_seqno++;
|
||||||
msg.hello.interval = ifa->cf->hello_interval;
|
msg.hello.interval = interval ?: ifa->cf->hello_interval;
|
||||||
|
|
||||||
TRACE(D_PACKETS, "Sending hello on %s with seqno %d interval %t",
|
TRACE(D_PACKETS, "Sending hello on %s with seqno %d interval %t",
|
||||||
ifa->ifname, msg.hello.seqno, (btime) msg.hello.interval);
|
ifa->ifname, msg.hello.seqno, (btime) msg.hello.interval);
|
||||||
@ -1557,7 +1557,7 @@ babel_iface_timer(timer *t)
|
|||||||
|
|
||||||
if (now_ >= ifa->next_hello)
|
if (now_ >= ifa->next_hello)
|
||||||
{
|
{
|
||||||
babel_send_hello(ifa);
|
babel_send_hello(ifa, 0);
|
||||||
ifa->next_hello += hello_period * (1 + (now_ - ifa->next_hello) / hello_period);
|
ifa->next_hello += hello_period * (1 + (now_ - ifa->next_hello) / hello_period);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1604,7 +1604,7 @@ babel_iface_start(struct babel_iface *ifa)
|
|||||||
tm_start(ifa->timer, 100 MS);
|
tm_start(ifa->timer, 100 MS);
|
||||||
ifa->up = 1;
|
ifa->up = 1;
|
||||||
|
|
||||||
babel_send_hello(ifa);
|
babel_send_hello(ifa, 0);
|
||||||
babel_send_wildcard_retraction(ifa);
|
babel_send_wildcard_retraction(ifa);
|
||||||
babel_send_wildcard_request(ifa);
|
babel_send_wildcard_request(ifa);
|
||||||
babel_send_update(ifa, 0); /* Full update */
|
babel_send_update(ifa, 0); /* Full update */
|
||||||
@ -2417,6 +2417,11 @@ babel_iface_shutdown(struct babel_iface *ifa)
|
|||||||
{
|
{
|
||||||
if (ifa->sk)
|
if (ifa->sk)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Retract all our routes and lower the hello interval so peers' neighbour
|
||||||
|
* state expires quickly
|
||||||
|
*/
|
||||||
|
babel_send_hello(ifa, BABEL_MIN_INTERVAL);
|
||||||
babel_send_wildcard_retraction(ifa);
|
babel_send_wildcard_retraction(ifa);
|
||||||
babel_send_queue(ifa);
|
babel_send_queue(ifa);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user