summaryrefslogtreecommitdiff
path: root/lib/vrf.c
diff options
context:
space:
mode:
authorRenato Westphal <renato@openbsd.org>2018-12-03 21:30:00 -0200
committerGitHub <noreply@github.com>2018-12-03 21:30:00 -0200
commita1f0a9ac23cc0bcc456e15e5b69f23ad817f8b6e (patch)
tree4c75f5a29fdc19676e73500d9b9fdf0181972258 /lib/vrf.c
parentb0f59f90ff7db1631f7423969f9c863f38eacc84 (diff)
parent53af0706e2175111ccf94d8505f846a3b2cda467 (diff)
Merge pull request #3370 from pguibert6WIND/default_vrf_initialization
Default vrf initialization
Diffstat (limited to 'lib/vrf.c')
-rw-r--r--lib/vrf.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/vrf.c b/lib/vrf.c
index 046e468f20..8409a1c9a1 100644
--- a/lib/vrf.c
+++ b/lib/vrf.c
@@ -894,14 +894,20 @@ void vrf_cmd_init(int (*writefunc)(struct vty *vty),
}
}
-void vrf_set_default_name(const char *default_name)
+void vrf_set_default_name(const char *default_name, bool force)
{
struct vrf *def_vrf;
struct vrf *vrf_with_default_name = NULL;
+ static bool def_vrf_forced;
def_vrf = vrf_lookup_by_id(VRF_DEFAULT);
assert(default_name);
- vrf_with_default_name = vrf_lookup_by_name(default_name);
+ if (def_vrf && !force && def_vrf_forced) {
+ zlog_debug("VRF: %s, avoid changing name to %s, previously forced (%u)",
+ def_vrf->name, default_name,
+ def_vrf->vrf_id);
+ return;
+ }
if (vrf_with_default_name && vrf_with_default_name != def_vrf) {
/* vrf name already used by an other VRF */
zlog_debug("VRF: %s, avoid changing name to %s, same name exists (%u)",
@@ -911,6 +917,8 @@ void vrf_set_default_name(const char *default_name)
}
snprintf(vrf_default_name, VRF_NAMSIZ, "%s", default_name);
if (def_vrf) {
+ if (force)
+ def_vrf_forced = true;
RB_REMOVE(vrf_name_head, &vrfs_by_name, def_vrf);
strlcpy(def_vrf->data.l.netns_name,
vrf_default_name, NS_NAMSIZ);