]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
BFD: Fix superfluous reconfiguration of sessions
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Thu, 12 Nov 2020 01:37:42 +0000 (02:37 +0100)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Thu, 12 Nov 2020 01:48:35 +0000 (02:48 +0100)
proto/bfd/bfd.c

index 417263ef6159bbc12407d1279675e0ecf77eb539..a8814382cd55528a28e4aa190415caf6e095714a 100644 (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);
 }