summaryrefslogtreecommitdiffstats
path: root/ripd
diff options
context:
space:
mode:
authorvivek <vivek@cumulusnetworks.com>2015-10-21 06:38:38 +0200
committervivek <vivek@cumulusnetworks.com>2015-10-21 06:38:38 +0200
commit5048fe14444fcbf27a1905e0f79f5e53af35cd29 (patch)
treec8bbb930a5649add14b095be0f1663cc422850e1 /ripd
parentMerge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga in... (diff)
downloadfrr-5048fe14444fcbf27a1905e0f79f5e53af35cd29.tar.xz
frr-5048fe14444fcbf27a1905e0f79f5e53af35cd29.zip
Zebra: Make redistribute do replace instead of del/add for better convergence
Ticket: CM-6768 Reviewed By: CCR-3207 Testing Done: bgpsmoke, smoke, topo to create failure Redistributing routes goes through a del/add cycle whenever a redistributed is updated. This del/add cycle causes disruption by causing traffic loss for brief/long periods of time(6-8 s in case of OSPF). The modifications in this patch remove the del/add cycle to ensure that this disruption doesn't happen. Also fixed sending no forwarding address when announcing IPv4 routes with IPv6 nexthops, and sending nexthop only when there is a single path. Signed-off-by: Dinesh G Dutt <ddutt@cumulusnetworks.com> Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com> Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Diffstat (limited to 'ripd')
-rw-r--r--ripd/rip_zebra.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/ripd/rip_zebra.c b/ripd/rip_zebra.c
index e0092f542..a5cc8260d 100644
--- a/ripd/rip_zebra.c
+++ b/ripd/rip_zebra.c
@@ -140,10 +140,10 @@ rip_zebra_read_ipv4 (int command, struct zclient *zclient, zebra_size_t length)
api.metric = 0;
/* Then fetch IPv4 prefixes. */
- if (command == ZEBRA_IPV4_ROUTE_ADD)
+ if (command == ZEBRA_REDISTRIBUTE_IPV4_ADD)
rip_redistribute_add (api.type, RIP_ROUTE_REDISTRIBUTE, &p, ifindex,
&nexthop, api.metric, api.distance);
- else
+ else if (command == ZEBRA_REDISTRIBUTE_IPV4_DEL)
rip_redistribute_delete (api.type, RIP_ROUTE_REDISTRIBUTE, &p, ifindex);
return 0;
@@ -683,6 +683,8 @@ rip_zclient_init (struct thread_master *master)
zclient->ipv4_route_delete = rip_zebra_read_ipv4;
zclient->interface_up = rip_interface_up;
zclient->interface_down = rip_interface_down;
+ zclient->redistribute_route_ipv4_add = rip_zebra_read_ipv4;
+ zclient->redistribute_route_ipv4_del = rip_zebra_read_ipv4;
/* Install zebra node. */
install_node (&zebra_node, config_write_zebra);