Message ID | tencent_4B358ADB8A54F04A32CD9933114B8B383606@qq.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: bridge: set skb->protocol for 802.1Q VLAN packets | expand |
On 3/26/25 20:11, inuc@qq.com wrote: > From: Liu Jie <inuc@qq.com> > > When bridging locally originated VLAN-tagged packets, we must ensure > skb->protocol is properly set to ETH_P_8021Q. Currently, if this field > remains unset, br_allowed_ingress() may incorrectly drop valid VLAN > packets during the bridge transmission path. > > Fix this by explicitly checking eth_hdr(skb)->h_proto for VLAN tags when > handling locally generated packets. > > Signed-off-by: Liu Jie <inuc@qq.com> > --- > net/bridge/br_device.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c > index 0ab4613aa..9094ba7e4 100644 > --- a/net/bridge/br_device.c > +++ b/net/bridge/br_device.c > @@ -63,6 +63,9 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev) > skb_reset_mac_header(skb); > skb_pull(skb, ETH_HLEN); > > + if (eth_hdr(skb)->h_proto == htons(ETH_P_8021Q)) > + skb->protocol = htons(ETH_P_8021Q); > + > if (!br_allowed_ingress(br, br_vlan_group_rcu(br), skb, &vid, > &state, &vlan)) > goto out; Why do you think the protocol is incorrect? Did you see a problem with some particular setup?
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c index 0ab4613aa..9094ba7e4 100644 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c @@ -63,6 +63,9 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev) skb_reset_mac_header(skb); skb_pull(skb, ETH_HLEN); + if (eth_hdr(skb)->h_proto == htons(ETH_P_8021Q)) + skb->protocol = htons(ETH_P_8021Q); + if (!br_allowed_ingress(br, br_vlan_group_rcu(br), skb, &vid, &state, &vlan)) goto out;