diff options
| author | Mobashshera Rasool <mrasool@vmware.com> | 2022-11-02 03:17:30 -0700 |
|---|---|---|
| committer | Mobashshera Rasool <mrasool@vmware.com> | 2022-11-02 03:23:23 -0700 |
| commit | b2212b99d1d278d395da3059b57cd3d8c3425018 (patch) | |
| tree | 470a4a4d4dfa0ef1084f0fcb44e98470ce6a5e4f /pimd/pim_mroute.c | |
| parent | f4bf8f1494bbdeda6b838ff2127523f6f9cc5979 (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.c | 13 |
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 |
