MFP_IPV6,
NXM_NX_IPV6_DST,
},
+ {
+ MFF_IPV6_LABEL, "ipv6_label", NULL,
+ 4, 20,
+ MFM_NONE, FWW_IPV6_LABEL,
+ MFS_HEXADECIMAL,
+ MFP_IPV6,
+ NXM_NX_IPV6_LABEL,
+ },
{
MFF_IP_PROTO, "nw_proto", NULL,
case MFF_ETH_SRC:
case MFF_ETH_TYPE:
case MFF_IP_PROTO:
+ case MFF_IPV6_LABEL:
case MFF_ARP_OP:
case MFF_ARP_SHA:
case MFF_ARP_THA:
case MFF_ETH_SRC:
case MFF_ETH_TYPE:
case MFF_IP_PROTO:
+ case MFF_IPV6_LABEL:
case MFF_ARP_OP:
case MFF_ARP_SHA:
case MFF_ARP_THA:
case MFF_VLAN_PCP:
return !(value->u8 & ~7);
+ case MFF_IPV6_LABEL:
+ return !(value->be32 & ~htonl(IPV6_LABEL_MASK));
+
case MFF_N_IDS:
default:
NOT_REACHED();
value->ipv6 = flow->ipv6_dst;
break;
+ case MFF_IPV6_LABEL:
+ value->be32 = flow->ipv6_label;
+ break;
+
case MFF_IP_PROTO:
value->u8 = flow->nw_proto;
break;
cls_rule_set_ipv6_dst(rule, &value->ipv6);
break;
+ case MFF_IPV6_LABEL:
+ cls_rule_set_ipv6_label(rule, value->be32);
+ break;
+
case MFF_IP_PROTO:
cls_rule_set_nw_proto(rule, value->u8);
break;
memset(&rule->flow.ipv6_dst, 0, sizeof rule->flow.ipv6_dst);
break;
+ case MFF_IPV6_LABEL:
+ rule->wc.wildcards |= FWW_IPV6_LABEL;
+ rule->flow.ipv6_label = 0;
+ break;
+
case MFF_IP_PROTO:
rule->wc.wildcards |= FWW_NW_PROTO;
rule->flow.nw_proto = 0;
case MFF_ETH_TYPE:
case MFF_VLAN_VID:
case MFF_VLAN_PCP:
+ case MFF_IPV6_LABEL:
case MFF_IP_PROTO:
case MFF_IP_TOS:
case MFF_ARP_OP:
case MFF_ND_TLL:
break;
+ case MFF_IPV6_LABEL:
+ value->be32 &= ~htonl(IPV6_LABEL_MASK);
+ break;
+
case MFF_IP_TOS:
value->u8 &= ~0x03;
break;