diff --git a/proto/bfd/bfd.c b/proto/bfd/bfd.c index 417263ef..a8814382 100644 --- a/proto/bfd/bfd.c +++ b/proto/bfd/bfd.c @@ -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); }