@@ -3823,11 +3823,14 @@ static int br_multicast_ipv4_rcv(struct net_bridge_mcast *brmctx,
if (err == -ENOMSG) {
if (!ipv4_is_local_multicast(ip_hdr(skb)->daddr)) {
BR_INPUT_SKB_CB(skb)->mrouters_only = 1;
- } else if (pim_ipv4_all_pim_routers(ip_hdr(skb)->daddr)) {
- if (ip_hdr(skb)->protocol == IPPROTO_PIM)
- br_multicast_pim(brmctx, pmctx, skb);
- } else if (ipv4_is_all_snoopers(ip_hdr(skb)->daddr)) {
- br_ip4_multicast_mrd_rcv(brmctx, pmctx, skb);
+ } else {
+ BR_INPUT_SKB_CB(skb)->force_flood = 1;
+ if (pim_ipv4_all_pim_routers(ip_hdr(skb)->daddr)) {
+ if (ip_hdr(skb)->protocol == IPPROTO_PIM)
+ br_multicast_pim(brmctx, pmctx, skb);
+ } else if (ipv4_is_all_snoopers(ip_hdr(skb)->daddr)) {
+ br_ip4_multicast_mrd_rcv(brmctx, pmctx, skb);
+ }
}
return 0;
Always flood packets with local multicast destination address. If multicast flooding is disabled on a bridge port, local subnet multicast packets from the bridge will not be forwarded out of that port, even if IGMP snooping is running and the hosts beyond the bridge port are sending Reports to join these groups (e.g., 224.0.0.251). This is because the bridge blocks the creation of an mdb entry if the group is a local subnet multicast address, which will cause these packets to be flooded via br_flood(), but blocked by the mcast_flood flag check. Signed-off-by: Joseph Huang <Joseph.Huang@garmin.com> --- net/bridge/br_multicast.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-)