summaryrefslogtreecommitdiff
path: root/pimd/pim_mroute.c
diff options
context:
space:
mode:
authorron <lyq140hf2006@163.com>2022-01-19 17:37:28 +0800
committerDonald Sharp <sharpd@nvidia.com>2022-03-16 15:48:51 -0400
commit2674ba0ab012591edd30979ed57749d1df42ae65 (patch)
tree811d60b35914ea6d40db02af5deed932bc9a4e7c /pimd/pim_mroute.c
parent1c475815a8815134c5d27274e767108d6eca4743 (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>
Diffstat (limited to 'pimd/pim_mroute.c')
-rw-r--r--pimd/pim_mroute.c10
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) {