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 /pimd/pim_mroute.c | |
| 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>
Diffstat (limited to 'pimd/pim_mroute.c')
| -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) {  | 
