diff options
Diffstat (limited to 'pimd/pim_zebra.c')
-rw-r--r-- | pimd/pim_zebra.c | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c index 129cbe4f..dfc871b3 100644 --- a/pimd/pim_zebra.c +++ b/pimd/pim_zebra.c @@ -70,7 +70,7 @@ static void zclient_broken(struct zclient *zclient) /* Router-id update message from zebra. */ static int pim_router_id_update_zebra(int command, struct zclient *zclient, - zebra_size_t length) + zebra_size_t length, vrf_id_t vrf_id) { struct prefix router_id; @@ -80,7 +80,7 @@ static int pim_router_id_update_zebra(int command, struct zclient *zclient, } static int pim_zebra_if_add(int command, struct zclient *zclient, - zebra_size_t length) + zebra_size_t length, vrf_id_t vrf_id) { struct interface *ifp; @@ -88,7 +88,7 @@ static int pim_zebra_if_add(int command, struct zclient *zclient, zebra api adds/dels interfaces using the same call interface_add_read below, see comments in lib/zclient.c */ - ifp = zebra_interface_add_read(zclient->ibuf); + ifp = zebra_interface_add_read(zclient->ibuf, vrf_id); if (!ifp) return 0; @@ -106,7 +106,7 @@ static int pim_zebra_if_add(int command, struct zclient *zclient, } static int pim_zebra_if_del(int command, struct zclient *zclient, - zebra_size_t length) + zebra_size_t length, vrf_id_t vrf_id) { struct interface *ifp; @@ -120,7 +120,7 @@ static int pim_zebra_if_del(int command, struct zclient *zclient, pimd to assert. Other clients use zebra_interface_state_read and it appears to work just fine. */ - ifp = zebra_interface_state_read(zclient->ibuf); + ifp = zebra_interface_state_read(zclient->ibuf, vrf_id); if (!ifp) return 0; @@ -138,7 +138,7 @@ static int pim_zebra_if_del(int command, struct zclient *zclient, } static int pim_zebra_if_state_up(int command, struct zclient *zclient, - zebra_size_t length) + zebra_size_t length, vrf_id_t vrf_id) { struct interface *ifp; @@ -146,7 +146,7 @@ static int pim_zebra_if_state_up(int command, struct zclient *zclient, zebra api notifies interface up/down events by using the same call zebra_interface_state_read below, see comments in lib/zclient.c */ - ifp = zebra_interface_state_read(zclient->ibuf); + ifp = zebra_interface_state_read(zclient->ibuf, vrf_id); if (!ifp) return 0; @@ -170,7 +170,7 @@ static int pim_zebra_if_state_up(int command, struct zclient *zclient, } static int pim_zebra_if_state_down(int command, struct zclient *zclient, - zebra_size_t length) + zebra_size_t length, vrf_id_t vrf_id) { struct interface *ifp; @@ -178,7 +178,7 @@ static int pim_zebra_if_state_down(int command, struct zclient *zclient, zebra api notifies interface up/down events by using the same call zebra_interface_state_read below, see comments in lib/zclient.c */ - ifp = zebra_interface_state_read(zclient->ibuf); + ifp = zebra_interface_state_read(zclient->ibuf, vrf_id); if (!ifp) return 0; @@ -237,7 +237,7 @@ static void dump_if_address(struct interface *ifp) #endif static int pim_zebra_if_address_add(int command, struct zclient *zclient, - zebra_size_t length) + zebra_size_t length, vrf_id_t vrf_id) { struct connected *c; struct prefix *p; @@ -252,7 +252,7 @@ static int pim_zebra_if_address_add(int command, struct zclient *zclient, will add address to interface list by calling connected_add_by_prefix() */ - c = zebra_interface_address_read(command, zclient->ibuf); + c = zebra_interface_address_read(command, zclient->ibuf, vrf_id); if (!c) return 0; @@ -299,7 +299,7 @@ static int pim_zebra_if_address_add(int command, struct zclient *zclient, } static int pim_zebra_if_address_del(int command, struct zclient *client, - zebra_size_t length) + zebra_size_t length, vrf_id_t vrf_id) { struct connected *c; struct prefix *p; @@ -314,7 +314,7 @@ static int pim_zebra_if_address_del(int command, struct zclient *client, will remove address from interface list by calling connected_delete_by_prefix() */ - c = zebra_interface_address_read(command, client->ibuf); + c = zebra_interface_address_read(command, client->ibuf, vrf_id); if (!c) return 0; @@ -526,7 +526,7 @@ static void sched_rpf_cache_refresh() } static int redist_read_ipv4_route(int command, struct zclient *zclient, - zebra_size_t length) + zebra_size_t length, vrf_id_t vrf_id) { struct stream *s; struct zapi_ipv4 api; @@ -650,6 +650,11 @@ static int redist_read_ipv4_route(int command, struct zclient *zclient, return 0; } +static void pim_zebra_connected(struct zclient *zclient) +{ + zclient_send_requests(zclient, VRF_DEFAULT); +} + void pim_zebra_init(char *zebra_sock_path) { int i; @@ -666,6 +671,7 @@ void pim_zebra_init(char *zebra_sock_path) /* Socket for receiving updates from Zebra daemon */ qpim_zclient_update = zclient_new(); + qpim_zclient_update->zebra_connected = pim_zebra_connected; qpim_zclient_update->router_id_update = pim_router_id_update_zebra; qpim_zclient_update->interface_add = pim_zebra_if_add; qpim_zclient_update->interface_delete = pim_zebra_if_del; @@ -687,7 +693,7 @@ void pim_zebra_init(char *zebra_sock_path) for (i = 0; i < ZEBRA_ROUTE_MAX; i++) { if (i == qpim_zclient_update->redist_default) continue; - qpim_zclient_update->redist[i] = 1; + vrf_bitmap_set(qpim_zclient_update->redist[i], VRF_DEFAULT); if (PIM_DEBUG_PIM_TRACE) { zlog_debug("%s: requesting redistribution for %s (%i)", __PRETTY_FUNCTION__, zebra_route_string(i), i); @@ -695,7 +701,7 @@ void pim_zebra_init(char *zebra_sock_path) } /* Request default information */ - qpim_zclient_update->default_information = 1; + vrf_bitmap_set(qpim_zclient_update->default_information, VRF_DEFAULT); if (PIM_DEBUG_PIM_TRACE) { zlog_info("%s: requesting default information redistribution", __PRETTY_FUNCTION__); |