{
MFF_TUN_ID, "tun_id", NULL,
MF_FIELD_SIZES(be64),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_HEXADECIMAL,
MFP_NONE,
true,
}, {
MFF_METADATA, "metadata", NULL,
MF_FIELD_SIZES(be64),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_HEXADECIMAL,
MFP_NONE,
true,
}, {
MFF_IN_PORT, "in_port", NULL,
MF_FIELD_SIZES(be16),
- MFM_NONE, FWW_IN_PORT,
+ MFM_NONE,
MFS_OFP_PORT,
MFP_NONE,
false,
{ \
MFF_REG##IDX, "reg" #IDX, NULL, \
MF_FIELD_SIZES(be32), \
- MFM_FULLY, 0, \
+ MFM_FULLY, \
MFS_HEXADECIMAL, \
MFP_NONE, \
true, \
{
MFF_ETH_SRC, "eth_src", "dl_src",
MF_FIELD_SIZES(mac),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_ETHERNET,
MFP_NONE,
true,
}, {
MFF_ETH_DST, "eth_dst", "dl_dst",
MF_FIELD_SIZES(mac),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_ETHERNET,
MFP_NONE,
true,
}, {
MFF_ETH_TYPE, "eth_type", "dl_type",
MF_FIELD_SIZES(be16),
- MFM_NONE, 0,
+ MFM_NONE,
MFS_HEXADECIMAL,
MFP_NONE,
false,
{
MFF_VLAN_TCI, "vlan_tci", NULL,
MF_FIELD_SIZES(be16),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_HEXADECIMAL,
MFP_NONE,
true,
}, {
MFF_DL_VLAN, "dl_vlan", NULL,
sizeof(ovs_be16), 12,
- MFM_NONE, 0,
+ MFM_NONE,
MFS_DECIMAL,
MFP_NONE,
true,
}, {
MFF_VLAN_VID, "vlan_vid", NULL,
sizeof(ovs_be16), 12,
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_DECIMAL,
MFP_NONE,
true,
}, {
MFF_DL_VLAN_PCP, "dl_vlan_pcp", NULL,
1, 3,
- MFM_NONE, 0,
+ MFM_NONE,
MFS_DECIMAL,
MFP_NONE,
true,
}, {
MFF_VLAN_PCP, "vlan_pcp", NULL,
1, 3,
- MFM_NONE, 0,
+ MFM_NONE,
MFS_DECIMAL,
MFP_VLAN_VID,
true,
{
MFF_IPV4_SRC, "ip_src", "nw_src",
MF_FIELD_SIZES(be32),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_IPV4,
MFP_IPV4,
true,
}, {
MFF_IPV4_DST, "ip_dst", "nw_dst",
MF_FIELD_SIZES(be32),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_IPV4,
MFP_IPV4,
true,
{
MFF_IPV6_SRC, "ipv6_src", NULL,
MF_FIELD_SIZES(ipv6),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_IPV6,
MFP_IPV6,
true,
}, {
MFF_IPV6_DST, "ipv6_dst", NULL,
MF_FIELD_SIZES(ipv6),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_IPV6,
MFP_IPV6,
true,
{
MFF_IPV6_LABEL, "ipv6_label", NULL,
4, 20,
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_HEXADECIMAL,
MFP_IPV6,
false,
{
MFF_IP_PROTO, "nw_proto", NULL,
MF_FIELD_SIZES(u8),
- MFM_NONE, 0,
+ MFM_NONE,
MFS_DECIMAL,
MFP_IP_ANY,
false,
}, {
MFF_IP_DSCP, "nw_tos", NULL,
MF_FIELD_SIZES(u8),
- MFM_NONE, 0,
+ MFM_NONE,
MFS_DECIMAL,
MFP_IP_ANY,
true,
}, {
MFF_IP_ECN, "nw_ecn", NULL,
1, 2,
- MFM_NONE, 0,
+ MFM_NONE,
MFS_DECIMAL,
MFP_IP_ANY,
true,
}, {
MFF_IP_TTL, "nw_ttl", NULL,
MF_FIELD_SIZES(u8),
- MFM_NONE, 0,
+ MFM_NONE,
MFS_DECIMAL,
MFP_IP_ANY,
true,
}, {
MFF_IP_FRAG, "ip_frag", NULL,
1, 2,
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_FRAG,
MFP_IP_ANY,
false,
{
MFF_ARP_OP, "arp_op", NULL,
MF_FIELD_SIZES(be16),
- MFM_NONE, 0,
+ MFM_NONE,
MFS_DECIMAL,
MFP_ARP,
false,
}, {
MFF_ARP_SPA, "arp_spa", NULL,
MF_FIELD_SIZES(be32),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_IPV4,
MFP_ARP,
false,
}, {
MFF_ARP_TPA, "arp_tpa", NULL,
MF_FIELD_SIZES(be32),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_IPV4,
MFP_ARP,
false,
}, {
MFF_ARP_SHA, "arp_sha", NULL,
MF_FIELD_SIZES(mac),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_ETHERNET,
MFP_ARP,
false,
}, {
MFF_ARP_THA, "arp_tha", NULL,
MF_FIELD_SIZES(mac),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_ETHERNET,
MFP_ARP,
false,
{
MFF_TCP_SRC, "tcp_src", "tp_src",
MF_FIELD_SIZES(be16),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_DECIMAL,
MFP_TCP,
true,
}, {
MFF_TCP_DST, "tcp_dst", "tp_dst",
MF_FIELD_SIZES(be16),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_DECIMAL,
MFP_TCP,
true,
{
MFF_UDP_SRC, "udp_src", NULL,
MF_FIELD_SIZES(be16),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_DECIMAL,
MFP_UDP,
true,
}, {
MFF_UDP_DST, "udp_dst", NULL,
MF_FIELD_SIZES(be16),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_DECIMAL,
MFP_UDP,
true,
{
MFF_ICMPV4_TYPE, "icmp_type", NULL,
MF_FIELD_SIZES(u8),
- MFM_NONE, 0,
+ MFM_NONE,
MFS_DECIMAL,
MFP_ICMPV4,
false,
}, {
MFF_ICMPV4_CODE, "icmp_code", NULL,
MF_FIELD_SIZES(u8),
- MFM_NONE, 0,
+ MFM_NONE,
MFS_DECIMAL,
MFP_ICMPV4,
false,
{
MFF_ICMPV6_TYPE, "icmpv6_type", NULL,
MF_FIELD_SIZES(u8),
- MFM_NONE, 0,
+ MFM_NONE,
MFS_DECIMAL,
MFP_ICMPV6,
false,
}, {
MFF_ICMPV6_CODE, "icmpv6_code", NULL,
MF_FIELD_SIZES(u8),
- MFM_NONE, 0,
+ MFM_NONE,
MFS_DECIMAL,
MFP_ICMPV6,
false,
{
MFF_ND_TARGET, "nd_target", NULL,
MF_FIELD_SIZES(ipv6),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_IPV6,
MFP_ND,
false,
}, {
MFF_ND_SLL, "nd_sll", NULL,
MF_FIELD_SIZES(mac),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_ETHERNET,
MFP_ND_SOLICIT,
false,
}, {
MFF_ND_TLL, "nd_tll", NULL,
MF_FIELD_SIZES(mac),
- MFM_FULLY, 0,
+ MFM_FULLY,
MFS_ETHERNET,
MFP_ND_ADVERT,
false,
mf_is_all_wild(const struct mf_field *mf, const struct flow_wildcards *wc)
{
switch (mf->id) {
- case MFF_IN_PORT:
- assert(mf->fww_bit != 0);
- return (wc->wildcards & mf->fww_bit) != 0;
-
case MFF_TUN_ID:
return !wc->tun_id_mask;
case MFF_METADATA:
return !wc->metadata_mask;
-
+ case MFF_IN_PORT:
+ return !wc->in_port_mask;
CASE_MFF_REGS:
return !wc->reg_masks[mf->id - MFF_REG0];
union mf_value *mask)
{
switch (mf->id) {
- case MFF_IN_PORT:
- assert(mf->fww_bit != 0);
- memset(mask, wc->wildcards & mf->fww_bit ? 0x00 : 0xff, mf->n_bytes);
- break;
-
case MFF_TUN_ID:
mask->be64 = wc->tun_id_mask;
break;
case MFF_METADATA:
mask->be64 = wc->metadata_mask;
break;
-
+ case MFF_IN_PORT:
+ mask->be16 = htons(wc->in_port_mask);
+ break;
CASE_MFF_REGS:
mask->be32 = htonl(wc->reg_masks[mf->id - MFF_REG0]);
break;
cls_rule_set_metadata_masked(rule, htonll(0), htonll(0));
case MFF_IN_PORT:
- rule->wc.wildcards |= FWW_IN_PORT;
rule->flow.in_port = 0;
+ rule->wc.in_port_mask = 0;
break;
CASE_MFF_REGS: