]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib, zebra, pimd: clean up/fix VRF DECLVAR macros 11114/head
authorDavid Lamparter <equinox@opensourcerouting.org>
Thu, 28 Apr 2022 09:06:20 +0000 (11:06 +0200)
committerDavid Lamparter <equinox@opensourcerouting.org>
Thu, 28 Apr 2022 09:09:26 +0000 (11:09 +0200)
There's a common pattern of "get VRF context for CLI node" here, which
first got a helper macro in zebra that then permeated into pimd.

Unfortunately the pimd copy wasn't quite adjusted correctly and thus
caused two coverity warnings (CID 1517453, CID 1517454).

Fix the PIM one, and clean up by providing a common base macro in
`lib/vty.h`.

Also rename the macros (add `_VRF`) to make more clear what they do.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
lib/vty.h
pimd/pim6_cmd.c
pimd/pim_cmd.c
pimd/pim_cmd_common.h
zebra/router-id.c
zebra/zebra_routemap.c
zebra/zebra_vrf.h
zebra/zebra_vty.c

index e42a3b210fef4ea650621edd06cd49c82ed15a03..430579c5a8776caf5b541138425d9029dd2e0750 100644 (file)
--- a/lib/vty.h
+++ b/lib/vty.h
@@ -266,6 +266,15 @@ static inline void vty_push_context(struct vty *vty, int node, uint64_t id)
        struct structname *ptr = VTY_GET_CONTEXT(structname);                  \
        VTY_CHECK_CONTEXT(ptr);
 
