]> git.puffer.fish Git - matthieu/frr.git/commitdiff
lib: handle bogus VRF backend type
authorQuentin Young <qlyoung@cumulusnetworks.com>
Mon, 2 Mar 2020 23:42:56 +0000 (18:42 -0500)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Mon, 13 Apr 2020 17:25:25 +0000 (13:25 -0400)
And use an enum...

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
lib/vrf.c
lib/vrf.h
lib/zclient.c

index 31ea2d6c4c34c98ebbbc436020363227fd89eb8c..fc5aa8f2b6af707be0d14335877e8edeb1adaa8b 100644 (file)
--- 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,
index f231d2433fbc9b769eb75382a0750eb9605820c0..2dc26488373b2a5a1f711872300884266cb92593 100644 (file)
--- 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);
 
index b32be1c310c7d6ff8368ff82f1be6fe92174ee91..673e71c5154c0b943d2db9d268e6c73040d5fb6d 100644 (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);