summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2016-04-08 19:32:53 +0000
committerDonald Sharp <sharpd@cumulusnetworks.com>2016-04-12 20:19:28 -0400
commit58255d344034a360de07b4998ff2936a8d2c604d (patch)
tree15a70889ce025b9217b845732eaf6d1f2fe9e772
parent88227bbe362c827208541f8bd145bd2cccfb1f59 (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.c2
-rw-r--r--lib/vrf.c37
-rw-r--r--lib/vrf.h3
-rw-r--r--zebra/interface.c2
-rw-r--r--zebra/zebra_rib.c2
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);