]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
RIP: Fix handling of passive mode for demand circuit interfaces
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Tue, 12 May 2020 01:46:47 +0000 (03:46 +0200)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Tue, 12 May 2020 01:46:47 +0000 (03:46 +0200)
proto/rip/rip.c

index ae8007d98e9f45935c4729da5ec55560403241ba..d18ff5adfab6e06b09cf85e5aa5686f83a7d99ec 100644 (file)
@@ -532,6 +532,9 @@ rip_iface_start(struct rip_iface *ifa)
 
   ifa->up = 1;
 
+  if (ifa->cf->passive)
+    return;
+
   rip_send_request(p, ifa);
   rip_send_table(p, ifa, ifa->addr, 0);
 }
@@ -556,7 +559,7 @@ rip_iface_stop(struct rip_iface *ifa)
   ifa->tx_pending = 0;
   ifa->req_pending = 0;
 
-  if (ifa->cf->demand_circuit)
+  if (ifa->cf->demand_circuit && !ifa->cf->passive)
     rip_send_flush(p, ifa);
 
   WALK_LIST_FIRST(n, ifa->neigh_list)
@@ -730,6 +733,17 @@ rip_reconfigure_iface(struct rip_proto *p, struct rip_iface *ifa, struct rip_ifa
       (ifa->next_regular > (current_time() + new->update_time)))
     ifa->next_regular = current_time() + (random() % new->update_time) + 100 MS;
 
+  if (ifa->up && new->demand_circuit && (new->passive != old->passive))
+  {
+    if (new->passive)
+      rip_send_flush(p, ifa);
+    else
+    {
+      rip_send_request(p, ifa);
+      rip_send_table(p, ifa, ifa->addr, 0);
+    }
+  }
+
   if (new->check_link != old->check_link)
     rip_iface_update_state(ifa);