diff options
author | vivek <vivek@cumulusnetworks.com> | 2015-10-21 06:38:38 +0200 |
---|---|---|
committer | vivek <vivek@cumulusnetworks.com> | 2015-10-21 06:38:38 +0200 |
commit | 5048fe14444fcbf27a1905e0f79f5e53af35cd29 (patch) | |
tree | c8bbb930a5649add14b095be0f1663cc422850e1 /ripd | |
parent | Merge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga in... (diff) | |
download | frr-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.c | 6 |
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); |