From d825b7d8f0f23ac787128394244f2829bec1e418 Mon Sep 17 00:00:00 2001 From: "Ondrej Zajicek (work)" Date: Tue, 12 May 2020 03:46:47 +0200 Subject: [PATCH] RIP: Fix handling of passive mode for demand circuit interfaces --- proto/rip/rip.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/proto/rip/rip.c b/proto/rip/rip.c index fb212a9b..5a1affdd 100644 --- a/proto/rip/rip.c +++ b/proto/rip/rip.c @@ -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);