summaryrefslogtreecommitdiff
path: root/pimd/pim_mroute.c
diff options
context:
space:
mode:
authorMobashshera Rasool <mrasool@vmware.com>2022-11-02 03:17:30 -0700
committerMobashshera Rasool <mrasool@vmware.com>2022-11-02 03:23:23 -0700
commitb2212b99d1d278d395da3059b57cd3d8c3425018 (patch)
tree470a4a4d4dfa0ef1084f0fcb44e98470ce6a5e4f /pimd/pim_mroute.c
parentf4bf8f1494bbdeda6b838ff2127523f6f9cc5979 (diff)
pimd: fix igmp source packet check
ip source 0.0.0.0 is OK as per RFC 3376: 4.2.13. Co-authored-by: ron <lyq140hf2006@163.com> Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
Diffstat (limited to 'pimd/pim_mroute.c')
-rw-r--r--pimd/pim_mroute.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c
index 220706945d..f1fd2ef735 100644
--- a/pimd/pim_mroute.c
+++ b/pimd/pim_mroute.c
@@ -634,7 +634,7 @@ static int process_igmp_packet(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_GM_PACKETS) {
zlog_debug(
"Recv IGMP packet on interface: %s from a non-connected source: %pI4",
@@ -644,7 +644,8 @@ static int process_igmp_packet(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);
if (PIM_DEBUG_GM_PACKETS) {
@@ -655,11 +656,11 @@ static int process_igmp_packet(struct pim_instance *pim, const char *buf,
}
if (igmp)
pim_igmp_packet(igmp, (char *)buf, buf_size);
- else if (PIM_DEBUG_GM_PACKETS) {
+ else if (PIM_DEBUG_GM_PACKETS)
zlog_debug(
- "No IGMP socket on interface: %s with connected source: %pFX",
- ifp->name, connected_src);
- }
+ "No IGMP socket on interface: %s with connected source: %pI4",
+ ifp->name, &ifaddr);
+
return 0;
}
#endif