提交 eb4149c9 编写于 作者: D David S. Miller

Merge branch 'net-Remove-VLAN_TAG_PRESENT-from-drivers'

Michał Mirosław says:

====================
net: Remove VLAN_TAG_PRESENT from drivers

This series removes VLAN_TAG_PRESENT use from network drivers in
preparation to removing its special meaning.
====================
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
...@@ -404,7 +404,7 @@ static struct i40iw_puda_buf *i40iw_form_cm_frame(struct i40iw_cm_node *cm_node, ...@@ -404,7 +404,7 @@ static struct i40iw_puda_buf *i40iw_form_cm_frame(struct i40iw_cm_node *cm_node,
if (pdata) if (pdata)
pd_len = pdata->size; pd_len = pdata->size;
if (cm_node->vlan_id < VLAN_TAG_PRESENT) if (cm_node->vlan_id <= VLAN_VID_MASK)
eth_hlen += 4; eth_hlen += 4;
if (cm_node->ipv4) if (cm_node->ipv4)
...@@ -433,7 +433,7 @@ static struct i40iw_puda_buf *i40iw_form_cm_frame(struct i40iw_cm_node *cm_node, ...@@ -433,7 +433,7 @@ static struct i40iw_puda_buf *i40iw_form_cm_frame(struct i40iw_cm_node *cm_node,
ether_addr_copy(ethh->h_dest, cm_node->rem_mac); ether_addr_copy(ethh->h_dest, cm_node->rem_mac);
ether_addr_copy(ethh->h_source, cm_node->loc_mac); ether_addr_copy(ethh->h_source, cm_node->loc_mac);
if (cm_node->vlan_id < VLAN_TAG_PRESENT) { if (cm_node->vlan_id <= VLAN_VID_MASK) {
((struct vlan_ethhdr *)ethh)->h_vlan_proto = htons(ETH_P_8021Q); ((struct vlan_ethhdr *)ethh)->h_vlan_proto = htons(ETH_P_8021Q);
vtag = (cm_node->user_pri << VLAN_PRIO_SHIFT) | cm_node->vlan_id; vtag = (cm_node->user_pri << VLAN_PRIO_SHIFT) | cm_node->vlan_id;
((struct vlan_ethhdr *)ethh)->h_vlan_TCI = htons(vtag); ((struct vlan_ethhdr *)ethh)->h_vlan_TCI = htons(vtag);
...@@ -463,7 +463,7 @@ static struct i40iw_puda_buf *i40iw_form_cm_frame(struct i40iw_cm_node *cm_node, ...@@ -463,7 +463,7 @@ static struct i40iw_puda_buf *i40iw_form_cm_frame(struct i40iw_cm_node *cm_node,
ether_addr_copy(ethh->h_dest, cm_node->rem_mac); ether_addr_copy(ethh->h_dest, cm_node->rem_mac);
ether_addr_copy(ethh->h_source, cm_node->loc_mac); ether_addr_copy(ethh->h_source, cm_node->loc_mac);
if (cm_node->vlan_id < VLAN_TAG_PRESENT) { if (cm_node->vlan_id <= VLAN_VID_MASK) {
((struct vlan_ethhdr *)ethh)->h_vlan_proto = htons(ETH_P_8021Q); ((struct vlan_ethhdr *)ethh)->h_vlan_proto = htons(ETH_P_8021Q);
vtag = (cm_node->user_pri << VLAN_PRIO_SHIFT) | cm_node->vlan_id; vtag = (cm_node->user_pri << VLAN_PRIO_SHIFT) | cm_node->vlan_id;
((struct vlan_ethhdr *)ethh)->h_vlan_TCI = htons(vtag); ((struct vlan_ethhdr *)ethh)->h_vlan_TCI = htons(vtag);
...@@ -3323,7 +3323,7 @@ static void i40iw_init_tcp_ctx(struct i40iw_cm_node *cm_node, ...@@ -3323,7 +3323,7 @@ static void i40iw_init_tcp_ctx(struct i40iw_cm_node *cm_node,
tcp_info->flow_label = 0; tcp_info->flow_label = 0;
tcp_info->snd_mss = cpu_to_le32(((u32)cm_node->tcp_cntxt.mss)); tcp_info->snd_mss = cpu_to_le32(((u32)cm_node->tcp_cntxt.mss));
if (cm_node->vlan_id < VLAN_TAG_PRESENT) { if (cm_node->vlan_id <= VLAN_VID_MASK) {
tcp_info->insert_vlan_tag = true; tcp_info->insert_vlan_tag = true;
tcp_info->vlan_tag = cpu_to_le16(((u16)cm_node->user_pri << I40IW_VLAN_PRIO_SHIFT) | tcp_info->vlan_tag = cpu_to_le16(((u16)cm_node->user_pri << I40IW_VLAN_PRIO_SHIFT) |
cm_node->vlan_id); cm_node->vlan_id);
......
...@@ -5731,7 +5731,7 @@ static int cnic_netdev_event(struct notifier_block *this, unsigned long event, ...@@ -5731,7 +5731,7 @@ static int cnic_netdev_event(struct notifier_block *this, unsigned long event,
if (realdev) { if (realdev) {
dev = cnic_from_netdev(realdev); dev = cnic_from_netdev(realdev);
if (dev) { if (dev) {
vid |= VLAN_TAG_PRESENT; vid |= VLAN_CFI_MASK; /* make non-zero */
cnic_rcv_netevent(dev->cnic_priv, event, vid); cnic_rcv_netevent(dev->cnic_priv, event, vid);
cnic_put(dev); cnic_put(dev);
} }
......
...@@ -1134,12 +1134,10 @@ static int gfar_convert_to_filer(struct ethtool_rx_flow_spec *rule, ...@@ -1134,12 +1134,10 @@ static int gfar_convert_to_filer(struct ethtool_rx_flow_spec *rule,
prio = vlan_tci_prio(rule); prio = vlan_tci_prio(rule);
prio_mask = vlan_tci_priom(rule); prio_mask = vlan_tci_priom(rule);
if (cfi == VLAN_TAG_PRESENT && cfi_mask == VLAN_TAG_PRESENT) { if (cfi_mask) {
if (cfi)
vlan |= RQFPR_CFI; vlan |= RQFPR_CFI;
vlan_mask |= RQFPR_CFI; vlan_mask |= RQFPR_CFI;
} else if (cfi != VLAN_TAG_PRESENT &&
cfi_mask == VLAN_TAG_PRESENT) {
vlan_mask |= RQFPR_CFI;
} }
} }
......
...@@ -301,7 +301,7 @@ static int push_vlan(struct sk_buff *skb, struct sw_flow_key *key, ...@@ -301,7 +301,7 @@ static int push_vlan(struct sk_buff *skb, struct sw_flow_key *key,
key->eth.vlan.tpid = vlan->vlan_tpid; key->eth.vlan.tpid = vlan->vlan_tpid;
} }
return skb_vlan_push(skb, vlan->vlan_tpid, return skb_vlan_push(skb, vlan->vlan_tpid,
ntohs(vlan->vlan_tci) & ~VLAN_TAG_PRESENT); ntohs(vlan->vlan_tci) & ~VLAN_CFI_MASK);
} }
/* 'src' is already properly masked. */ /* 'src' is already properly masked. */
...@@ -822,8 +822,10 @@ static int ovs_vport_output(struct net *net, struct sock *sk, struct sk_buff *sk ...@@ -822,8 +822,10 @@ static int ovs_vport_output(struct net *net, struct sock *sk, struct sk_buff *sk
__skb_dst_copy(skb, data->dst); __skb_dst_copy(skb, data->dst);
*OVS_CB(skb) = data->cb; *OVS_CB(skb) = data->cb;
skb->inner_protocol = data->inner_protocol; skb->inner_protocol = data->inner_protocol;
skb->vlan_tci = data->vlan_tci; if (data->vlan_tci & VLAN_CFI_MASK)
skb->vlan_proto = data->vlan_proto; __vlan_hwaccel_put_tag(skb, data->vlan_proto, data->vlan_tci & ~VLAN_CFI_MASK);
else
__vlan_hwaccel_clear_tag(skb);
/* Reconstruct the MAC header. */ /* Reconstruct the MAC header. */
skb_push(skb, data->l2_len); skb_push(skb, data->l2_len);
...@@ -867,7 +869,10 @@ static void prepare_frag(struct vport *vport, struct sk_buff *skb, ...@@ -867,7 +869,10 @@ static void prepare_frag(struct vport *vport, struct sk_buff *skb,
data->cb = *OVS_CB(skb); data->cb = *OVS_CB(skb);
data->inner_protocol = skb->inner_protocol; data->inner_protocol = skb->inner_protocol;
data->network_offset = orig_network_offset; data->network_offset = orig_network_offset;
data->vlan_tci = skb->vlan_tci; if (skb_vlan_tag_present(skb))
data->vlan_tci = skb_vlan_tag_get(skb) | VLAN_CFI_MASK;
else
data->vlan_tci = 0;
data->vlan_proto = skb->vlan_proto; data->vlan_proto = skb->vlan_proto;
data->mac_proto = mac_proto; data->mac_proto = mac_proto;
data->l2_len = hlen; data->l2_len = hlen;
......
...@@ -325,7 +325,7 @@ static int parse_vlan_tag(struct sk_buff *skb, struct vlan_head *key_vh, ...@@ -325,7 +325,7 @@ static int parse_vlan_tag(struct sk_buff *skb, struct vlan_head *key_vh,
return -ENOMEM; return -ENOMEM;
vh = (struct vlan_head *)skb->data; vh = (struct vlan_head *)skb->data;
key_vh->tci = vh->tci | htons(VLAN_TAG_PRESENT); key_vh->tci = vh->tci | htons(VLAN_CFI_MASK);
key_vh->tpid = vh->tpid; key_vh->tpid = vh->tpid;
if (unlikely(untag_vlan)) { if (unlikely(untag_vlan)) {
...@@ -358,7 +358,7 @@ static int parse_vlan(struct sk_buff *skb, struct sw_flow_key *key) ...@@ -358,7 +358,7 @@ static int parse_vlan(struct sk_buff *skb, struct sw_flow_key *key)
int res; int res;
if (skb_vlan_tag_present(skb)) { if (skb_vlan_tag_present(skb)) {
key->eth.vlan.tci = htons(skb->vlan_tci); key->eth.vlan.tci = htons(skb->vlan_tci) | htons(VLAN_CFI_MASK);
key->eth.vlan.tpid = skb->vlan_proto; key->eth.vlan.tpid = skb->vlan_proto;
} else { } else {
/* Parse outer vlan tag in the non-accelerated case. */ /* Parse outer vlan tag in the non-accelerated case. */
......
...@@ -60,7 +60,7 @@ struct ovs_tunnel_info { ...@@ -60,7 +60,7 @@ struct ovs_tunnel_info {
struct vlan_head { struct vlan_head {
__be16 tpid; /* Vlan type. Generally 802.1q or 802.1ad.*/ __be16 tpid; /* Vlan type. Generally 802.1q or 802.1ad.*/
__be16 tci; /* 0 if no VLAN, VLAN_TAG_PRESENT set otherwise. */ __be16 tci; /* 0 if no VLAN, VLAN_CFI_MASK set otherwise. */
}; };
#define OVS_SW_FLOW_KEY_METADATA_SIZE \ #define OVS_SW_FLOW_KEY_METADATA_SIZE \
......
...@@ -990,9 +990,9 @@ static int validate_vlan_from_nlattrs(const struct sw_flow_match *match, ...@@ -990,9 +990,9 @@ static int validate_vlan_from_nlattrs(const struct sw_flow_match *match,
if (a[OVS_KEY_ATTR_VLAN]) if (a[OVS_KEY_ATTR_VLAN])
tci = nla_get_be16(a[OVS_KEY_ATTR_VLAN]); tci = nla_get_be16(a[OVS_KEY_ATTR_VLAN]);
if (!(tci & htons(VLAN_TAG_PRESENT))) { if (!(tci & htons(VLAN_CFI_MASK))) {
if (tci) { if (tci) {
OVS_NLERR(log, "%s TCI does not have VLAN_TAG_PRESENT bit set.", OVS_NLERR(log, "%s TCI does not have VLAN_CFI_MASK bit set.",
(inner) ? "C-VLAN" : "VLAN"); (inner) ? "C-VLAN" : "VLAN");
return -EINVAL; return -EINVAL;
} else if (nla_len(a[OVS_KEY_ATTR_ENCAP])) { } else if (nla_len(a[OVS_KEY_ATTR_ENCAP])) {
...@@ -1013,9 +1013,9 @@ static int validate_vlan_mask_from_nlattrs(const struct sw_flow_match *match, ...@@ -1013,9 +1013,9 @@ static int validate_vlan_mask_from_nlattrs(const struct sw_flow_match *match,
__be16 tci = 0; __be16 tci = 0;
__be16 tpid = 0; __be16 tpid = 0;
bool encap_valid = !!(match->key->eth.vlan.tci & bool encap_valid = !!(match->key->eth.vlan.tci &
htons(VLAN_TAG_PRESENT)); htons(VLAN_CFI_MASK));
bool i_encap_valid = !!(match->key->eth.cvlan.tci & bool i_encap_valid = !!(match->key->eth.cvlan.tci &
htons(VLAN_TAG_PRESENT)); htons(VLAN_CFI_MASK));
if (!(key_attrs & (1 << OVS_KEY_ATTR_ENCAP))) { if (!(key_attrs & (1 << OVS_KEY_ATTR_ENCAP))) {
/* Not a VLAN. */ /* Not a VLAN. */
...@@ -1039,8 +1039,8 @@ static int validate_vlan_mask_from_nlattrs(const struct sw_flow_match *match, ...@@ -1039,8 +1039,8 @@ static int validate_vlan_mask_from_nlattrs(const struct sw_flow_match *match,
(inner) ? "C-VLAN" : "VLAN", ntohs(tpid)); (inner) ? "C-VLAN" : "VLAN", ntohs(tpid));
return -EINVAL; return -EINVAL;
} }
if (!(tci & htons(VLAN_TAG_PRESENT))) { if (!(tci & htons(VLAN_CFI_MASK))) {
OVS_NLERR(log, "%s TCI mask does not have exact match for VLAN_TAG_PRESENT bit.", OVS_NLERR(log, "%s TCI mask does not have exact match for VLAN_CFI_MASK bit.",
(inner) ? "C-VLAN" : "VLAN"); (inner) ? "C-VLAN" : "VLAN");
return -EINVAL; return -EINVAL;
} }
...@@ -1095,7 +1095,7 @@ static int parse_vlan_from_nlattrs(struct sw_flow_match *match, ...@@ -1095,7 +1095,7 @@ static int parse_vlan_from_nlattrs(struct sw_flow_match *match,
if (err) if (err)
return err; return err;
encap_valid = !!(match->key->eth.vlan.tci & htons(VLAN_TAG_PRESENT)); encap_valid = !!(match->key->eth.vlan.tci & htons(VLAN_CFI_MASK));
if (encap_valid) { if (encap_valid) {
err = __parse_vlan_from_nlattrs(match, key_attrs, true, a, err = __parse_vlan_from_nlattrs(match, key_attrs, true, a,
is_mask, log); is_mask, log);
...@@ -2943,7 +2943,7 @@ static int __ovs_nla_copy_actions(struct net *net, const struct nlattr *attr, ...@@ -2943,7 +2943,7 @@ static int __ovs_nla_copy_actions(struct net *net, const struct nlattr *attr,
vlan = nla_data(a); vlan = nla_data(a);
if (!eth_type_vlan(vlan->vlan_tpid)) if (!eth_type_vlan(vlan->vlan_tpid))
return -EINVAL; return -EINVAL;
if (!(vlan->vlan_tci & htons(VLAN_TAG_PRESENT))) if (!(vlan->vlan_tci & htons(VLAN_CFI_MASK)))
return -EINVAL; return -EINVAL;
vlan_tci = vlan->vlan_tci; vlan_tci = vlan->vlan_tci;
break; break;
...@@ -2959,7 +2959,7 @@ static int __ovs_nla_copy_actions(struct net *net, const struct nlattr *attr, ...@@ -2959,7 +2959,7 @@ static int __ovs_nla_copy_actions(struct net *net, const struct nlattr *attr,
/* Prohibit push MPLS other than to a white list /* Prohibit push MPLS other than to a white list
* for packets that have a known tag order. * for packets that have a known tag order.
*/ */
if (vlan_tci & htons(VLAN_TAG_PRESENT) || if (vlan_tci & htons(VLAN_CFI_MASK) ||
(eth_type != htons(ETH_P_IP) && (eth_type != htons(ETH_P_IP) &&
eth_type != htons(ETH_P_IPV6) && eth_type != htons(ETH_P_IPV6) &&
eth_type != htons(ETH_P_ARP) && eth_type != htons(ETH_P_ARP) &&
...@@ -2971,7 +2971,7 @@ static int __ovs_nla_copy_actions(struct net *net, const struct nlattr *attr, ...@@ -2971,7 +2971,7 @@ static int __ovs_nla_copy_actions(struct net *net, const struct nlattr *attr,
} }
case OVS_ACTION_ATTR_POP_MPLS: case OVS_ACTION_ATTR_POP_MPLS:
if (vlan_tci & htons(VLAN_TAG_PRESENT) || if (vlan_tci & htons(VLAN_CFI_MASK) ||
!eth_p_mpls(eth_type)) !eth_p_mpls(eth_type))
return -EINVAL; return -EINVAL;
...@@ -3036,7 +3036,7 @@ static int __ovs_nla_copy_actions(struct net *net, const struct nlattr *attr, ...@@ -3036,7 +3036,7 @@ static int __ovs_nla_copy_actions(struct net *net, const struct nlattr *attr,
case OVS_ACTION_ATTR_POP_ETH: case OVS_ACTION_ATTR_POP_ETH:
if (mac_proto != MAC_PROTO_ETHERNET) if (mac_proto != MAC_PROTO_ETHERNET)
return -EINVAL; return -EINVAL;
if (vlan_tci & htons(VLAN_TAG_PRESENT)) if (vlan_tci & htons(VLAN_CFI_MASK))
return -EINVAL; return -EINVAL;
mac_proto = MAC_PROTO_NONE; mac_proto = MAC_PROTO_NONE;
break; break;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册