]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib: protect newly created vrfs against default vrf naming.
authorPhilippe Guibert <philippe.guibert@6wind.com>
Fri, 22 Jun 2018 14:03:11 +0000 (16:03 +0200)
committerPhilippe Guibert <philippe.guibert@6wind.com>
Tue, 28 Aug 2018 14:23:50 +0000 (16:23 +0200)
Prevent from creating vrf, if the default vrf name is the same as the
vrf to be created.
Also, prevent at startup from creating default vrf with a name already
used in vrf list.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
lib/vrf.c

index 8ae59f50652097f5083a616df0404c230b8a04ee..f74e233877027227cb2d4b0c66adaf0a333439f8 100644 (file)
--- a/lib/vrf.c
+++ b/lib/vrf.c
@@ -39,7 +39,7 @@
 
 /* default VRF ID value used when VRF backend is not NETNS */
 #define VRF_DEFAULT_INTERNAL 0
-#define VRF_DEFAULT_NAME_INTERNAL "Default-IP-Routing-Table"
+#define VRF_DEFAULT_NAME_INTERNAL "default"
 
 DEFINE_MTYPE_STATIC(LIB, VRF, "VRF")
 DEFINE_MTYPE_STATIC(LIB, VRF_BITMAP, "VRF bit-map")
@@ -168,6 +168,13 @@ struct vrf *vrf_get(vrf_id_t vrf_id, const char *name)
         */
        if (name)
                vrf = vrf_lookup_by_name(name);
+       if (vrf && vrf_id != VRF_UNKNOWN
+           && vrf->vrf_id != VRF_UNKNOWN
+           && vrf->vrf_id != vrf_id) {
+               zlog_debug("VRF_GET: avoid %s creation(%u), same name exists (%u)",
+                          name, vrf_id, vrf->vrf_id);
+               return NULL;
+       }
        /* Try to find VRF both by ID and name */
        if (!vrf && vrf_id != VRF_UNKNOWN)
                vrf = vrf_lookup_by_id(vrf_id);
@@ -888,6 +895,7 @@ void vrf_cmd_init(int (*writefunc)(struct vty *vty),
 void vrf_set_default_name(const char *default_name)
 {
        struct vrf *def_vrf;
+       struct vrf *vrf_with_default_name = NULL;
 
        def_vrf = vrf_lookup_by_id(VRF_DEFAULT);
        assert(default_name);