/* 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;
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;
}
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 */
if (!vrf)
zlog_warn ("%s: vrf not found", __func__);
- vrf_delete_update(vrf);
+ vrf_delete_update (vrf);
+ vrf_delete (vrf);
}
}
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));