]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib, zebra: Refactor vrf creation a bit more
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 8 Apr 2016 19:32:53 +0000 (19:32 +0000)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 13 Apr 2016 00:19:28 +0000 (20:19 -0400)
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>
lib/if.c
lib/vrf.c
lib/vrf.h
zebra/interface.c
zebra/zebra_rib.c

index 1d0518956a8a96cc577ca16be032795f04393f60..dd70ac2d45345e1106e963cf40542b08added78b 100644 (file)
--- 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;
index edba3547c59f53dc5089bb75be3e9ffccf6fb656..f2eb551f8277e4f1569b9998082324ccdad4471b 100644 (file)
--- 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)
index 79741d3b0e649a9d6ae0d58bebb6256da07aea49..b81873b0ff2f1534fa946185c9c8f260d01df6d3 100644 (file)
--- 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 *);
index 9fd31aa7de14305854f63eeadeef2ddca924412b..b47d03929f90b92f33e0e211566b8cef0f770ceb 100644 (file)
@@ -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;
 }
 
 
index 8492222ad810cac959649ea3e2a8e17d39075fe8..5e0e8149c9ac011e15ac539a72907dada560931c 100644 (file)
@@ -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);