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);
}
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);
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) {