--- zzzz-none-000/linux-4.1.52/net/ipv4/route.c 2018-05-28 02:26:45.000000000 +0000 +++ bcm63-7530ax-731/linux-4.1.52/net/ipv4/route.c 2022-03-02 11:37:13.000000000 +0000 @@ -1471,7 +1471,14 @@ goto e_inval; if (ipv4_is_zeronet(saddr)) { +#if defined(CONFIG_BCM_KF_MISC_BACKPORTS) + /* Backporting latest kernel fix(1d2f4ebbbeb1ec055dcd3cf3dba833cfd0a84f3a) + to allow IGMP packets with zero source IP */ + if (!ipv4_is_local_multicast(daddr) + && ip_hdr(skb)->protocol != IPPROTO_IGMP) +#else if (!ipv4_is_local_multicast(daddr)) +#endif goto e_inval; } else { err = fib_validate_source(skb, saddr, 0, tos, 0, dev, @@ -2440,9 +2447,15 @@ #ifdef CONFIG_IP_MROUTE if (ipv4_is_multicast(dst) && !ipv4_is_local_multicast(dst) && IPV4_DEVCONF_ALL(net, MC_FORWARDING)) { +#if defined(CONFIG_BCM_KF_MROUTE) + int err = ipmr_get_route(net, skb, + fl4->saddr, fl4->daddr, + r, nowait, rt->rt_iif); +#else int err = ipmr_get_route(net, skb, fl4->saddr, fl4->daddr, r, nowait); +#endif if (err <= 0) { if (!nowait) { if (err == 0)