mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
bridge: use __vlan_hwaccel helpers
This removes assumption than vlan_tci != 0 when tag is present. Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
418a976d6c
commit
5978f8a9fb
@ -671,10 +671,8 @@ static int br_nf_push_frag_xmit(struct net *net, struct sock *sk, struct sk_buff
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (data->vlan_tci) {
|
||||
skb->vlan_tci = data->vlan_tci;
|
||||
skb->vlan_proto = data->vlan_proto;
|
||||
}
|
||||
if (data->vlan_proto)
|
||||
__vlan_hwaccel_put_tag(skb, data->vlan_proto, data->vlan_tci);
|
||||
|
||||
skb_copy_to_linear_data_offset(skb, -data->size, data->mac, data->size);
|
||||
__skb_push(skb, data->encap_size);
|
||||
@ -740,8 +738,13 @@ static int br_nf_dev_queue_xmit(struct net *net, struct sock *sk, struct sk_buff
|
||||
|
||||
data = this_cpu_ptr(&brnf_frag_data_storage);
|
||||
|
||||
data->vlan_tci = skb->vlan_tci;
|
||||
data->vlan_proto = skb->vlan_proto;
|
||||
if (skb_vlan_tag_present(skb)) {
|
||||
data->vlan_tci = skb->vlan_tci;
|
||||
data->vlan_proto = skb->vlan_proto;
|
||||
} else {
|
||||
data->vlan_proto = 0;
|
||||
}
|
||||
|
||||
data->encap_size = nf_bridge_encap_header_len(skb);
|
||||
data->size = ETH_HLEN + data->encap_size;
|
||||
|
||||
|
@ -905,7 +905,7 @@ static inline int br_vlan_get_tag(const struct sk_buff *skb, u16 *vid)
|
||||
int err = 0;
|
||||
|
||||
if (skb_vlan_tag_present(skb)) {
|
||||
*vid = skb_vlan_tag_get(skb) & VLAN_VID_MASK;
|
||||
*vid = skb_vlan_tag_get_id(skb);
|
||||
} else {
|
||||
*vid = 0;
|
||||
err = -EINVAL;
|
||||
|
@ -420,7 +420,7 @@ struct sk_buff *br_handle_vlan(struct net_bridge *br,
|
||||
}
|
||||
|
||||
if (v->flags & BRIDGE_VLAN_INFO_UNTAGGED)
|
||||
skb->vlan_tci = 0;
|
||||
__vlan_hwaccel_clear_tag(skb);
|
||||
|
||||
if (p && (p->flags & BR_VLAN_TUNNEL) &&
|
||||
br_handle_egress_vlan_tunnel(skb, v)) {
|
||||
@ -493,8 +493,8 @@ static bool __allowed_ingress(const struct net_bridge *br,
|
||||
__vlan_hwaccel_put_tag(skb, br->vlan_proto, pvid);
|
||||
else
|
||||
/* Priority-tagged Frame.
|
||||
* At this point, We know that skb->vlan_tci had
|
||||
* VLAN_TAG_PRESENT bit and its VID field was 0x000.
|
||||
* At this point, we know that skb->vlan_tci VID
|
||||
* field was 0.
|
||||
* We update only VID field and preserve PCP field.
|
||||
*/
|
||||
skb->vlan_tci |= pvid;
|
||||
|
Loading…
Reference in New Issue
Block a user