]> git.proxmox.com Git - mirror_frr.git/commitdiff
pim6d: IPv6-adjust various pim_sgaddr uses
authorDavid Lamparter <equinox@opensourcerouting.org>
Fri, 14 Jan 2022 15:55:12 +0000 (16:55 +0100)
committerDavid Lamparter <equinox@opensourcerouting.org>
Mon, 14 Feb 2022 05:45:03 +0000 (06:45 +0100)
Since `pim_sgaddr` is `pim_addr` now, that causes a whole lot of fallout
anywhere S,G pairs are handled.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
pimd/pim_assert.c
pimd/pim_assert.h
pimd/pim_bsm.c
pimd/pim_ifchannel.c
pimd/pim_join.c
pimd/pim_nht.c
pimd/pim_register.c
pimd/pim_rpf.c
pimd/pim_upstream.c
pimd/pim_zebra.c

index f4b6e81bd674f6bfb82411d6a4ebc5426f9eb3d1..7d2ebffab1a84567b529c2d6ad19f2c66dc0f1c3 100644 (file)
@@ -136,8 +136,8 @@ static void if_could_assert_do_a1(const char *caller, struct pim_ifchannel *ch)
        }
 }
 
-static int dispatch_assert(struct interface *ifp, struct in_addr source_addr,
-                          struct in_addr group_addr,
+static int dispatch_assert(struct interface *ifp, pim_addr source_addr,
+                          pim_addr group_addr,
                           struct pim_assert_metric recv_metric)
 {
        struct pim_ifchannel *ch;
@@ -353,7 +353,7 @@ int pim_assert_metric_match(const struct pim_assert_metric *m1,
 }
 
 int pim_assert_build_msg(uint8_t *pim_msg, int buf_size, struct interface *ifp,
-                        struct in_addr group_addr, struct in_addr source_addr,
+                        pim_addr group_addr, pim_addr source_addr,
                         uint32_t metric_preference, uint32_t route_metric,
                         uint32_t rpt_bit_flag)
 {
@@ -367,28 +367,21 @@ int pim_assert_build_msg(uint8_t *pim_msg, int buf_size, struct interface *ifp,
 
        /* Encode group */
        remain = buf_pastend - pim_msg_curr;
-       pim_msg_curr = pim_msg_addr_encode_ipv4_group(pim_msg_curr, group_addr);
+       pim_msg_curr = pim_msg_addr_encode_group(pim_msg_curr, group_addr);
        if (!pim_msg_curr) {
-               char group_str[INET_ADDRSTRLEN];
-               pim_inet4_dump("<grp?>", group_addr, group_str,
-                              sizeof(group_str));
                zlog_warn(
-                       "%s: failure encoding group address %s: space left=%d",
-                       __func__, group_str, remain);
+                       "%s: failure encoding group address %pPA: space left=%d",
+                       __func__, &group_addr, remain);
                return -1;
        }
 
        /* Encode source */
        remain = buf_pastend - pim_msg_curr;
-       pim_msg_curr =
-               pim_msg_addr_encode_ipv4_ucast(pim_msg_curr, source_addr);
+       pim_msg_curr = pim_msg_addr_encode_ucast(pim_msg_curr, source_addr);
        if (!pim_msg_curr) {
-               char source_str[INET_ADDRSTRLEN];
-               pim_inet4_dump("<src?>", source_addr, source_str,
-                              sizeof(source_str));
                zlog_warn(
-                       "%s: failure encoding source address %s: space left=%d",
-                       __func__, source_str, remain);
+                       "%s: failure encoding source address %pPA: space left=%d",
+                       __func__, &source_addr, remain);
                return -2;
        }
 
index a149fb176eda9c1775716592adccd1c9c2665ba6..c7c11039af75ba7185baa70aa8e90daefce0c81e 100644 (file)
@@ -67,7 +67,7 @@ int pim_assert_metric_match(const struct pim_assert_metric *m1,
                            const struct pim_assert_metric *m2);
 
 int pim_assert_build_msg(uint8_t *pim_msg, int buf_size, struct interface *ifp,
-                        struct in_addr group_addr, struct in_addr source_addr,
+                        pim_addr group_addr, pim_addr source_addr,
                         uint32_t metric_preference, uint32_t route_metric,
                         uint32_t rpt_bit_flag);
 
index 4214790476669a647ea27d9f05a95ebec45f2daa..afb4a60572ecf4e80315b286eca04577014637e6 100644 (file)
@@ -667,10 +667,7 @@ void pim_bsm_clear(struct pim_instance *pim)
                struct prefix grp;
                struct rp_info *trp_info;
 
-               grp.family = AF_INET;
-               grp.prefixlen = IPV4_MAX_BITLEN;
-               grp.u.prefix4 = up->sg.grp;
-
+               pim_addr_to_prefix(&grp, up->sg.grp);
                trp_info = pim_rp_find_match_group(pim, &grp);
 
                /* RP not found for the group grp */
index 9248177724681fb079ae3157add5bd5b4b560cba..343817544e7afffa5cdd2f4093b5c502269f3d5b 100644 (file)
@@ -1235,10 +1235,8 @@ int pim_ifchannel_local_membership_add(struct interface *ifp, pim_sgaddr *sg,
                                struct prefix_list *plist = prefix_list_lookup(
                                        AFI_IP, pim->spt.plist);
                                struct prefix g;
-                               g.family = AF_INET;
-                               g.prefixlen = IPV4_MAX_BITLEN;
-                               g.u.prefix4 = up->sg.grp;
 
+                               pim_addr_to_prefix(&g, up->sg.grp);
                                if (prefix_list_apply(plist, &g)
                                    == PREFIX_DENY) {
                                        pim_channel_add_oif(
index a3a97f20e5697a5ef523328f5d115eb885283eef..7aea4116061b8ce03dd4b7db2723f86d5af08a77 100644 (file)
@@ -84,6 +84,7 @@ static void recv_join(struct interface *ifp, struct pim_neighbor *neigh,
        if ((source_flags & PIM_RPT_BIT_MASK)
            && (source_flags & PIM_WILDCARD_BIT_MASK)) {
                struct pim_rpf *rp = RP(pim_ifp->pim, sg->grp);
+               pim_addr rpf_addr;
 
                if (!rp) {
                        zlog_warn("%s: Lookup of RP failed for %pSG", __func__,
@@ -94,13 +95,11 @@ static void recv_join(struct interface *ifp, struct pim_neighbor *neigh,
                 * If the RP sent in the message is not
                 * our RP for the group, drop the message
                 */
-               if (sg->src.s_addr != rp->rpf_addr.u.prefix4.s_addr) {
-                       char local_rp[INET_ADDRSTRLEN];
-                       pim_inet4_dump("<local?>", rp->rpf_addr.u.prefix4,
-                                      local_rp, sizeof(local_rp));
+               rpf_addr = pim_addr_from_prefix(&rp->rpf_addr);
+               if (pim_addr_cmp(sg->src, rpf_addr)) {
                        zlog_warn(
-                               "%s: Specified RP(%pPAs) in join is different than our configured RP(%s)",
-                               __func__, &sg->src, local_rp);
+                               "%s: Specified RP(%pPAs) in join is different than our configured RP(%pPAs)",
+                               __func__, &sg->src, &rpf_addr);
                        return;
                }
 
index 26ca48543f1e12abbef4f8d5263de808570cfdc4..419e76c33f9c98850646a9b9a4ce15232dabe63d 100644 (file)
@@ -237,10 +237,7 @@ void pim_delete_tracked_nexthop(struct pim_instance *pim, struct prefix *addr,
                        if (!pim_addr_is_any(upstream->sg.src))
                                continue;
 
-                       grp.family = AF_INET;
-                       grp.prefixlen = IPV4_MAX_BITLEN;
-                       grp.u.prefix4 = upstream->sg.grp;
-
+                       pim_addr_to_prefix(&grp, upstream->sg.grp);
                        trp_info = pim_rp_find_match_group(pim, &grp);
                        if (trp_info == rp)
                                hash_release(pnc->upstream_hash, upstream);
index a0def299faf356fe51c427530e88ccd3fa3bfbfe..2cc80f957c05dc5f0c2014afce7f1377aa8e82b0 100644 (file)
@@ -399,11 +399,10 @@ int pim_register_recv(struct interface *ifp, struct in_addr dest_addr,
                        struct prefix_list *plist;
                        struct prefix src;
 
-                       plist = prefix_list_lookup(AFI_IP, pim->register_plist);
+                       plist = prefix_list_lookup(PIM_AFI,
+                                                  pim->register_plist);
 
-                       src.family = AF_INET;
-                       src.prefixlen = IPV4_MAX_BITLEN;
-                       src.u.prefix4 = sg.src;
+                       pim_addr_to_prefix(&src, sg.src);
 
                        if (prefix_list_apply(plist, &src) == PREFIX_DENY) {
                                pim_register_stop_send(ifp, &sg, dest_addr,
index 1e865a395648ea563edea3620de87ee1b529665e..14e6e0dc986907d7d600273b818e26d961e05e46 100644 (file)
@@ -255,9 +255,7 @@ enum pim_rpf_result pim_rpf_update(struct pim_instance *pim,
        src.family = AF_INET;
        src.prefixlen = IPV4_MAX_BITLEN;
        src.u.prefix4 = up->upstream_addr; // RP or Src address
-       grp.family = AF_INET;
-       grp.prefixlen = IPV4_MAX_BITLEN;
-       grp.u.prefix4 = up->sg.grp;
+       pim_addr_to_prefix(&grp, up->sg.grp);
 
        if ((pim_addr_is_any(up->sg.src) && I_am_RP(pim, up->sg.grp)) ||
            PIM_UPSTREAM_FLAG_TEST_FHR(up->flags))
index 800ec9c45cac437432b15f3bdbd37a341ad087ae..68fb5ba382576bb2b7ab46605c8faaee826a57c9 100644 (file)
@@ -2153,10 +2153,7 @@ void pim_upstream_remove_lhr_star_pimreg(struct pim_instance *pim,
        struct prefix g;
        enum prefix_list_type apply_new;
 
-       np = prefix_list_lookup(AFI_IP, nlist);
-
-       g.family = AF_INET;
-       g.prefixlen = IPV4_MAX_BITLEN;
+       np = prefix_list_lookup(PIM_AFI, nlist);
 
        frr_each (rb_pim_upstream, &pim->upstream_head, up) {
                if (!pim_addr_is_any(up->sg.src))
@@ -2170,7 +2167,7 @@ void pim_upstream_remove_lhr_star_pimreg(struct pim_instance *pim,
                                        PIM_OIF_FLAG_PROTO_IGMP, __func__);
                        continue;
                }
-               g.u.prefix4 = up->sg.grp;
+               pim_addr_to_prefix(&g, up->sg.grp);
                apply_new = prefix_list_apply(np, &g);
                if (apply_new == PREFIX_DENY)
                        pim_channel_add_oif(up->channel_oil, pim->regiface,
index 2efafd4b9b0914ea829cac13775d84e8c870efb8..5f9273eb45b47c03b8771d9a2c1a4b193aabe4d8 100644 (file)
@@ -337,8 +337,8 @@ static int pim_zebra_vxlan_sg_proc(ZAPI_CALLBACK_ARGS)
        s = zclient->ibuf;
 
        prefixlen = stream_getl(s);
-       stream_get(&sg.src.s_addr, s, prefixlen);
-       stream_get(&sg.grp.s_addr, s, prefixlen);
+       stream_get(&sg.src, s, prefixlen);
+       stream_get(&sg.grp, s, prefixlen);
 
        if (PIM_DEBUG_ZEBRA)
                zlog_debug("%u:recv SG %s %pSG", vrf_id,
@@ -606,7 +606,7 @@ void igmp_source_forward_start(struct pim_instance *pim,
        }
 
        if (!source->source_channel_oil) {
-               struct in_addr vif_source;
+               pim_addr vif_source;
                struct prefix src, grp;
                struct pim_nexthop nexthop;
                struct pim_upstream *up = NULL;
@@ -619,12 +619,8 @@ void igmp_source_forward_start(struct pim_instance *pim,
                }
 
                else {
-                       src.family = AF_INET;
-                       src.prefixlen = IPV4_MAX_BITLEN;
-                       src.u.prefix4 = vif_source; // RP or Src address
-                       grp.family = AF_INET;
-                       grp.prefixlen = IPV4_MAX_BITLEN;
-                       grp.u.prefix4 = sg.grp;
+                       pim_addr_to_prefix(&src, vif_source); // RP or Src addr
+                       pim_addr_to_prefix(&grp, sg.grp);
 
                        up = pim_upstream_find(pim, &sg);
                        if (up) {
@@ -642,15 +638,11 @@ void igmp_source_forward_start(struct pim_instance *pim,
                                        pim_ecmp_fib_lookup_if_vif_index(
                                                pim, &src, &grp);
 
-                       if (PIM_DEBUG_ZEBRA) {
-                               char buf2[INET_ADDRSTRLEN];
-
-                               pim_inet4_dump("<source?>", vif_source, buf2,
-                                              sizeof(buf2));
-                               zlog_debug("%s: NHT %pSG vif_source %s vif_index:%d ",
-                                          __func__, &sg, buf2,
-                                          input_iface_vif_index);
-                       }
+                       if (PIM_DEBUG_ZEBRA)
+                               zlog_debug(
+                                       "%s: NHT %pSG vif_source %pPAs vif_index:%d ",
+                                       __func__, &sg, &vif_source,
+                                       input_iface_vif_index);
 
                        if (input_iface_vif_index < 1) {
                                if (PIM_DEBUG_IGMP_TRACE) {