]> git.proxmox.com Git - mirror_frr.git/commitdiff
pimd: move & deploy pim_addr_cmp() helper
authorDavid Lamparter <equinox@opensourcerouting.org>
Wed, 5 Jan 2022 14:55:00 +0000 (15:55 +0100)
committerDavid Lamparter <equinox@opensourcerouting.org>
Mon, 17 Jan 2022 13:08:29 +0000 (14:08 +0100)
Comparing `s_addr` isn't cutting it for IPv6 support.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
pimd/pim_addr.h
pimd/pim_cmd.c
pimd/pim_ifchannel.c
pimd/pim_jp_agg.c
pimd/pim_msdp.c
pimd/pim_str.h
pimd/pim_upstream.c

index b439695530b96199940a49b2a74b1129b9765e3a..657bea39e621e4f8bea677a22027b4e458c4a044 100644 (file)
@@ -41,6 +41,11 @@ static inline bool pim_addr_is_any(pim_addr addr)
        return memcmp(&addr, &zero, sizeof(zero)) == 0;
 }
 
+static inline int pim_addr_cmp(pim_addr a, pim_addr b)
+{
+       return memcmp(&a, &b, sizeof(a));
+}
+
 /* don't use this struct directly, use the pim_sgaddr typedef */
 struct _pim_sgaddr {
        pim_addr grp;
index b365370f9d88498d43e716b94b2f85e4485eecb0..2a50a54a7c21529b18791c269a687a39d76dc5f8 100644 (file)
@@ -5932,11 +5932,11 @@ static void show_mroute(struct pim_instance *pim, struct vty *vty,
                if (!c_oil->installed)
                        continue;
 
-               if (sg->grp.s_addr != INADDR_ANY
-                   && sg->grp.s_addr != c_oil->oil.mfcc_mcastgrp.s_addr)
+               if (!pim_addr_is_any(sg->grp) &&
+                   pim_addr_cmp(sg->grp, c_oil->oil.mfcc_mcastgrp))
                        continue;
-               if (sg->src.s_addr != INADDR_ANY
-                   && sg->src.s_addr != c_oil->oil.mfcc_origin.s_addr)
+               if (!pim_addr_is_any(sg->src) &&
+                   pim_addr_cmp(sg->src, c_oil->oil.mfcc_origin))
                        continue;
 
                pim_inet4_dump("<group?>", c_oil->oil.mfcc_mcastgrp, grp_str,
@@ -10493,8 +10493,8 @@ static void pim_show_vxlan_sg_entry(struct pim_vxlan_sg *vxlan_sg,
        else
                oif_name = vxlan_sg->term_oif?vxlan_sg->term_oif->name:"";
 
-       if (cwd->addr_match && (vxlan_sg->sg.src.s_addr != cwd->addr.s_addr) &&
-           (vxlan_sg->sg.grp.s_addr != cwd->addr.s_addr)) {
+       if (cwd->addr_match && pim_addr_cmp(vxlan_sg->sg.src, cwd->addr) &&
+           pim_addr_cmp(vxlan_sg->sg.grp, cwd->addr)) {
                return;
        }
        pim_inet4_dump("<src?>", vxlan_sg->sg.src, src_str, sizeof(src_str));
index d7011cabfe01877e178620f9705cd9eb1742a581..7a98e693ee4aaa91532623f97da6c74a8bd88c92 100644 (file)
@@ -115,8 +115,7 @@ static void pim_ifchannel_find_new_children(struct pim_ifchannel *ch)
 
        RB_FOREACH (child, pim_ifchannel_rb, &pim_ifp->ifchannel_rb) {
                if (!pim_addr_is_any(ch->sg.grp) &&
-                   (child->sg.grp.s_addr == ch->sg.grp.s_addr) &&
-                   (child != ch)) {
+                   !pim_addr_cmp(child->sg.grp, ch->sg.grp) && (child != ch)) {
                        child->parent = ch;
                        listnode_add_sort(ch->sources, child);
                }
index 5c6f55e99d59648141cd9cebc556ac5e50ad1b05..290655d12ecc48446d2960a470f43ac4aabdf4b9 100644 (file)
@@ -80,13 +80,7 @@ static int pim_jp_agg_src_cmp(void *arg1, void *arg2)
        if (!js1->is_join && js2->is_join)
                return 1;
 
-       if ((uint32_t)js1->up->sg.src.s_addr < (uint32_t)js2->up->sg.src.s_addr)
-               return -1;
-
-       if ((uint32_t)js1->up->sg.src.s_addr > (uint32_t)js2->up->sg.src.s_addr)
-               return 1;
-
-       return 0;
+       return pim_addr_cmp(js1->up->sg.src, js2->up->sg.src);
 }
 
 /*
@@ -156,7 +150,7 @@ void pim_jp_agg_remove_group(struct list *group, struct pim_upstream *up,
        struct pim_jp_sources *js = NULL;
 
        for (ALL_LIST_ELEMENTS(group, node, nnode, jag)) {
-               if (jag->group.s_addr == up->sg.grp.s_addr)
+               if (!pim_addr_cmp(jag->group, up->sg.grp))
                        break;
        }
 
@@ -202,7 +196,7 @@ int pim_jp_agg_is_in_list(struct list *group, struct pim_upstream *up)
        struct pim_jp_sources *js = NULL;
 
        for (ALL_LIST_ELEMENTS(group, node, nnode, jag)) {
-               if (jag->group.s_addr == up->sg.grp.s_addr)
+               if (!pim_addr_cmp(jag->group, up->sg.grp))
                        break;
        }
 
@@ -276,7 +270,7 @@ void pim_jp_agg_add_group(struct list *group, struct pim_upstream *up,
        struct pim_jp_sources *js = NULL;
 
        for (ALL_LIST_ELEMENTS(group, node, nnode, jag)) {
-               if (jag->group.s_addr == up->sg.grp.s_addr)
+               if (!pim_addr_cmp(jag->group, up->sg.grp))
                        break;
        }
 
index 520d93bbf29dea5eb5aa6af5ba4f3c7fe4f906e4..63cdc92144f2ab047f90850b6a15d6e93d51c2b2 100644 (file)
@@ -632,7 +632,7 @@ void pim_msdp_up_join_state_changed(struct pim_instance *pim,
        /* XXX: Need to maintain SAs per-group to avoid all this unnecessary
         * walking */
        for (ALL_LIST_ELEMENTS_RO(pim->msdp.sa_list, sanode, sa)) {
-               if (sa->sg.grp.s_addr != xg_up->sg.grp.s_addr) {
+               if (pim_addr_cmp(sa->sg.grp, xg_up->sg.grp)) {
                        continue;
                }
                pim_msdp_sa_upstream_update(sa, xg_up, "up-jp-change");
@@ -656,7 +656,7 @@ static void pim_msdp_up_xg_del(struct pim_instance *pim, pim_sgaddr *sg)
        /* XXX: Need to maintain SAs per-group to avoid all this unnecessary
         * walking */
        for (ALL_LIST_ELEMENTS_RO(pim->msdp.sa_list, sanode, sa)) {
-               if (sa->sg.grp.s_addr != sg->grp.s_addr) {
+               if (pim_addr_cmp(sa->sg.grp, sg->grp)) {
                        continue;
                }
                pim_msdp_sa_upstream_update(sa, NULL /* xg */, "up-jp-change");
index 617dbb9a431e6b0b5c7c101da5236ecb8bc3d78a..475523ec0c8bc913aaee8f61ae30d9ee3caed4a0 100644 (file)
@@ -44,11 +44,6 @@ static inline void pim_addr_copy(pim_addr *dest, pim_addr *source)
        dest->s_addr = source->s_addr;
 }
 
-static inline int pim_addr_cmp(pim_addr addr1, pim_addr addr2)
-{
-       return IPV4_ADDR_CMP(&addr1, &addr2);
-}
-
 void pim_addr_dump(const char *onfail, struct prefix *p, char *buf,
                   int buf_size);
 void pim_inet4_dump(const char *onfail, struct in_addr addr, char *buf,
index e6536edfd215e1ee2408347cc586b1c3087d09e5..e3d0db1bf2c472d39dd29e417614657151d62b85 100644 (file)
@@ -109,8 +109,7 @@ static void pim_upstream_find_new_children(struct pim_instance *pim,
 
        frr_each (rb_pim_upstream, &pim->upstream_head, child) {
                if (!pim_addr_is_any(up->sg.grp) &&
-                   (child->sg.grp.s_addr == up->sg.grp.s_addr) &&
-                   (child != up)) {
+                   !pim_addr_cmp(child->sg.grp, up->sg.grp) && (child != up)) {
                        child->parent = up;
                        listnode_add_sort(up->sources, child);
                        if (PIM_UPSTREAM_FLAG_TEST_USE_RPT(child->flags))