diff options
Diffstat (limited to 'pimd/pim_mroute.c')
| -rw-r--r-- | pimd/pim_mroute.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c index f381a764cc..bce319b3ad 100644 --- a/pimd/pim_mroute.c +++ b/pimd/pim_mroute.c @@ -609,7 +609,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_addr_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); @@ -618,7 +618,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); @@ -631,8 +632,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); } #endif } else if (ip_hdr->ip_p) { |
