mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-04 13:31:48 +00:00
lib: offer an API to get and set default vrf name
The get API is used each time the VRF_DEFAULT_NAME macro is used. The set API is not yet used. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
This commit is contained in:
parent
9f0cf8f435
commit
c200f5e1e4
35
lib/vrf.c
35
lib/vrf.c
@ -39,6 +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_MTYPE_STATIC(LIB, VRF, "VRF")
|
||||
DEFINE_MTYPE_STATIC(LIB, VRF_BITMAP, "VRF bit-map")
|
||||
@ -56,6 +57,7 @@ struct vrf_name_head vrfs_by_name = RB_INITIALIZER(&vrfs_by_name);
|
||||
|
||||
static int vrf_backend;
|
||||
static struct zebra_privs_t *vrf_daemon_privs;
|
||||
static char vrf_default_name[VRF_NAMSIZ] = VRF_DEFAULT_NAME_INTERNAL;
|
||||
|
||||
/*
|
||||
* Turn on/off debug code
|
||||
@ -876,12 +878,37 @@ void vrf_cmd_init(int (*writefunc)(struct vty *vty),
|
||||
}
|
||||
}
|
||||
|
||||
void vrf_set_default_name(const char *default_name)
|
||||
{
|
||||
struct vrf *def_vrf;
|
||||
|
||||
def_vrf = vrf_lookup_by_id(VRF_DEFAULT);
|
||||
assert(default_name);
|
||||
vrf_with_default_name = vrf_lookup_by_name(default_name);
|
||||
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)",
|
||||
vrf_with_default_name->name, default_name,
|
||||
vrf_with_default_name->vrf_id);
|
||||
return;
|
||||
}
|
||||
snprintf(vrf_default_name, VRF_NAMSIZ, "%s", default_name);
|
||||
if (def_vrf) {
|
||||
RB_REMOVE(vrf_name_head, &vrfs_by_name, def_vrf);
|
||||
strlcpy(def_vrf->data.l.netns_name,
|
||||
vrf_default_name, NS_NAMSIZ);
|
||||
strlcpy(def_vrf->name, vrf_default_name, sizeof(def_vrf->name));
|
||||
RB_INSERT(vrf_name_head, &vrfs_by_name, def_vrf);
|
||||
}
|
||||
}
|
||||
|
||||
const char *vrf_get_default_name(void)
|
||||
{
|
||||
return vrf_default_name;
|
||||
}
|
||||
|
||||
vrf_id_t vrf_get_default_id(void)
|
||||
{
|
||||
struct vrf *vrf = vrf_lookup_by_name(VRF_DEFAULT_NAME);
|
||||
|
||||
if (vrf)
|
||||
return vrf->vrf_id;
|
||||
/* backend netns is only known by zebra
|
||||
* for other daemons, we return VRF_DEFAULT_INTERNAL
|
||||
*/
|
||||
|
@ -41,8 +41,6 @@ enum { IFLA_VRF_UNSPEC, IFLA_VRF_TABLE, __IFLA_VRF_MAX };
|
||||
#define VRF_NAMSIZ 36
|
||||
#define NS_NAMSIZ 16
|
||||
|
||||
#define VRF_DEFAULT_NAME "Default-IP-Routing-Table"
|
||||
|
||||
/*
|
||||
* The command strings
|
||||
*/
|
||||
@ -236,6 +234,10 @@ extern vrf_id_t vrf_get_default_id(void);
|
||||
/* The default VRF ID */
|
||||
#define VRF_DEFAULT vrf_get_default_id()
|
||||
|
||||
extern void vrf_set_default_name(const char *default_name);
|
||||
extern const char *vrf_get_default_name(void);
|
||||
#define VRF_DEFAULT_NAME vrf_get_default_name()
|
||||
|
||||
/* VRF is mapped on netns or not ? */
|
||||
int vrf_is_mapped_on_netns(struct vrf *vrf);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user