diff options
| author | ron <lyq140hf2006@163.com> | 2022-01-19 17:37:28 +0800 |
|---|---|---|
| committer | Donald Sharp <sharpd@nvidia.com> | 2022-03-16 15:48:51 -0400 |
| commit | 2674ba0ab012591edd30979ed57749d1df42ae65 (patch) | |
| tree | 811d60b35914ea6d40db02af5deed932bc9a4e7c | |
| parent | 1c475815a8815134c5d27274e767108d6eca4743 (diff) | |
pimd: fix igmp packet check
ip source 0.0.0.0 is OK (RFC 3376: 4.2.13.).
Signed-off-by: ron <lyq140hf2006@163.com>
| -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) { |
