From 10ead5c82ce5cfbfc3a1ff9044324ec4f59aefad Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timo=20Ter=C3=A4s?= Date: Fri, 22 May 2015 13:41:00 +0300 Subject: [PATCH] zebra: simplify redistribution code MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Merge the conditionals as one to avoid code duplication. Signed-off-by: Timo Teräs Signed-off-by: David Lamparter (cherry picked from commit f85592e05ae6463727433893e61afd1081fcf7e0) Conflicts: zebra/redistribute.c --- zebra/redistribute.c | 50 ++++++++++++++------------------------------ 1 file changed, 16 insertions(+), 34 deletions(-) diff --git a/zebra/redistribute.c b/zebra/redistribute.c index 4d94ddf622..a383fdde7c 100644 --- a/zebra/redistribute.c +++ b/zebra/redistribute.c @@ -263,6 +263,7 @@ redistribute_delete (struct prefix *p, struct rib *rib) struct listnode *node, *nnode; struct zserv *client; char buf[INET6_ADDRSTRLEN]; + int afi; if (IS_ZEBRA_DEBUG_RIB) { @@ -275,47 +276,28 @@ redistribute_delete (struct prefix *p, struct rib *rib) if (rib->distance == DISTANCE_INFINITY) return; + afi = family2afi(p->family); + if (!afi) + { + zlog_warn("%s: Unknown AFI/SAFI prefix received\n", __FUNCTION__); + return; + } + for (ALL_LIST_ELEMENTS (zebrad.client_list, node, nnode, client)) { - if (is_default (p)) + if ((is_default (p) && + vrf_bitmap_check (client->redist_default, rib->vrf_id)) || + (rib->instance && + redist_check_instance(&client->mi_redist[afi][rib->type], + rib->instance)) || + vrf_bitmap_check (client->redist[afi][rib->type], rib->vrf_id)) { - if ((p->family == AF_INET) && - (vrf_bitmap_check (client->redist_default, rib->vrf_id) || - (rib->instance && - redist_check_instance(&client->mi_redist[AFI_IP][rib->type], - rib->instance)) || - vrf_bitmap_check (client->redist[AFI_IP][rib->type], rib->vrf_id))) + if (p->family == AF_INET) zsend_redistribute_route (ZEBRA_REDISTRIBUTE_IPV4_DEL, client, p, rib); -#ifdef HAVE_IPV6 - if ((p->family == AF_INET6) && - (vrf_bitmap_check (client->redist_default, rib->vrf_id) || - (rib->instance && - redist_check_instance(&client->mi_redist[AFI_IP6][rib->type], - rib->instance)) || - vrf_bitmap_check (client->redist[AFI_IP6][rib->type], rib->vrf_id))) + if (p->family == AF_INET6) zsend_redistribute_route (ZEBRA_REDISTRIBUTE_IPV6_DEL, client, p, rib); -#endif /* HAVE_IPV6 */ - } - else - { - if ((p->family == AF_INET) && - ((rib->instance && - redist_check_instance(&client->mi_redist[AFI_IP][rib->type], - rib->instance)) || - vrf_bitmap_check (client->redist[AFI_IP][rib->type], rib->vrf_id))) - zsend_redistribute_route (ZEBRA_REDISTRIBUTE_IPV4_DEL, client, p, - rib); -#ifdef HAVE_IPV6 - if ((p->family == AF_INET6) && - ((rib->instance && - redist_check_instance(&client->mi_redist[AFI_IP6][rib->type], - rib->instance)) || - vrf_bitmap_check (client->redist[AFI_IP6][rib->type], rib->vrf_id))) - zsend_redistribute_route (ZEBRA_REDISTRIBUTE_IPV6_DEL, client, p, - rib); -#endif /* HAVE_IPV6 */ } } } -- 2.39.5