From: Philippe Guibert Date: Fri, 22 Jun 2018 14:03:11 +0000 (+0200) Subject: lib: protect newly created vrfs against default vrf naming. X-Git-Tag: frr-6.1-dev~10^2~4 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=dd1147028ad9e461644116b68b38f31b26b4bd2d;p=matthieu%2Ffrr.git lib: protect newly created vrfs against default vrf naming. 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 --- diff --git a/lib/vrf.c b/lib/vrf.c index 8ae59f5065..f74e233877 100644 --- 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);