net: dsa: lan9303: lan9303_rcv set skb->offload_fwd_mark
authorEgil Hjelmeland <privat@egil-hjelmeland.no>
Tue, 31 Oct 2017 14:48:02 +0000 (15:48 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 1 Nov 2017 12:30:24 +0000 (21:30 +0900)
The chip flood broadcast and unknown multicast frames.
On receive set skb->offload_fwd_mark to prevent the SW from flooding to the
same ports.

One exception: Because the ALR is set up to forward STP BPDUs only to CPU,
the SW bridge should flood STP BPDUs if local STP is not enabled.
This is archived by not setting skb->offload_fwd_mark on STP BPDUs.

Signed-off-by: Egil Hjelmeland <privat@egil-hjelmeland.no>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/dsa/tag_lan9303.c

index 18f45cd9f625f4aac8f68db92bcab117cf291033..e526c8967b98b0e29784d0687e8ba715dd916033 100644 (file)
@@ -126,6 +126,8 @@ static struct sk_buff *lan9303_rcv(struct sk_buff *skb, struct net_device *dev,
        skb_pull_rcsum(skb, 2 + 2);
        memmove(skb->data - ETH_HLEN, skb->data - (ETH_HLEN + LAN9303_TAG_LEN),
                2 * ETH_ALEN);
+       skb->offload_fwd_mark = !ether_addr_equal(skb->data - ETH_HLEN,
+                                                 eth_stp_addr);
 
        return skb;
 }