diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2016-04-08 19:32:53 +0000 |
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2016-04-12 20:19:28 -0400 |
| commit | 58255d344034a360de07b4998ff2936a8d2c604d (patch) | |
| tree | 15a70889ce025b9217b845732eaf6d1f2fe9e772 | |
| parent | 88227bbe362c827208541f8bd145bd2cccfb1f59 (diff) | |
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 <vivek@cumulusnetworks.com>
| -rw-r--r-- | lib/if.c | 2 | ||||
| -rw-r--r-- | lib/vrf.c | 37 | ||||
| -rw-r--r-- | lib/vrf.h | 3 | ||||
| -rw-r--r-- | zebra/interface.c | 2 | ||||
| -rw-r--r-- | zebra/zebra_rib.c | 2 |
5 files changed, 4 insertions, 42 deletions
@@ -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; @@ -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) @@ -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); |
