diff options
Diffstat (limited to 'zebra/redistribute.c')
| -rw-r--r-- | zebra/redistribute.c | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/zebra/redistribute.c b/zebra/redistribute.c index f48fc6addb..c5769ae06f 100644 --- a/zebra/redistribute.c +++ b/zebra/redistribute.c @@ -177,7 +177,8 @@ void redistribute_update(const struct prefix *p, const struct prefix *src_p, send_redistribute = 0; if (is_default_prefix(p) - && vrf_bitmap_check(client->redist_default, re->vrf_id)) + && vrf_bitmap_check(client->redist_default[afi], + re->vrf_id)) send_redistribute = 1; else if (vrf_bitmap_check(client->redist[afi][ZEBRA_ROUTE_ALL], re->vrf_id)) @@ -246,7 +247,8 @@ void redistribute_delete(const struct prefix *p, const struct prefix *src_p, for (ALL_LIST_ELEMENTS(zebrad.client_list, node, nnode, client)) { if ((is_default_prefix(p) - && vrf_bitmap_check(client->redist_default, re->vrf_id)) + && vrf_bitmap_check(client->redist_default[afi], + re->vrf_id)) || vrf_bitmap_check(client->redist[afi][ZEBRA_ROUTE_ALL], re->vrf_id) || (re->instance @@ -354,13 +356,41 @@ stream_failure: void zebra_redistribute_default_add(ZAPI_HANDLER_ARGS) { - vrf_bitmap_set(client->redist_default, zvrf_id(zvrf)); + afi_t afi = 0; + + STREAM_GETC(msg, afi); + + if (afi == 0 || afi >= AFI_MAX) { + flog_warn(EC_ZEBRA_REDISTRIBUTE_UNKNOWN_AF, + "%s: Specified afi %u does not exist", + __PRETTY_FUNCTION__, afi); + return; + } + + vrf_bitmap_set(client->redist_default[afi], zvrf_id(zvrf)); zebra_redistribute_default(client, zvrf_id(zvrf)); + +stream_failure: + return; } void zebra_redistribute_default_delete(ZAPI_HANDLER_ARGS) { - vrf_bitmap_unset(client->redist_default, zvrf_id(zvrf)); + afi_t afi = 0; + + STREAM_GETC(msg, afi); + + if (afi == 0 || afi >= AFI_MAX) { + flog_warn(EC_ZEBRA_REDISTRIBUTE_UNKNOWN_AF, + "%s: Specified afi %u does not exist", + __PRETTY_FUNCTION__, afi); + return; + } + + vrf_bitmap_unset(client->redist_default[afi], zvrf_id(zvrf)); + +stream_failure: + return; } /* Interface up information. */ @@ -375,7 +405,7 @@ void zebra_interface_up_update(struct interface *ifp) if (ifp->ptm_status || !ifp->ptm_enable) { for (ALL_LIST_ELEMENTS(zebrad.client_list, node, nnode, client)) - if (client->ifinfo) { + if (vrf_bitmap_check(client->ifinfo, ifp->vrf_id)) { zsend_interface_update(ZEBRA_INTERFACE_UP, client, ifp); zsend_interface_link_params(client, ifp); @@ -409,7 +439,7 @@ void zebra_interface_add_update(struct interface *ifp) ifp->vrf_id); for (ALL_LIST_ELEMENTS(zebrad.client_list, node, nnode, client)) - if (client->ifinfo) { + if (vrf_bitmap_check(client->ifinfo, ifp->vrf_id)) { client->ifadd_cnt++; zsend_interface_add(client, ifp); zsend_interface_link_params(client, ifp); @@ -782,6 +812,6 @@ void zebra_interface_parameters_update(struct interface *ifp) ifp->name, ifp->vrf_id); for (ALL_LIST_ELEMENTS(zebrad.client_list, node, nnode, client)) - if (client->ifinfo) + if (vrf_bitmap_check(client->ifinfo, ifp->vrf_id)) zsend_interface_link_params(client, ifp); } |
