NXM_OF_VLAN_TCI, "NXM_OF_VLAN_TCI",
NXM_OF_VLAN_TCI, "NXM_OF_VLAN_TCI",
}, {
- MFF_VLAN_VID, "dl_vlan", NULL,
+ MFF_DL_VLAN, "dl_vlan", NULL,
sizeof(ovs_be16), 12,
MFM_NONE, 0,
MFS_DECIMAL,
MFP_NONE,
true,
+ 0, NULL,
+ 0, NULL,
+ }, {
+ MFF_VLAN_VID, "vlan_vid", NULL,
+ sizeof(ovs_be16), 12,
+ MFM_FULLY, 0,
+ MFS_DECIMAL,
+ MFP_NONE,
+ true,
OXM_OF_VLAN_VID, "OXM_OF_VLAN_VID",
OXM_OF_VLAN_VID, "OXM_OF_VLAN_VID",
}, {
- MFF_VLAN_PCP, "dl_vlan_pcp", NULL,
+ MFF_DL_VLAN_PCP, "dl_vlan_pcp", NULL,
1, 3,
MFM_NONE, 0,
MFS_DECIMAL,
MFP_NONE,
true,
+ 0, NULL,
+ 0, NULL,
+ }, {
+ MFF_VLAN_PCP, "vlan_pcp", NULL,
+ 1, 3,
+ MFM_NONE, 0,
+ MFS_DECIMAL,
+ MFP_VLAN_VID,
+ true,
OXM_OF_VLAN_PCP, "OXM_OF_VLAN_PCP",
OXM_OF_VLAN_PCP, "OXM_OF_VLAN_PCP",
},
case MFF_VLAN_TCI:
return !wc->vlan_tci_mask;
- case MFF_VLAN_VID:
+ case MFF_DL_VLAN:
return !(wc->vlan_tci_mask & htons(VLAN_VID_MASK));
+ case MFF_VLAN_VID:
+ return !(wc->vlan_tci_mask & htons(VLAN_VID_MASK | VLAN_CFI));
+ case MFF_DL_VLAN_PCP:
case MFF_VLAN_PCP:
return !(wc->vlan_tci_mask & htons(VLAN_PCP_MASK));
case MFF_VLAN_TCI:
mask->be16 = wc->vlan_tci_mask;
break;
- case MFF_VLAN_VID:
+ case MFF_DL_VLAN:
mask->be16 = wc->vlan_tci_mask & htons(VLAN_VID_MASK);
break;
+ case MFF_VLAN_VID:
+ mask->be16 = wc->vlan_tci_mask & htons(VLAN_VID_MASK | VLAN_CFI);
+ break;
+ case MFF_DL_VLAN_PCP:
case MFF_VLAN_PCP:
mask->u8 = vlan_tci_to_pcp(wc->vlan_tci_mask);
break;
return flow->dl_type == htons(ETH_TYPE_IP);
case MFP_IPV6:
return flow->dl_type == htons(ETH_TYPE_IPV6);
+ case MFP_VLAN_VID:
+ return (flow->vlan_tci & htons(VLAN_CFI)) != 0;
case MFP_IP_ANY:
return is_ip_any(flow);
case MFF_ARP_OP:
return !(value->be16 & htons(0xff00));
- case MFF_VLAN_VID:
+ case MFF_DL_VLAN:
return !(value->be16 & htons(VLAN_CFI | VLAN_PCP_MASK));
+ case MFF_VLAN_VID:
+ return !(value->be16 & htons(VLAN_PCP_MASK));
+ case MFF_DL_VLAN_PCP:
case MFF_VLAN_PCP:
return !(value->u8 & ~(VLAN_PCP_MASK >> VLAN_PCP_SHIFT));
value->be16 = flow->vlan_tci;
break;
- case MFF_VLAN_VID:
+ case MFF_DL_VLAN:
value->be16 = flow->vlan_tci & htons(VLAN_VID_MASK);
break;
+ case MFF_VLAN_VID:
+ value->be16 = flow->vlan_tci & htons(VLAN_VID_MASK | VLAN_CFI);
+ break;
+ case MFF_DL_VLAN_PCP:
case MFF_VLAN_PCP:
value->u8 = vlan_tci_to_pcp(flow->vlan_tci);
break;
cls_rule_set_dl_tci(rule, value->be16);
break;
- case MFF_VLAN_VID:
+ case MFF_DL_VLAN:
cls_rule_set_dl_vlan(rule, value->be16);
break;
+ case MFF_VLAN_VID:
+ cls_rule_set_vlan_vid(rule, value->be16);
+ break;
+ case MFF_DL_VLAN_PCP:
case MFF_VLAN_PCP:
cls_rule_set_dl_vlan_pcp(rule, value->u8);
break;
flow->vlan_tci = value->be16;
break;
+ case MFF_DL_VLAN:
+ flow_set_dl_vlan(flow, value->be16);
+ break;
case MFF_VLAN_VID:
flow_set_vlan_vid(flow, value->be16);
break;
+ case MFF_DL_VLAN_PCP:
case MFF_VLAN_PCP:
flow_set_vlan_pcp(flow, value->u8);
break;
cls_rule_set_dl_tci_masked(rule, htons(0), htons(0));
break;
+ case MFF_DL_VLAN:
case MFF_VLAN_VID:
cls_rule_set_any_vid(rule);
break;
+ case MFF_DL_VLAN_PCP:
case MFF_VLAN_PCP:
cls_rule_set_any_pcp(rule);
break;
switch (mf->id) {
case MFF_IN_PORT:
case MFF_ETH_TYPE:
- case MFF_VLAN_VID:
+ case MFF_DL_VLAN:
+ case MFF_DL_VLAN_PCP:
case MFF_VLAN_PCP:
case MFF_IP_PROTO:
case MFF_IP_TTL:
cls_rule_set_dl_tci_masked(rule, value->be16, mask->be16);
break;
+ case MFF_VLAN_VID:
+ cls_rule_set_vlan_vid_masked(rule, value->be16, mask->be16);
+ break;
+
case MFF_IPV4_SRC:
cls_rule_set_nw_src_masked(rule, value->be32, mask->be32);
break;
value->be16 &= htons(0xff);
break;
- case MFF_VLAN_VID:
+ case MFF_DL_VLAN:
value->be16 &= htons(VLAN_VID_MASK);
break;
+ case MFF_VLAN_VID:
+ value->be16 &= htons(VLAN_VID_MASK | VLAN_CFI);
+ break;
+ case MFF_DL_VLAN_PCP:
case MFF_VLAN_PCP:
value->u8 &= 0x07;
break;