From 58255d344034a360de07b4998ff2936a8d2c604d Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Fri, 8 Apr 2016 19:32:53 +0000 Subject: [PATCH] lib, zebra: Refactor vrf creation a bit more Create the idea of a VRF_UNKNOWN, this is for a vrf where we don't yet have the vrf_id for it yet. Refactor the vrf_create code out of existence. We had two code paths vrf_create and vrf_get. We should use vrf_get to create the new vrf since XXX_get() creates the data structures now. Signed-off-by: Donald Sharp Reviewed-by: Vivek Venkatraman --- lib/if.c | 2 +- lib/vrf.c | 37 ------------------------------------- lib/vrf.h | 3 +-- zebra/interface.c | 2 +- zebra/zebra_rib.c | 2 +- 5 files changed, 4 insertions(+), 42 deletions(-) diff --git a/lib/if.c b/lib/if.c index 1d0518956a..dd70ac2d45 100644 --- a/lib/if.c +++ b/lib/if.c @@ -848,7 +848,7 @@ DEFUN (vrf, return CMD_WARNING; } - vrfp = vrf_get_by_name (argv[0]); + vrfp = vrf_get (VRF_UNKNOWN, argv[0]); vty->index = vrfp; vty->node = VRF_NODE; diff --git a/lib/vrf.c b/lib/vrf.c index edba3547c5..f2eb551f82 100644 --- a/lib/vrf.c +++ b/lib/vrf.c @@ -70,43 +70,6 @@ vrf_list_lookup_by_name (const char *name) return NULL; } -/* Create new vrf structure. */ -struct vrf * -vrf_create (const char *name) -{ - struct vrf *vrfp; - - vrfp = XCALLOC (MTYPE_VRF, sizeof (struct vrf)); - - assert (name); - - zlog_debug ("Vrf_create: %s", name); - strncpy (vrfp->name, name, VRF_NAMSIZ); - vrfp->name[VRF_NAMSIZ] = '\0'; - - if (vrf_list_lookup_by_name (vrfp->name) == NULL) - listnode_add_sort (vrf_list, vrfp); - else - zlog_err("vrf_create(%s): corruption detected -- vrf with this " - "name exists already with vrf-id %u!", vrfp->name, vrfp->vrf_id); - - UNSET_FLAG(vrfp->status, VRF_ACTIVE); - - if (vrf_master.vrf_new_hook) - (*vrf_master.vrf_new_hook) (0, name, &vrfp->info); - - return vrfp; -} - -struct vrf * -vrf_get_by_name (const char *name) -{ - struct vrf *vrfp; - - return ((vrfp = vrf_list_lookup_by_name (name)) != NULL) ? vrfp : - vrf_create (name); -} - /* Build the table key */ static void vrf_build_key (vrf_id_t vrf_id, struct prefix *p) diff --git a/lib/vrf.h b/lib/vrf.h index 79741d3b0e..b81873b0ff 100644 --- a/lib/vrf.h +++ b/lib/vrf.h @@ -30,6 +30,7 @@ /* The default VRF ID */ #define VRF_DEFAULT 0 +#define VRF_UNKNOWN UINT16_MAX /* Pending: May need to refine this. */ #ifndef IFLA_VRF_MAX @@ -109,9 +110,7 @@ typedef void * vrf_iter_t; extern struct vrf *vrf_lookup (vrf_id_t); extern struct vrf *vrf_lookup_by_name (const char *); extern struct vrf *vrf_list_lookup_by_name (const char *); -extern struct vrf *vrf_get_by_name (const char *); extern struct vrf *vrf_get (vrf_id_t, const char *); -extern struct vrf *vrf_create (const char *); extern void vrf_delete (struct vrf *); extern int vrf_enable (struct vrf *); extern vrf_id_t vrf_name_to_id (const char *); diff --git a/zebra/interface.c b/zebra/interface.c index 9fd31aa7de..b47d03929f 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -757,7 +757,7 @@ vrf_delete_update (struct vrf *vrfp) while processing the deletion. Each client daemon is responsible for setting vrf-id to IFINDEX_INTERNAL after processing the interface deletion message. */ - vrfp->vrf_id = 0; + vrfp->vrf_id = VRF_UNKNOWN; } diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index 8492222ad8..5e0e8149c9 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -1284,7 +1284,7 @@ rib_process (struct route_node *rn) char buf[INET6_ADDRSTRLEN]; rib_dest_t *dest; struct zebra_vrf *zvrf = NULL; - vrf_id_t vrf_id = 0; + vrf_id_t vrf_id = VRF_UNKNOWN; assert (rn); -- 2.39.5