BFD: Fix superfluous reconfiguration of sessions

This commit is contained in:
Ondrej Zajicek (work) 2020-11-12 02:37:42 +01:00
parent 9d3fc3062b
commit 99ad208dd7

View file

@ -607,12 +607,20 @@ bfd_free_iface(struct bfd_iface *ifa)
static void
bfd_reconfigure_iface(struct bfd_proto *p, struct bfd_iface *ifa, struct bfd_config *nc)
{
struct bfd_iface_config *nic = bfd_find_iface_config(nc, ifa->iface);
ifa->changed = !!memcmp(nic, ifa->cf, sizeof(struct bfd_iface_config));
struct bfd_iface_config *new = bfd_find_iface_config(nc, ifa->iface);
struct bfd_iface_config *old = ifa->cf;
/* Check options that are handled in bfd_reconfigure_session() */
ifa->changed =
(new->min_rx_int != old->min_rx_int) ||
(new->min_tx_int != old->min_tx_int) ||
(new->idle_tx_int != old->idle_tx_int) ||
(new->multiplier != old->multiplier) ||
(new->passive != old->passive);
/* This should be probably changed to not access ifa->cf from the BFD thread */
birdloop_enter(p->loop);
ifa->cf = nic;
ifa->cf = new;
birdloop_leave(p->loop);
}