]> git.puffer.fish Git - mirror/frr.git/commitdiff
Quagga: vrf_id not being set correctly
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 20 Nov 2015 19:36:46 +0000 (11:36 -0800)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 20 Nov 2015 19:36:46 +0000 (11:36 -0800)
Several routing protocols use the zapi_ipv[4|6] api to talk to
zebra.  There are some instances where the api.vrf_id was not
being set.  Since the practice is to declare the api structure
on the stack, the data inside is not being set to 0.  As
such random vrf_id values were being passed to zebrad
causing rage and confusion.

Ticket: CM-8287
Reviewed-by: CCR-3841
Testing:  Test suites no longer crashing and burning

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
babeld/kernel.c
ospf6d/ospf6_zebra.c
ripd/rip_zebra.c
ripngd/ripng_zebra.c

index efbb700050dea77f2265a272c4c31a3a600903fb..061d66925663c35ac37dc40b62a7a838982ea9fe 100644 (file)
@@ -177,6 +177,7 @@ kernel_route_v4(int add,
     quagga_prefix.prefixlen = plen - 96; /* our plen is for v4mapped's addr */
     apply_mask_ipv4(&quagga_prefix);
 
+    api.vrf_id = VRF_DEFAULT;
     api.type  = ZEBRA_ROUTE_BABEL;
     api.flags = 0;
     api.message = 0;
@@ -229,6 +230,7 @@ kernel_route_v6(int add, const unsigned char *pref, unsigned short plen,
     quagga_prefix.prefixlen = plen;
     apply_mask_ipv6(&quagga_prefix);
 
+    api.vrf_id = VRF_DEFAULT;
     api.type  = ZEBRA_ROUTE_BABEL;
     api.flags = 0;
     api.message = 0;
index b3e18bfd3ea579ccc2973eccc536eea03c676f8b..7b756d152ae7e4cd319bd597f73a7244b240429f 100644 (file)
@@ -517,6 +517,7 @@ ospf6_zebra_add_discard (struct ospf6_route *request)
     {
       if (!CHECK_FLAG (request->flag, OSPF6_ROUTE_BLACKHOLE_ADDED))
        {
+         api.vrf_id = VRF_DEFAULT;
          api.type = ZEBRA_ROUTE_OSPF6;
          api.flags = ZEBRA_FLAG_BLACKHOLE;
          api.instance = 0;
@@ -561,7 +562,7 @@ ospf6_zebra_delete_discard (struct ospf6_route *request)
     {
       if (CHECK_FLAG (request->flag, OSPF6_ROUTE_BLACKHOLE_ADDED))
        {
-
+         api.vrf_id = VRF_DEFAULT;
          api.type = ZEBRA_ROUTE_OSPF6;
          api.flags = ZEBRA_FLAG_BLACKHOLE;
          api.instance = 0;
index 245cb66c47934e2228b9e2f59306714f67ab35b6..4fc0e00aa9a45074431fdd72594d2735d62e1821 100644 (file)
@@ -70,13 +70,14 @@ rip_zebra_ipv4_add (struct prefix_ipv4 *p, struct in_addr *nexthop,
 }
 
 void
-rip_zebra_ipv4_delete (struct prefix_ipv4 *p, struct in_addr *nexthop, 
+rip_zebra_ipv4_delete (struct prefix_ipv4 *p, struct in_addr *nexthop,
                       u_int32_t metric)
 {
   struct zapi_ipv4 api;
 
   if (vrf_bitmap_check (zclient->redist[AFI_IP][ZEBRA_ROUTE_RIP], VRF_DEFAULT))
     {
+      api.vrf_id = VRF_DEFAULT;
       api.type = ZEBRA_ROUTE_RIP;
       api.instance = 0;
       api.flags = 0;
index e83e36bf26a94e917a9f5afbf1ef0ff38fe9db8b..ef07878e9c6ab373b2be6eecc498d5edf15534cc 100644 (file)
@@ -69,6 +69,7 @@ ripng_zebra_ipv6_delete (struct prefix_ipv6 *p, struct in6_addr *nexthop,
 
   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;