]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: Some small modifications to actually delete the vrf
authorDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 22 Mar 2016 21:03:04 +0000 (17:03 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 23 Mar 2016 12:30:08 +0000 (05:30 -0700)
zebra was not actually deleting the vrf passed in.

Ticket: CM-9412
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
zebra/main.c
zebra/rt_netlink.c

index 3590eed26a943c99884db663a1b8c5d5737a2703..b3571c26f41e31c9a7f760cc9722bf87bbe96b29 100644 (file)
@@ -296,6 +296,12 @@ zebra_ns_disable (ns_id_t ns_id, void **info)
 /* Callback upon disabling a VRF. */
 static int
 zebra_vrf_disable (vrf_id_t vrf_id, const char *name, void **info)
+{
+  return 0;
+}
+
+static int
+zebra_vrf_delete (vrf_id_t vrf_id, const char *name, void **info)
 {
   struct zebra_vrf *zvrf = (struct zebra_vrf *) (*info);
   struct listnode *list_node;
@@ -317,6 +323,8 @@ zebra_vrf_disable (vrf_id_t vrf_id, const char *name, void **info)
   list_delete_all_node (zvrf->rid_all_sorted_list);
   list_delete_all_node (zvrf->rid_lo_sorted_list);
 
+  XFREE (MTYPE_ZEBRA_VRF, zvrf);
+
   return 0;
 }
 
@@ -329,6 +337,7 @@ zebra_vrf_init (void)
   vrf_add_hook (VRF_NEW_HOOK, zebra_vrf_new);
   vrf_add_hook (VRF_ENABLE_HOOK, zebra_vrf_enable);
   vrf_add_hook (VRF_DISABLE_HOOK, zebra_vrf_disable);
+  vrf_add_hook (VRF_DELETE_HOOK, zebra_vrf_delete);
   
   /* Default NS initialization */
   
index 6258c4bf65365ad9590c5f96968224df3c8685a5..ffab76bbe625a514653138f199fc67cab27dbc8b 100644 (file)
@@ -581,7 +581,8 @@ netlink_vrf_change (struct nlmsghdr *h, struct rtattr *tb, const char *name)
       if (!vrf)
         zlog_warn ("%s: vrf not found", __func__);
 
-      vrf_delete_update(vrf);
+      vrf_delete_update (vrf);
+      vrf_delete (vrf);
     }
 }
 
@@ -1528,7 +1529,7 @@ rta_addattr_l (struct rtattr *rta, int maxlen, int type, void *data, int alen)
 
   len = RTA_LENGTH (alen);
 
-  if (RTA_ALIGN (rta->rta_len) + len > maxlen)
+  if ((int)RTA_ALIGN (rta->rta_len) + len > maxlen)
     return -1;
 
   subrta = (struct rtattr *) (((char *) rta) + RTA_ALIGN (rta->rta_len));