Skip to content

Commit

Permalink
bridge: use __vlan_hwaccel helpers
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Michał Mirosław authored and David S. Miller committed Nov 9, 2018
1 parent 418a976 commit 5978f8a
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 10 deletions.
15 changes: 9 additions & 6 deletions net/bridge/br_netfilter_hooks.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;

Expand Down
2 changes: 1 addition & 1 deletion net/bridge/br_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
6 changes: 3 additions & 3 deletions net/bridge/br_vlan.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)) {
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 5978f8a

Please sign in to comment.