diff options
Diffstat (limited to 'ripngd/ripng_zebra.c')
| -rw-r--r-- | ripngd/ripng_zebra.c | 56 |
1 files changed, 30 insertions, 26 deletions
diff --git a/ripngd/ripng_zebra.c b/ripngd/ripng_zebra.c index 278ca76715..e83e36bf26 100644 --- a/ripngd/ripng_zebra.c +++ b/ripngd/ripng_zebra.c @@ -34,22 +34,15 @@ /* All information about zebra. */ struct zclient *zclient = NULL; -/* Callback prototypes for zebra client service. */ -int ripng_interface_up (int, struct zclient *, zebra_size_t); -int ripng_interface_down (int, struct zclient *, zebra_size_t); -int ripng_interface_add (int, struct zclient *, zebra_size_t); -int ripng_interface_delete (int, struct zclient *, zebra_size_t); -int ripng_interface_address_add (int, struct zclient *, zebra_size_t); -int ripng_interface_address_delete (int, struct zclient *, zebra_size_t); - void ripng_zebra_ipv6_add (struct prefix_ipv6 *p, struct in6_addr *nexthop, unsigned int ifindex, u_char metric) { struct zapi_ipv6 api; - if (zclient->redist[AFI_IP6][ZEBRA_ROUTE_RIPNG].enabled) + if (vrf_bitmap_check (zclient->redist[AFI_IP6][ZEBRA_ROUTE_RIPNG], VRF_DEFAULT)) { + api.vrf_id = VRF_DEFAULT; api.type = ZEBRA_ROUTE_RIPNG; api.instance = 0; api.flags = 0; @@ -74,7 +67,7 @@ ripng_zebra_ipv6_delete (struct prefix_ipv6 *p, struct in6_addr *nexthop, { struct zapi_ipv6 api; - if (zclient->redist[AFI_IP6][ZEBRA_ROUTE_RIPNG].enabled) + if (vrf_bitmap_check (zclient->redist[AFI_IP6][ZEBRA_ROUTE_RIPNG], VRF_DEFAULT)) { api.type = ZEBRA_ROUTE_RIPNG; api.instance = 0; @@ -95,7 +88,7 @@ ripng_zebra_ipv6_delete (struct prefix_ipv6 *p, struct in6_addr *nexthop, /* Zebra route add and delete treatment. */ static int ripng_zebra_read_ipv6 (int command, struct zclient *zclient, - zebra_size_t length) + zebra_size_t length, vrf_id_t vrf_id) { struct stream *s; struct zapi_ipv6 api; @@ -156,13 +149,14 @@ ripng_zclient_reset (void) static int ripng_redistribute_unset (int type) { - if (! zclient->redist[AFI_IP6][type].enabled) + + if (! vrf_bitmap_check (zclient->redist[AFI_IP6][type], VRF_DEFAULT)) return CMD_SUCCESS; - redist_del_instance(&zclient->redist[AFI_IP6][type], 0); + vrf_bitmap_set (zclient->redist[AFI_IP6][type], VRF_DEFAULT); if (zclient->sock > 0) - zebra_redistribute_send (ZEBRA_REDISTRIBUTE_DELETE, zclient, AFI_IP6, type, 0); + zebra_redistribute_send (ZEBRA_REDISTRIBUTE_DELETE, zclient, AFI_IP6, type, 0, VRF_DEFAULT); ripng_redistribute_withdraw (type); @@ -172,7 +166,7 @@ ripng_redistribute_unset (int type) int ripng_redistribute_check (int type) { - return (zclient->redist[AFI_IP6][type].enabled); + return vrf_bitmap_check (zclient->redist[AFI_IP6][type], VRF_DEFAULT); } static void @@ -232,13 +226,14 @@ ripng_redistribute_clean () for (i = 0; redist_type[i].str; i++) { - if (zclient->redist[AFI_IP6][redist_type[i].type].enabled) + if (vrf_bitmap_check (zclient->redist[AFI_IP6][redist_type[i].type], VRF_DEFAULT)) { if (zclient->sock > 0) zebra_redistribute_send (ZEBRA_REDISTRIBUTE_DELETE, - zclient, AFI_IP6, redist_type[i].type, 0); + zclient, AFI_IP6, redist_type[i].type, 0, + VRF_DEFAULT); - redist_del_instance(&zclient->redist[AFI_IP6][redist_type[i].type], 0); + vrf_bitmap_unset (zclient->redist[AFI_IP6][redist_type[i].type], VRF_DEFAULT); /* Remove the routes from RIPng table. */ ripng_redistribute_withdraw (redist_type[i].type); @@ -276,7 +271,7 @@ DEFUN (ripng_redistribute_ripng, "Redistribute information from another routing protocol\n" "RIPng route\n") { - redist_add_instance(&zclient->redist[AFI_IP6][ZEBRA_ROUTE_RIPNG], 0); + vrf_bitmap_set (zclient->redist[AFI_IP6][ZEBRA_ROUTE_RIPNG], VRF_DEFAULT); return CMD_SUCCESS; } @@ -287,7 +282,7 @@ DEFUN (no_ripng_redistribute_ripng, "Redistribute information from another routing protocol\n" "RIPng route\n") { - redist_del_instance(&zclient->redist[AFI_IP6][ZEBRA_ROUTE_RIPNG], 0); + vrf_bitmap_unset (zclient->redist[AFI_IP6][ZEBRA_ROUTE_RIPNG], VRF_DEFAULT); return CMD_SUCCESS; } @@ -307,7 +302,7 @@ DEFUN (ripng_redistribute_type, return CMD_WARNING; } - zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, type, 0); + zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, type, 0, VRF_DEFAULT); return CMD_SUCCESS; } @@ -355,7 +350,8 @@ DEFUN (ripng_redistribute_type_metric, } ripng_redistribute_metric_set (type, metric); - zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, type, 0); + zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, type, 0, + VRF_DEFAULT); return CMD_SUCCESS; } @@ -387,7 +383,8 @@ DEFUN (ripng_redistribute_type_routemap, } ripng_redistribute_routemap_set (type, argv[1]); - zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, type, 0); + zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, type, 0, + VRF_DEFAULT); return CMD_SUCCESS; } @@ -424,7 +421,7 @@ DEFUN (ripng_redistribute_type_metric_routemap, ripng_redistribute_metric_set (type, metric); ripng_redistribute_routemap_set (type, argv[2]); - zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, type, 0); + zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, type, 0, VRF_DEFAULT); return CMD_SUCCESS; } @@ -444,7 +441,7 @@ ripng_redistribute_write (struct vty *vty, int config_mode) for (i = 0; i < ZEBRA_ROUTE_MAX; i++) if (i != zclient->redist_default && - zclient->redist[AFI_IP6][i].enabled) + vrf_bitmap_check (zclient->redist[AFI_IP6][i], VRF_DEFAULT)) { if (config_mode) { @@ -484,7 +481,7 @@ zebra_config_write (struct vty *vty) vty_out (vty, "no router zebra%s", VTY_NEWLINE); return 1; } - else if (! zclient->redist[AFI_IP6][ZEBRA_ROUTE_RIPNG].enabled) + else if (! vrf_bitmap_check (zclient->redist[AFI_IP6][ZEBRA_ROUTE_RIPNG], VRF_DEFAULT)) { vty_out (vty, "router zebra%s", VTY_NEWLINE); vty_out (vty, " no redistribute ripng%s", VTY_NEWLINE); @@ -500,6 +497,12 @@ static struct cmd_node zebra_node = "%s(config-router)# ", }; +static void +ripng_zebra_connected (struct zclient *zclient) +{ + zclient_send_requests (zclient, VRF_DEFAULT); +} + /* Initialize zebra structure and it's commands. */ void zebra_init (struct thread_master *master) @@ -508,6 +511,7 @@ zebra_init (struct thread_master *master) zclient = zclient_new(master); zclient_init (zclient, ZEBRA_ROUTE_RIPNG, 0); + zclient->zebra_connected = ripng_zebra_connected; zclient->interface_up = ripng_interface_up; zclient->interface_down = ripng_interface_down; zclient->interface_add = ripng_interface_add; |
