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:
Philippe Guibert 2018-06-22 13:54:47 +02:00
parent 9f0cf8f435
commit c200f5e1e4
2 changed files with 35 additions and 6 deletions

View File

@ -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
*/

View File

@ -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);