+#define VTY_DECLVAR_CONTEXT_VRF(vrfptr)                                        \
+       struct vrf *vrfptr;                                                    \
+       if (vty->node == CONFIG_NODE)                                          \
+               vrfptr = vrf_lookup_by_id(VRF_DEFAULT);                        \
+       else                                                                   \
+               vrfptr = VTY_GET_CONTEXT(vrf);                                 \
+       VTY_CHECK_CONTEXT(vrfptr);                                             \
+       MACRO_REQUIRE_SEMICOLON() /* end */
+
 /* XPath macros. */
 #define VTY_PUSH_XPATH(nodeval, value)                                         \
        do {                                                                   \
index 185ec33f9c55cb45b8ff7f2aa69357f1cfe343b3..a6c2ad6cf0e3d52946744a8751b2c9922e1c6a80 100644 (file)
@@ -660,8 +660,11 @@ DEFPY (ipv6_mld_group_watermark,
        "Configure group limit for watermark warning\n"
        "Group count to generate watermark warning\n")
 {
-       PIM_DECLVAR_CONTEXT(vrf, pim);
+       PIM_DECLVAR_CONTEXT_VRF(vrf, pim);
+
        /* TBD Depends on MLD data structure changes */
+       (void)pim;
+
        return CMD_SUCCESS;
 }
 
@@ -674,8 +677,11 @@ DEFPY (no_ipv6_mld_group_watermark,
        "Unconfigure group limit for watermark warning\n"
        IGNORED_IN_NO_STR)
 {
-       PIM_DECLVAR_CONTEXT(vrf, pim);
+       PIM_DECLVAR_CONTEXT_VRF(vrf, pim);
+
        /* TBD Depends on MLD data structure changes */
+       (void)pim;
+
        return CMD_SUCCESS;
 }
 
index 75fc903020344a28183f606c78e15b2e1d18f1d0..54c85bdbb1be46e302278f1e97d777643a5442f3 100644 (file)
@@ -4848,7 +4848,7 @@ DEFPY (ip_igmp_group_watermark,
        "Configure group limit for watermark warning\n"
        "Group count to generate watermark warning\n")
 {
-       PIM_DECLVAR_CONTEXT(vrf, pim);
+       PIM_DECLVAR_CONTEXT_VRF(vrf, pim);
        pim->igmp_watermark_limit = limit;
 
        return CMD_SUCCESS;
@@ -4863,7 +4863,7 @@ DEFPY (no_ip_igmp_group_watermark,
        "Unconfigure group limit for watermark warning\n"
        IGNORED_IN_NO_STR)
 {
-       PIM_DECLVAR_CONTEXT(vrf, pim);
+       PIM_DECLVAR_CONTEXT_VRF(vrf, pim);
        pim->igmp_watermark_limit = 0;
 
        return CMD_SUCCESS;
index 9fac2c111b7dc5e14bb20ac3da1658230707fa66..74477fd19b271896ae35894b3e2c51657cfcb50e 100644 (file)
@@ -112,9 +112,9 @@ void show_multicast_interfaces(struct pim_instance *pim, struct vty *vty,
 /*
  * Special Macro to allow us to get the correct pim_instance;
  */
-#define PIM_DECLVAR_CONTEXT(A, B)                                              \
-       struct vrf *A = VTY_GET_CONTEXT(vrf);                                  \
-       struct pim_instance *B =                                               \
-               (vrf) ? vrf->info : pim_get_pim_instance(VRF_DEFAULT);         \
-       vrf = (vrf) ? vrf : pim->vrf
+#define PIM_DECLVAR_CONTEXT_VRF(vrfptr, pimptr)                                \
+       VTY_DECLVAR_CONTEXT_VRF(vrfptr);                                       \
+       struct pim_instance *pimptr = vrfptr->info;                            \
+       MACRO_REQUIRE_SEMICOLON() /* end */
+
 #endif /* PIM_CMD_COMMON_H */
index ea438b436706fbff1adf1568f26003dc1ff389e3..9f56cf0e6af93824e75da2475a39d6f47c11b4a9 100644 (file)
@@ -342,7 +342,7 @@ DEFUN (ip_router_id_in_vrf,
        "Manually set the router-id\n"
        "IP address to use for router-id\n")
 {
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
        int idx = 0;
        struct prefix rid;
 
@@ -372,7 +372,7 @@ DEFUN (ipv6_router_id_in_vrf,
        "Manually set the IPv6 router-id\n"
        "IPV6 address to use for router-id\n")
 {
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
        int idx = 0;
        struct prefix rid;
 
@@ -458,7 +458,7 @@ DEFUN (no_ip_router_id_in_vrf,
        "Remove the manually configured router-id\n"
        "IP address to use for router-id\n")
 {
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
 
        struct prefix rid;
 
@@ -486,7 +486,7 @@ DEFUN (no_ipv6_router_id_in_vrf,
        "Remove the manually configured IPv6 router-id\n"
        "IPv6 address to use for router-id\n")
 {
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
 
        struct prefix rid;
 
index e99cb761190598c2b63f64331dd737e620c32ec9..2cc84a1f7fcbb6710cf6432e9da5948fc6aba229 100644 (file)
@@ -638,7 +638,7 @@ DEFPY_YANG (ip_protocol,
        assert(proto);
        assert(rmap);
 
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
 
        if (!zvrf)
                return CMD_WARNING;
@@ -672,7 +672,7 @@ DEFPY_YANG (no_ip_protocol,
 
        assert(proto);
 
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
 
        if (!zvrf)
                return CMD_WARNING;
@@ -719,7 +719,7 @@ DEFPY_YANG (ipv6_protocol,
        assert(rmap);
        assert(proto);
 
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
 
        if (!zvrf)
                return CMD_WARNING;
@@ -753,7 +753,7 @@ DEFPY_YANG (no_ipv6_protocol,
 
        assert(proto);
 
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
 
        if (!zvrf)
                return CMD_WARNING;
@@ -801,7 +801,7 @@ DEFPY_YANG (ip_protocol_nht_rmap,
        assert(proto);
        assert(rmap);
 
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
 
        if (!zvrf)
                return CMD_WARNING;
@@ -835,7 +835,7 @@ DEFPY_YANG (no_ip_protocol_nht_rmap,
 
        assert(proto);
 
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
 
        if (!zvrf)
                return CMD_WARNING;
@@ -883,7 +883,7 @@ DEFPY_YANG (ipv6_protocol_nht_rmap,
        assert(rmap);
        assert(proto);
 
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
 
        if (!zvrf)
                return CMD_WARNING;
@@ -917,7 +917,7 @@ DEFPY_YANG (no_ipv6_protocol_nht_rmap,
 
        assert(proto);
 
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
 
        if (!zvrf)
                return CMD_WARNING;
index a24a008b7611850f43552bba284531771dfb849f..21e7f286f36811a617e6dc9fa6953748536862e7 100644 (file)
@@ -192,14 +192,10 @@ struct zebra_vrf {
 /*
  * special macro to allow us to get the correct zebra_vrf
  */
-#define ZEBRA_DECLVAR_CONTEXT(A, B)                                            \
-       struct vrf *A;                                                         \
-       if (vty->node == CONFIG_NODE)                                          \
-               A = vrf_lookup_by_id(VRF_DEFAULT);                             \
-       else                                                                   \
-               A = VTY_GET_CONTEXT(vrf);                                      \
-       VTY_CHECK_CONTEXT(A);                                                  \
-       struct zebra_vrf *B = A->info
+#define ZEBRA_DECLVAR_CONTEXT_VRF(vrfptr, zvrfptr)                             \
+       VTY_DECLVAR_CONTEXT_VRF(vrfptr);                                       \
+       struct zebra_vrf *zvrfptr = vrfptr->info;                              \
+       MACRO_REQUIRE_SEMICOLON() /* end */
 
 static inline vrf_id_t zvrf_id(struct zebra_vrf *zvrf)
 {
index 22c65e3c0ca761bcaadfa915149e248bab59e00e..709d6e0a5c7d790df579d8ba66ec416799d7ef20 100644 (file)
@@ -1413,7 +1413,7 @@ DEFUN (ip_nht_default_route,
        "Filter Next Hop tracking route resolution\n"
        "Resolve via default route\n")
 {
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
 
        if (!zvrf)
                return CMD_WARNING;
@@ -1752,7 +1752,7 @@ DEFUN (no_ip_nht_default_route,
        "Filter Next Hop tracking route resolution\n"
        "Resolve via default route\n")
 {
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
 
        if (!zvrf)
                return CMD_WARNING;
@@ -1772,7 +1772,7 @@ DEFUN (ipv6_nht_default_route,
        "Filter Next Hop tracking route resolution\n"
        "Resolve via default route\n")
 {
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
 
        if (!zvrf)
                return CMD_WARNING;
@@ -1793,7 +1793,7 @@ DEFUN (no_ipv6_nht_default_route,
        "Filter Next Hop tracking route resolution\n"
        "Resolve via default route\n")
 {
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
 
        if (!zvrf)
                return CMD_WARNING;
@@ -2950,7 +2950,7 @@ DEFUN (vrf_vni_mapping,
 {
        int filter = 0;
 
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
 
        assert(vrf);
        assert(zvrf);
@@ -2979,7 +2979,7 @@ DEFUN (no_vrf_vni_mapping,
 {
        int filter = 0;
 
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
        vni_t vni = strtoul(argv[2]->arg, NULL, 10);
 
        assert(vrf);
@@ -4395,7 +4395,7 @@ DEFUN(ip_table_range, ip_table_range_cmd,
       "Start Routing Table\n"
       "End Routing Table\n")
 {
-       ZEBRA_DECLVAR_CONTEXT(vrf, zvrf);
+       ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf);
 
        if (!zvrf)
                return CMD_WARNING;