]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pimd: fix igmp packet check
authorron <lyq140hf2006@163.com>
Wed, 19 Jan 2022 09:37:28 +0000 (17:37 +0800)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Tue, 22 Mar 2022 07:30:29 +0000 (09:30 +0200)
ip source 0.0.0.0 is OK (RFC 3376: 4.2.13.).

Signed-off-by: ron <lyq140hf2006@163.com>
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
pimd/pim_mroute.c

index a01256dfb1c8452e797e4d5ccc37799c6a40c9f4..2bf0f8bccaa6f610948dd4774fca01ff4db202c8 100644 (file)
@@ -616,7 +616,7 @@ static int pim_mroute_msg(struct pim_instance *pim, const char *buf,
 
                connected_src = pim_if_connected_to_source(ifp, ip_hdr->ip_src);
 
-               if (!connected_src) {
+               if (!connected_src && !(PIM_INADDR_IS_ANY(ip_hdr->ip_src))) {
                        if (PIM_DEBUG_IGMP_PACKETS) {
                                zlog_debug("Recv IGMP packet on interface: %s from a non-connected source: %pI4",
                                           ifp->name, &ip_hdr->ip_src);
@@ -625,7 +625,8 @@ static int pim_mroute_msg(struct pim_instance *pim, const char *buf,
                }
 
                pim_ifp = ifp->info;
-               ifaddr = connected_src->u.prefix4;
+               ifaddr = connected_src ? connected_src->u.prefix4
+                                      : pim_ifp->primary_address;
                igmp = pim_igmp_sock_lookup_ifaddr(pim_ifp->gm_socket_list,
                                                   ifaddr);
 
@@ -638,8 +639,9 @@ static int pim_mroute_msg(struct pim_instance *pim, const char *buf,
                if (igmp)
                        pim_igmp_packet(igmp, (char *)buf, buf_size);
                else if (PIM_DEBUG_IGMP_PACKETS) {
-                       zlog_debug("No IGMP socket on interface: %s with connected source: %pFX",
-                                  ifp->name, connected_src);
+                       zlog_debug(
+                               "No IGMP socket on interface: %s with connected source: %pI4",
+                               ifp->name, &ifaddr);
                }
        } else if (ip_hdr->ip_p) {
                if (PIM_DEBUG_MROUTE_DETAIL) {