lib: handle bogus VRF backend type

And use an enum...

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
Quentin Young 2020-03-02 18:42:56 -05:00
parent efc7191bbe
commit 7239d3d9e6
3 changed files with 24 additions and 9 deletions

View File

@ -593,10 +593,15 @@ int vrf_get_backend(void)
return vrf_backend;
}
void vrf_configure_backend(int vrf_backend_netns)
int vrf_configure_backend(enum vrf_backend_type backend)
{
vrf_backend = vrf_backend_netns;
if (backend > VRF_BACKEND_MAX)
return -1;
vrf_backend = backend;
vrf_backend_configured = 1;
return 0;
}
int vrf_handler_create(struct vty *vty, const char *vrfname,

View File

@ -101,9 +101,12 @@ RB_PROTOTYPE(vrf_name_head, vrf, name_entry, vrf_name_compare)
DECLARE_QOBJ_TYPE(vrf)
/* Allow VRF with netns as backend */
#define VRF_BACKEND_VRF_LITE 0
#define VRF_BACKEND_NETNS 1
#define VRF_BACKEND_UNKNOWN 2
enum vrf_backend_type {
VRF_BACKEND_VRF_LITE,
VRF_BACKEND_NETNS,
VRF_BACKEND_UNKNOWN,
VRF_BACKEND_MAX,
};
extern struct vrf_id_head vrfs_by_id;
extern struct vrf_name_head vrfs_by_name;
@ -292,10 +295,10 @@ extern void vrf_install_commands(void);
* VRF utilities
*/
/* API for configuring VRF backend
* should be called from zebra only
/*
* API for configuring VRF backend
*/
extern void vrf_configure_backend(int vrf_backend_netns);
extern int vrf_configure_backend(enum vrf_backend_type backend);
extern int vrf_get_backend(void);
extern int vrf_is_backend_netns(void);

View File

@ -3031,7 +3031,14 @@ static void zclient_capability_decode(ZAPI_CALLBACK_ARGS)
uint8_t mpls_enabled;
STREAM_GETL(s, vrf_backend);
vrf_configure_backend(vrf_backend);
if (vrf_backend < 0 || vrf_configure_backend(vrf_backend)) {
flog_err(EC_LIB_ZAPI_ENCODE,
"%s: Garbage VRF backend type: %d\n", __func__,
vrf_backend);
goto stream_failure;
}
memset(&cap, 0, sizeof(cap));
STREAM_GETC(s, mpls_enabled);