summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@cumulusnetworks.com>2020-03-02 18:42:56 -0500
committerQuentin Young <qlyoung@cumulusnetworks.com>2020-04-13 13:25:25 -0400
commit7239d3d9e6c131c859dae627c1238b5838a5ab8e (patch)
treee1c14fd330b2e8ad079ae9904d7166864cb766a2 /lib
parentefc7191bbef83ff619dcafcd6c91d19dd214ee72 (diff)
lib: handle bogus VRF backend type
And use an enum... Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/vrf.c9
-rw-r--r--lib/vrf.h15
-rw-r--r--lib/zclient.c9
3 files changed, 24 insertions, 9 deletions
diff --git a/lib/vrf.c b/lib/vrf.c
index 31ea2d6c4c..fc5aa8f2b6 100644
--- a/lib/vrf.c
+++ b/lib/vrf.c
@@ -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,
diff --git a/lib/vrf.h b/lib/vrf.h
index f231d2433f..2dc2648837 100644
--- a/lib/vrf.h
+++ b/lib/vrf.h
@@ -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);
diff --git a/lib/zclient.c b/lib/zclient.c
index b32be1c310..673e71c515 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -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);