mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-06-27 14:37:14 +00:00
Merge pull request #3370 from pguibert6WIND/default_vrf_initialization
Default vrf initialization
This commit is contained in:
commit
a1f0a9ac23
12
lib/vrf.c
12
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 *def_vrf;
|
||||||
struct vrf *vrf_with_default_name = NULL;
|
struct vrf *vrf_with_default_name = NULL;
|
||||||
|
static bool def_vrf_forced;
|
||||||
|
|
||||||
def_vrf = vrf_lookup_by_id(VRF_DEFAULT);
|
def_vrf = vrf_lookup_by_id(VRF_DEFAULT);
|
||||||
assert(default_name);
|
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) {
|
if (vrf_with_default_name && vrf_with_default_name != def_vrf) {
|
||||||
/* vrf name already used by an other VRF */
|
/* vrf name already used by an other VRF */
|
||||||
zlog_debug("VRF: %s, avoid changing name to %s, same name exists (%u)",
|
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);
|
snprintf(vrf_default_name, VRF_NAMSIZ, "%s", default_name);
|
||||||
if (def_vrf) {
|
if (def_vrf) {
|
||||||
|
if (force)
|
||||||
|
def_vrf_forced = true;
|
||||||
RB_REMOVE(vrf_name_head, &vrfs_by_name, def_vrf);
|
RB_REMOVE(vrf_name_head, &vrfs_by_name, def_vrf);
|
||||||
strlcpy(def_vrf->data.l.netns_name,
|
strlcpy(def_vrf->data.l.netns_name,
|
||||||
vrf_default_name, NS_NAMSIZ);
|
vrf_default_name, NS_NAMSIZ);
|
||||||
|
@ -236,7 +236,7 @@ extern vrf_id_t vrf_get_default_id(void);
|
|||||||
/* The default VRF ID */
|
/* The default VRF ID */
|
||||||
#define VRF_DEFAULT vrf_get_default_id()
|
#define VRF_DEFAULT vrf_get_default_id()
|
||||||
|
|
||||||
extern void vrf_set_default_name(const char *default_name);
|
extern void vrf_set_default_name(const char *default_name, bool force);
|
||||||
extern const char *vrf_get_default_name(void);
|
extern const char *vrf_get_default_name(void);
|
||||||
#define VRF_DEFAULT_NAME vrf_get_default_name()
|
#define VRF_DEFAULT_NAME vrf_get_default_name()
|
||||||
|
|
||||||
|
@ -1370,7 +1370,7 @@ static void zclient_vrf_add(struct zclient *zclient, vrf_id_t vrf_id)
|
|||||||
memcpy(vrf->data.l.netns_name, data.l.netns_name, NS_NAMSIZ);
|
memcpy(vrf->data.l.netns_name, data.l.netns_name, NS_NAMSIZ);
|
||||||
/* overwrite default vrf */
|
/* overwrite default vrf */
|
||||||
if (vrf_id == VRF_DEFAULT)
|
if (vrf_id == VRF_DEFAULT)
|
||||||
vrf_set_default_name(vrfname_tmp);
|
vrf_set_default_name(vrfname_tmp, false);
|
||||||
vrf_enable(vrf);
|
vrf_enable(vrf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,6 +259,7 @@ int main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
// int batch_mode = 0;
|
// int batch_mode = 0;
|
||||||
char *zserv_path = NULL;
|
char *zserv_path = NULL;
|
||||||
|
char *vrf_default_name_configured = NULL;
|
||||||
/* Socket to external label manager */
|
/* Socket to external label manager */
|
||||||
char *lblmgr_path = NULL;
|
char *lblmgr_path = NULL;
|
||||||
struct sockaddr_storage dummy;
|
struct sockaddr_storage dummy;
|
||||||
@ -339,7 +340,7 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
vrf_set_default_name(optarg);
|
vrf_default_name_configured = optarg;
|
||||||
break;
|
break;
|
||||||
case 'z':
|
case 'z':
|
||||||
zserv_path = optarg;
|
zserv_path = optarg;
|
||||||
@ -407,7 +408,9 @@ int main(int argc, char **argv)
|
|||||||
* Initialize NS( and implicitly the VRF module), and make kernel
|
* Initialize NS( and implicitly the VRF module), and make kernel
|
||||||
* routing socket. */
|
* routing socket. */
|
||||||
zebra_ns_init();
|
zebra_ns_init();
|
||||||
|
if (vrf_default_name_configured)
|
||||||
|
vrf_set_default_name(vrf_default_name_configured,
|
||||||
|
true);
|
||||||
zebra_vty_init();
|
zebra_vty_init();
|
||||||
access_list_init();
|
access_list_init();
|
||||||
prefix_list_init();
|
prefix_list_init();
|
||||||
|
@ -219,7 +219,7 @@ static int zebra_ns_ready_read(struct thread *t)
|
|||||||
zlog_warn(
|
zlog_warn(
|
||||||
"NS notify : NS %s is default VRF."
|
"NS notify : NS %s is default VRF."
|
||||||
" Updating VRF Name", basename(netnspath));
|
" Updating VRF Name", basename(netnspath));
|
||||||
vrf_set_default_name(basename(netnspath));
|
vrf_set_default_name(basename(netnspath), false);
|
||||||
return zebra_ns_continue_read(zns_info, 1);
|
return zebra_ns_continue_read(zns_info, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -314,7 +314,7 @@ void zebra_ns_notify_parse(void)
|
|||||||
zlog_warn(
|
zlog_warn(
|
||||||
"NS notify : NS %s is default VRF."
|
"NS notify : NS %s is default VRF."
|
||||||
" Updating VRF Name", dent->d_name);
|
" Updating VRF Name", dent->d_name);
|
||||||
vrf_set_default_name(dent->d_name);
|
vrf_set_default_name(dent->d_name, false);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
zebra_ns_notify_create_context_from_entry_name(dent->d_name);
|
zebra_ns_notify_create_context_from_entry_name(dent->d_name);
|
||||||
|
Loading…
Reference in New Issue
Block a user