summaryrefslogtreecommitdiffstats
path: root/ripngd
diff options
context:
space:
mode:
Diffstat (limited to 'ripngd')
-rw-r--r--ripngd/ripng_interface.c26
-rw-r--r--ripngd/ripng_zebra.c53
-rw-r--r--ripngd/ripngd.h18
3 files changed, 54 insertions, 43 deletions
diff --git a/ripngd/ripng_interface.c b/ripngd/ripng_interface.c
index c7865d1e..e1f436eb 100644
--- a/ripngd/ripng_interface.c
+++ b/ripngd/ripng_interface.c
@@ -192,14 +192,15 @@ ripng_if_down (struct interface *ifp)
/* Inteface link up message processing. */
int
-ripng_interface_up (int command, struct zclient *zclient, zebra_size_t length)
+ripng_interface_up (int command, struct zclient *zclient, zebra_size_t length,
+ vrf_id_t vrf_id)
{
struct stream *s;
struct interface *ifp;
/* zebra_interface_state_read() updates interface structure in iflist. */
s = zclient->ibuf;
- ifp = zebra_interface_state_read (s);
+ ifp = zebra_interface_state_read (s, vrf_id);
if (ifp == NULL)
return 0;
@@ -224,14 +225,14 @@ ripng_interface_up (int command, struct zclient *zclient, zebra_size_t length)
/* Inteface link down message processing. */
int
ripng_interface_down (int command, struct zclient *zclient,
- zebra_size_t length)
+ zebra_size_t length, vrf_id_t vrf_id)
{
struct stream *s;
struct interface *ifp;
/* zebra_interface_state_read() updates interface structure in iflist. */
s = zclient->ibuf;
- ifp = zebra_interface_state_read (s);
+ ifp = zebra_interface_state_read (s, vrf_id);
if (ifp == NULL)
return 0;
@@ -248,11 +249,12 @@ ripng_interface_down (int command, struct zclient *zclient,
/* Inteface addition message from zebra. */
int
-ripng_interface_add (int command, struct zclient *zclient, zebra_size_t length)
+ripng_interface_add (int command, struct zclient *zclient, zebra_size_t length,
+ vrf_id_t vrf_id)
{
struct interface *ifp;
- ifp = zebra_interface_add_read (zclient->ibuf);
+ ifp = zebra_interface_add_read (zclient->ibuf, vrf_id);
if (IS_RIPNG_DEBUG_ZEBRA)
zlog_debug ("RIPng interface add %s index %d flags %#llx metric %d mtu %d",
@@ -273,14 +275,14 @@ ripng_interface_add (int command, struct zclient *zclient, zebra_size_t length)
int
ripng_interface_delete (int command, struct zclient *zclient,
- zebra_size_t length)
+ zebra_size_t length, vrf_id_t vrf_id)
{
struct interface *ifp;
struct stream *s;
s = zclient->ibuf;
/* zebra_interface_state_read() updates interface structure in iflist */
- ifp = zebra_interface_state_read(s);
+ ifp = zebra_interface_state_read (s, vrf_id);
if (ifp == NULL)
return 0;
@@ -387,13 +389,13 @@ ripng_apply_address_add (struct connected *ifc) {
int
ripng_interface_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;
c = zebra_interface_address_read (ZEBRA_INTERFACE_ADDRESS_ADD,
- zclient->ibuf);
+ zclient->ibuf, vrf_id);
if (c == NULL)
return 0;
@@ -454,14 +456,14 @@ ripng_apply_address_del (struct connected *ifc) {
int
ripng_interface_address_delete (int command, struct zclient *zclient,
- zebra_size_t length)
+ zebra_size_t length, vrf_id_t vrf_id)
{
struct connected *ifc;
struct prefix *p;
char buf[INET6_ADDRSTRLEN];
ifc = zebra_interface_address_read (ZEBRA_INTERFACE_ADDRESS_DELETE,
- zclient->ibuf);
+ zclient->ibuf, vrf_id);
if (ifc)
{
diff --git a/ripngd/ripng_zebra.c b/ripngd/ripng_zebra.c
index 5d383fa2..58f88606 100644
--- a/ripngd/ripng_zebra.c
+++ b/ripngd/ripng_zebra.c
@@ -37,14 +37,6 @@
/* 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);
-
/* Send ECMP routes to zebra. */
static void
ripng_zebra_ipv6_send (struct route_node *rp, u_char cmd)
@@ -59,8 +51,9 @@ ripng_zebra_ipv6_send (struct route_node *rp, u_char cmd)
struct ripng_info *rinfo = NULL;
int count = 0;
- if (zclient->redist[ZEBRA_ROUTE_RIPNG])
+ if (vrf_bitmap_check (zclient->redist[ZEBRA_ROUTE_RIPNG], VRF_DEFAULT))
{
+ api.vrf_id = VRF_DEFAULT;
api.type = ZEBRA_ROUTE_RIPNG;
api.flags = 0;
api.message = 0;
@@ -134,7 +127,7 @@ ripng_zebra_ipv6_delete (struct route_node *rp)
/* 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;
@@ -194,13 +187,14 @@ ripng_zclient_reset (void)
static int
ripng_redistribute_unset (int type)
{
- if (! zclient->redist[type])
+ if (! vrf_bitmap_check (zclient->redist[type], VRF_DEFAULT))
return CMD_SUCCESS;
- zclient->redist[type] = 0;
+ vrf_bitmap_set (zclient->redist[type], VRF_DEFAULT);
if (zclient->sock > 0)
- zebra_redistribute_send (ZEBRA_REDISTRIBUTE_DELETE, zclient, type);
+ zebra_redistribute_send (ZEBRA_REDISTRIBUTE_DELETE, zclient, type,
+ VRF_DEFAULT);
ripng_redistribute_withdraw (type);
@@ -210,7 +204,7 @@ ripng_redistribute_unset (int type)
int
ripng_redistribute_check (int type)
{
- return (zclient->redist[type]);
+ return vrf_bitmap_check (zclient->redist[type], VRF_DEFAULT);
}
static void
@@ -270,13 +264,14 @@ ripng_redistribute_clean ()
for (i = 0; redist_type[i].str; i++)
{
- if (zclient->redist[redist_type[i].type])
+ if (vrf_bitmap_check (zclient->redist[redist_type[i].type], VRF_DEFAULT))
{
if (zclient->sock > 0)
zebra_redistribute_send (ZEBRA_REDISTRIBUTE_DELETE,
- zclient, redist_type[i].type);
+ zclient, redist_type[i].type,
+ VRF_DEFAULT);
- zclient->redist[redist_type[i].type] = 0;
+ vrf_bitmap_unset (zclient->redist[redist_type[i].type], VRF_DEFAULT);
/* Remove the routes from RIPng table. */
ripng_redistribute_withdraw (redist_type[i].type);
@@ -314,7 +309,7 @@ DEFUN (ripng_redistribute_ripng,
"Redistribute information from another routing protocol\n"
"RIPng route\n")
{
- zclient->redist[ZEBRA_ROUTE_RIPNG] = 1;
+ vrf_bitmap_set (zclient->redist[ZEBRA_ROUTE_RIPNG], VRF_DEFAULT);
return CMD_SUCCESS;
}
@@ -325,7 +320,7 @@ DEFUN (no_ripng_redistribute_ripng,
"Redistribute information from another routing protocol\n"
"RIPng route\n")
{
- zclient->redist[ZEBRA_ROUTE_RIPNG] = 0;
+ vrf_bitmap_unset (zclient->redist[ZEBRA_ROUTE_RIPNG], VRF_DEFAULT);
return CMD_SUCCESS;
}
@@ -345,7 +340,7 @@ DEFUN (ripng_redistribute_type,
return CMD_WARNING;
}
- zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, type);
+ zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, type, VRF_DEFAULT);
return CMD_SUCCESS;
}
@@ -393,7 +388,7 @@ DEFUN (ripng_redistribute_type_metric,
}
ripng_redistribute_metric_set (type, metric);
- zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, type);
+ zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, type, VRF_DEFAULT);
return CMD_SUCCESS;
}
@@ -425,7 +420,7 @@ DEFUN (ripng_redistribute_type_routemap,
}
ripng_redistribute_routemap_set (type, argv[1]);
- zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, type);
+ zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, type, VRF_DEFAULT);
return CMD_SUCCESS;
}
@@ -462,7 +457,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, type);
+ zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, type, VRF_DEFAULT);
return CMD_SUCCESS;
}
@@ -481,7 +476,8 @@ ripng_redistribute_write (struct vty *vty, int config_mode)
int i;
for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
- if (i != zclient->redist_default && zclient->redist[i])
+ if (i != zclient->redist_default &&
+ vrf_bitmap_check (zclient->redist[i], VRF_DEFAULT))
{
if (config_mode)
{
@@ -521,7 +517,7 @@ zebra_config_write (struct vty *vty)
vty_out (vty, "no router zebra%s", VTY_NEWLINE);
return 1;
}
- else if (! zclient->redist[ZEBRA_ROUTE_RIPNG])
+ else if (! vrf_bitmap_check (zclient->redist[ZEBRA_ROUTE_RIPNG], VRF_DEFAULT))
{
vty_out (vty, "router zebra%s", VTY_NEWLINE);
vty_out (vty, " no redistribute ripng%s", VTY_NEWLINE);
@@ -537,6 +533,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 ()
@@ -545,6 +547,7 @@ zebra_init ()
zclient = zclient_new ();
zclient_init (zclient, ZEBRA_ROUTE_RIPNG);
+ zclient->zebra_connected = ripng_zebra_connected;
zclient->interface_up = ripng_interface_up;
zclient->interface_down = ripng_interface_down;
zclient->interface_add = ripng_interface_add;
diff --git a/ripngd/ripngd.h b/ripngd/ripngd.h
index 706ff542..28ca41bc 100644
--- a/ripngd/ripngd.h
+++ b/ripngd/ripngd.h
@@ -408,12 +408,18 @@ extern int ripng_send_packet (caddr_t buf, int bufsize,
extern void ripng_packet_dump (struct ripng_packet *packet, int size,
const char *sndrcv);
-extern int ripng_interface_up (int command, struct zclient *, zebra_size_t);
-extern int ripng_interface_down (int command, struct zclient *, zebra_size_t);
-extern int ripng_interface_add (int command, struct zclient *, zebra_size_t);
-extern int ripng_interface_delete (int command, struct zclient *, zebra_size_t);
-extern int ripng_interface_address_add (int command, struct zclient *, zebra_size_t);
-extern int ripng_interface_address_delete (int command, struct zclient *, zebra_size_t);
+extern int ripng_interface_up (int command, struct zclient *, zebra_size_t,
+ vrf_id_t);
+extern int ripng_interface_down (int command, struct zclient *, zebra_size_t,
+ vrf_id_t);
+extern int ripng_interface_add (int command, struct zclient *, zebra_size_t,
+ vrf_id_t);
+extern int ripng_interface_delete (int command, struct zclient *, zebra_size_t,
+ vrf_id_t);
+extern int ripng_interface_address_add (int command, struct zclient *, zebra_size_t,
+ vrf_id_t);
+extern int ripng_interface_address_delete (int command, struct zclient *, zebra_size_t,
+ vrf_id_t);
extern int ripng_network_write (struct vty *, int);