]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pim6d: encode PIM joins correctly
authorDavid Lamparter <equinox@opensourcerouting.org>
Sat, 12 Mar 2022 21:33:23 +0000 (22:33 +0100)
committerDavid Lamparter <equinox@opensourcerouting.org>
Sat, 12 Mar 2022 21:57:34 +0000 (22:57 +0100)
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
pimd/pim_join.c

index 929beea26bef81abf521ba038d637c5963148ac1..2c11d5d13f897c0ea145c7d54fd6c22dfd3058d5 100644 (file)
 #include "pim_util.h"
 #include "pim_ssm.h"
 
-static void on_trace(const char *label, struct interface *ifp,
-                    struct in_addr src)
+static void on_trace(const char *label, struct interface *ifp, pim_addr src)
 {
-       if (PIM_DEBUG_PIM_TRACE) {
-               char src_str[INET_ADDRSTRLEN];
-               pim_inet4_dump("<src?>", src, src_str, sizeof(src_str));
-               zlog_debug("%s: from %s on %s", label, src_str, ifp->name);
-       }
+       if (PIM_DEBUG_PIM_TRACE)
+               zlog_debug("%s: from %pPA on %s", label, &src, ifp->name);
 }
 
 static void recv_join(struct interface *ifp, struct pim_neighbor *neigh,
@@ -422,6 +418,7 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups)
        size_t packet_left = 0;
        size_t packet_size = 0;
        size_t group_size = 0;
+       pim_addr rpf_addr;
 
        if (rpf->source_nexthop.interface)
                pim_ifp = rpf->source_nexthop.interface->info;
@@ -430,8 +427,9 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups)
                return -1;
        }
 
-       on_trace(__func__, rpf->source_nexthop.interface,
-                rpf->rpf_addr.u.prefix4);
+       rpf_addr = pim_addr_from_prefix(&rpf->rpf_addr);
+
+       on_trace(__func__, rpf->source_nexthop.interface, rpf_addr);
 
        if (!pim_ifp) {
                zlog_warn("%s: multicast not enabled on interface %s", __func__,
@@ -439,15 +437,12 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups)
                return -1;
        }
 
-       if (rpf->rpf_addr.u.prefix4.s_addr == INADDR_ANY) {
-               if (PIM_DEBUG_PIM_J_P) {
-                       char dst_str[INET_ADDRSTRLEN];
-                       pim_inet4_dump("<dst?>", rpf->rpf_addr.u.prefix4,
-                                      dst_str, sizeof(dst_str));
-                       zlog_debug("%s: upstream=%s is myself on interface %s",
-                                  __func__, dst_str,
-                                  rpf->source_nexthop.interface->name);
-               }
+       if (pim_addr_is_any(rpf_addr)) {
+               if (PIM_DEBUG_PIM_J_P)
+                       zlog_debug(
+                               "%s: upstream=%pPA is myself on interface %s",
+                               __func__, &rpf_addr,
+                               rpf->source_nexthop.interface->name);
                return 0;
        }
 
@@ -468,8 +463,8 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups)
 
                        memset(msg, 0, sizeof(*msg));
 
-                       pim_msg_addr_encode_ipv4_ucast((uint8_t *)&msg->addr,
-                                                      rpf->rpf_addr.u.prefix4);
+                       pim_msg_addr_encode_ucast((uint8_t *)&msg->addr,
+                                                 rpf_addr);
                        msg->reserved = 0;
                        msg->holdtime = htons(PIM_JP_HOLDTIME);
 
@@ -485,15 +480,11 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups)
                        packet_left = rpf->source_nexthop.interface->mtu - 24;
                        packet_left -= packet_size;
                }
-               if (PIM_DEBUG_PIM_J_P) {
-                       char dst_str[INET_ADDRSTRLEN];
-                       pim_inet4_dump("<dst?>", rpf->rpf_addr.u.prefix4,
-                                      dst_str, sizeof(dst_str));
+               if (PIM_DEBUG_PIM_J_P)
                        zlog_debug(
-                               "%s: sending (G)=%pPAs to upstream=%s on interface %s",
-                               __func__, &group->group, dst_str,
+                               "%s: sending (G)=%pPAs to upstream=%pPA on interface %s",
+                               __func__, &group->group, &rpf_addr,
                                rpf->source_nexthop.interface->name);
-               }
 
                group_size = pim_msg_get_jp_group_size(group->sources);
                if (group_size > packet_left) {
@@ -513,8 +504,8 @@ int pim_joinprune_send(struct pim_rpf *rpf, struct list *groups)
                        msg = (struct pim_jp *)pim_msg;
                        memset(msg, 0, sizeof(*msg));
 
-                       pim_msg_addr_encode_ipv4_ucast((uint8_t *)&msg->addr,
-                                                      rpf->rpf_addr.u.prefix4);
+                       pim_msg_addr_encode_ucast((uint8_t *)&msg->addr,
+                                                 rpf_addr);
                        msg->reserved = 0;
                        msg->holdtime = htons(PIM_JP_HOLDTIME);