Add oxm_name and oxm_header elements to struct mf_field
and populate those entries for fields that are present
in both NXM and the OXM basic class.
This implementation was suggested by Ben Pfaff.
This does not address any possible differences in the NXM and
OXM basic class fields, for instance different maskability.
That may be addressed later as needed.
Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Ben Pfaff <blp@nicira.com>
MFP_NONE,
true,
NXM_NX_TUN_ID, "NXM_NX_TUN_ID",
MFP_NONE,
true,
NXM_NX_TUN_ID, "NXM_NX_TUN_ID",
}, {
MFF_IN_PORT, "in_port", NULL,
MF_FIELD_SIZES(be16),
}, {
MFF_IN_PORT, "in_port", NULL,
MF_FIELD_SIZES(be16),
MFP_NONE,
false,
NXM_OF_IN_PORT, "NXM_OF_IN_PORT",
MFP_NONE,
false,
NXM_OF_IN_PORT, "NXM_OF_IN_PORT",
+ OXM_OF_IN_PORT, "OXM_OF_IN_PORT",
},
#define REGISTER(IDX) \
},
#define REGISTER(IDX) \
MFP_NONE, \
true, \
NXM_NX_REG(IDX), \
MFP_NONE, \
true, \
NXM_NX_REG(IDX), \
+ "NXM_NX_REG" #IDX, \
+ 0, NULL, \
}
#if FLOW_N_REGS > 0
REGISTER(0),
}
#if FLOW_N_REGS > 0
REGISTER(0),
MFP_NONE,
true,
NXM_OF_ETH_SRC, "NXM_OF_ETH_SRC",
MFP_NONE,
true,
NXM_OF_ETH_SRC, "NXM_OF_ETH_SRC",
+ OXM_OF_ETH_SRC, "OXM_OF_ETH_SRC",
}, {
MFF_ETH_DST, "eth_dst", "dl_dst",
MF_FIELD_SIZES(mac),
}, {
MFF_ETH_DST, "eth_dst", "dl_dst",
MF_FIELD_SIZES(mac),
MFP_NONE,
true,
NXM_OF_ETH_DST, "NXM_OF_ETH_DST",
MFP_NONE,
true,
NXM_OF_ETH_DST, "NXM_OF_ETH_DST",
+ OXM_OF_ETH_DST, "OXM_OF_ETH_DST",
}, {
MFF_ETH_TYPE, "eth_type", "dl_type",
MF_FIELD_SIZES(be16),
}, {
MFF_ETH_TYPE, "eth_type", "dl_type",
MF_FIELD_SIZES(be16),
MFP_NONE,
false,
NXM_OF_ETH_TYPE, "NXM_OF_ETH_TYPE",
MFP_NONE,
false,
NXM_OF_ETH_TYPE, "NXM_OF_ETH_TYPE",
+ OXM_OF_ETH_TYPE, "OXM_OF_ETH_TYPE",
MFP_NONE,
true,
NXM_OF_VLAN_TCI, "NXM_OF_VLAN_TCI",
MFP_NONE,
true,
NXM_OF_VLAN_TCI, "NXM_OF_VLAN_TCI",
}, {
MFF_VLAN_VID, "dl_vlan", NULL,
sizeof(ovs_be16), 12,
}, {
MFF_VLAN_VID, "dl_vlan", NULL,
sizeof(ovs_be16), 12,
MFS_DECIMAL,
MFP_NONE,
true,
MFS_DECIMAL,
MFP_NONE,
true,
+ 0, NULL,
+ OXM_OF_VLAN_VID, "OXM_OF_VLAN_VID",
}, {
MFF_VLAN_PCP, "dl_vlan_pcp", NULL,
1, 3,
}, {
MFF_VLAN_PCP, "dl_vlan_pcp", NULL,
1, 3,
MFS_DECIMAL,
MFP_NONE,
true,
MFS_DECIMAL,
MFP_NONE,
true,
+ 0, NULL,
+ OXM_OF_VLAN_PCP, "OXM_OF_VLAN_PCP",
MFP_IPV4,
true,
NXM_OF_IP_SRC, "NXM_OF_IP_SRC",
MFP_IPV4,
true,
NXM_OF_IP_SRC, "NXM_OF_IP_SRC",
+ OXM_OF_IPV4_SRC, "OXM_OF_IPV4_SRC",
}, {
MFF_IPV4_DST, "ip_dst", "nw_dst",
MF_FIELD_SIZES(be32),
}, {
MFF_IPV4_DST, "ip_dst", "nw_dst",
MF_FIELD_SIZES(be32),
MFP_IPV4,
true,
NXM_OF_IP_DST, "NXM_OF_IP_DST",
MFP_IPV4,
true,
NXM_OF_IP_DST, "NXM_OF_IP_DST",
+ OXM_OF_IPV4_DST, "OXM_OF_IPV4_DST",
MFP_IPV6,
true,
NXM_NX_IPV6_SRC, "NXM_NX_IPV6_SRC",
MFP_IPV6,
true,
NXM_NX_IPV6_SRC, "NXM_NX_IPV6_SRC",
+ OXM_OF_IPV6_SRC, "OXM_OF_IPV6_SRC",
}, {
MFF_IPV6_DST, "ipv6_dst", NULL,
MF_FIELD_SIZES(ipv6),
}, {
MFF_IPV6_DST, "ipv6_dst", NULL,
MF_FIELD_SIZES(ipv6),
MFP_IPV6,
true,
NXM_NX_IPV6_DST, "NXM_NX_IPV6_DST",
MFP_IPV6,
true,
NXM_NX_IPV6_DST, "NXM_NX_IPV6_DST",
+ OXM_OF_IPV6_DST, "OXM_OF_IPV6_DST",
},
{
MFF_IPV6_LABEL, "ipv6_label", NULL,
},
{
MFF_IPV6_LABEL, "ipv6_label", NULL,
MFP_IPV6,
false,
NXM_NX_IPV6_LABEL, "NXM_NX_IPV6_LABEL",
MFP_IPV6,
false,
NXM_NX_IPV6_LABEL, "NXM_NX_IPV6_LABEL",
+ OXM_OF_IPV6_FLABEL, "OXM_OF_IPV6_FLABEL",
MFP_IP_ANY,
false,
NXM_OF_IP_PROTO, "NXM_OF_IP_PROTO",
MFP_IP_ANY,
false,
NXM_OF_IP_PROTO, "NXM_OF_IP_PROTO",
+ OXM_OF_IP_PROTO, "OXM_OF_IP_PROTO",
}, {
MFF_IP_DSCP, "nw_tos", NULL,
MF_FIELD_SIZES(u8),
}, {
MFF_IP_DSCP, "nw_tos", NULL,
MF_FIELD_SIZES(u8),
MFS_DECIMAL,
MFP_IP_ANY,
true,
MFS_DECIMAL,
MFP_IP_ANY,
true,
- NXM_OF_IP_TOS, "NXM_OF_IP_TOS"
+ NXM_OF_IP_TOS, "NXM_OF_IP_TOS",
+ OXM_OF_IP_DSCP, "OXM_OF_IP_DSCP",
}, {
MFF_IP_ECN, "nw_ecn", NULL,
1, 2,
}, {
MFF_IP_ECN, "nw_ecn", NULL,
1, 2,
MFP_IP_ANY,
true,
NXM_NX_IP_ECN, "NXM_NX_IP_ECN",
MFP_IP_ANY,
true,
NXM_NX_IP_ECN, "NXM_NX_IP_ECN",
+ OXM_OF_IP_ECN, "OXM_OF_IP_ECN",
}, {
MFF_IP_TTL, "nw_ttl", NULL,
MF_FIELD_SIZES(u8),
}, {
MFF_IP_TTL, "nw_ttl", NULL,
MF_FIELD_SIZES(u8),
MFS_DECIMAL,
MFP_IP_ANY,
true,
MFS_DECIMAL,
MFP_IP_ANY,
true,
- NXM_NX_IP_TTL, "NXM_NX_IP_TTL"
+ NXM_NX_IP_TTL, "NXM_NX_IP_TTL",
+ 0, NULL,
}, {
MFF_IP_FRAG, "ip_frag", NULL,
1, 2,
}, {
MFF_IP_FRAG, "ip_frag", NULL,
1, 2,
MFS_FRAG,
MFP_IP_ANY,
false,
MFS_FRAG,
MFP_IP_ANY,
false,
- NXM_NX_IP_FRAG, "NXM_NX_IP_FRAG"
+ NXM_NX_IP_FRAG, "NXM_NX_IP_FRAG",
+ 0, NULL,
MFP_ARP,
false,
NXM_OF_ARP_OP, "NXM_OF_ARP_OP",
MFP_ARP,
false,
NXM_OF_ARP_OP, "NXM_OF_ARP_OP",
+ OXM_OF_ARP_OP, "OXM_OF_ARP_OP",
}, {
MFF_ARP_SPA, "arp_spa", NULL,
MF_FIELD_SIZES(be32),
}, {
MFF_ARP_SPA, "arp_spa", NULL,
MF_FIELD_SIZES(be32),
MFP_ARP,
false,
NXM_OF_ARP_SPA, "NXM_OF_ARP_SPA",
MFP_ARP,
false,
NXM_OF_ARP_SPA, "NXM_OF_ARP_SPA",
+ OXM_OF_ARP_SPA, "OXM_OF_ARP_SPA",
}, {
MFF_ARP_TPA, "arp_tpa", NULL,
MF_FIELD_SIZES(be32),
}, {
MFF_ARP_TPA, "arp_tpa", NULL,
MF_FIELD_SIZES(be32),
MFP_ARP,
false,
NXM_OF_ARP_TPA, "NXM_OF_ARP_TPA",
MFP_ARP,
false,
NXM_OF_ARP_TPA, "NXM_OF_ARP_TPA",
+ OXM_OF_ARP_TPA, "OXM_OF_ARP_TPA",
}, {
MFF_ARP_SHA, "arp_sha", NULL,
MF_FIELD_SIZES(mac),
}, {
MFF_ARP_SHA, "arp_sha", NULL,
MF_FIELD_SIZES(mac),
MFP_ARP,
false,
NXM_NX_ARP_SHA, "NXM_NX_ARP_SHA",
MFP_ARP,
false,
NXM_NX_ARP_SHA, "NXM_NX_ARP_SHA",
+ OXM_OF_ARP_SHA, "OXM_OF_ARP_SHA",
}, {
MFF_ARP_THA, "arp_tha", NULL,
MF_FIELD_SIZES(mac),
}, {
MFF_ARP_THA, "arp_tha", NULL,
MF_FIELD_SIZES(mac),
MFP_ARP,
false,
NXM_NX_ARP_THA, "NXM_NX_ARP_THA",
MFP_ARP,
false,
NXM_NX_ARP_THA, "NXM_NX_ARP_THA",
+ OXM_OF_ARP_THA, "OXM_OF_ARP_THA",
MFP_TCP,
true,
NXM_OF_TCP_SRC, "NXM_OF_TCP_SRC",
MFP_TCP,
true,
NXM_OF_TCP_SRC, "NXM_OF_TCP_SRC",
+ OXM_OF_TCP_SRC, "OXM_OF_TCP_SRC",
}, {
MFF_TCP_DST, "tcp_dst", "tp_dst",
MF_FIELD_SIZES(be16),
}, {
MFF_TCP_DST, "tcp_dst", "tp_dst",
MF_FIELD_SIZES(be16),
MFP_TCP,
true,
NXM_OF_TCP_DST, "NXM_OF_TCP_DST",
MFP_TCP,
true,
NXM_OF_TCP_DST, "NXM_OF_TCP_DST",
+ OXM_OF_TCP_DST, "OXM_OF_TCP_DST",
MFP_UDP,
true,
NXM_OF_UDP_SRC, "NXM_OF_UDP_SRC",
MFP_UDP,
true,
NXM_OF_UDP_SRC, "NXM_OF_UDP_SRC",
+ OXM_OF_UDP_SRC, "OXM_OF_UDP_SRC",
}, {
MFF_UDP_DST, "udp_dst", NULL,
MF_FIELD_SIZES(be16),
}, {
MFF_UDP_DST, "udp_dst", NULL,
MF_FIELD_SIZES(be16),
MFP_UDP,
true,
NXM_OF_UDP_DST, "NXM_OF_UDP_DST",
MFP_UDP,
true,
NXM_OF_UDP_DST, "NXM_OF_UDP_DST",
+ OXM_OF_UDP_DST, "OXM_OF_UDP_DST",
MFP_ICMPV4,
false,
NXM_OF_ICMP_TYPE, "NXM_OF_ICMP_TYPE",
MFP_ICMPV4,
false,
NXM_OF_ICMP_TYPE, "NXM_OF_ICMP_TYPE",
+ OXM_OF_ICMPV4_TYPE, "OXM_OF_ICMPV4_TYPE",
}, {
MFF_ICMPV4_CODE, "icmp_code", NULL,
MF_FIELD_SIZES(u8),
}, {
MFF_ICMPV4_CODE, "icmp_code", NULL,
MF_FIELD_SIZES(u8),
MFP_ICMPV4,
false,
NXM_OF_ICMP_CODE, "NXM_OF_ICMP_CODE",
MFP_ICMPV4,
false,
NXM_OF_ICMP_CODE, "NXM_OF_ICMP_CODE",
+ OXM_OF_ICMPV4_CODE, "OXM_OF_ICMPV4_CODE",
MFP_ICMPV6,
false,
NXM_NX_ICMPV6_TYPE, "NXM_NX_ICMPV6_TYPE",
MFP_ICMPV6,
false,
NXM_NX_ICMPV6_TYPE, "NXM_NX_ICMPV6_TYPE",
+ OXM_OF_ICMPV6_TYPE, "OXM_OF_ICMPV6_TYPE",
}, {
MFF_ICMPV6_CODE, "icmpv6_code", NULL,
MF_FIELD_SIZES(u8),
}, {
MFF_ICMPV6_CODE, "icmpv6_code", NULL,
MF_FIELD_SIZES(u8),
MFP_ICMPV6,
false,
NXM_NX_ICMPV6_CODE, "NXM_NX_ICMPV6_CODE",
MFP_ICMPV6,
false,
NXM_NX_ICMPV6_CODE, "NXM_NX_ICMPV6_CODE",
+ OXM_OF_ICMPV6_CODE, "OXM_OF_ICMPV6_CODE",
MFP_ND,
false,
NXM_NX_ND_TARGET, "NXM_NX_ND_TARGET",
MFP_ND,
false,
NXM_NX_ND_TARGET, "NXM_NX_ND_TARGET",
+ OXM_OF_IPV6_ND_TARGET, "OXM_OF_IPV6_ND_TARGET",
}, {
MFF_ND_SLL, "nd_sll", NULL,
MF_FIELD_SIZES(mac),
}, {
MFF_ND_SLL, "nd_sll", NULL,
MF_FIELD_SIZES(mac),
MFP_ND_SOLICIT,
false,
NXM_NX_ND_SLL, "NXM_NX_ND_SLL",
MFP_ND_SOLICIT,
false,
NXM_NX_ND_SLL, "NXM_NX_ND_SLL",
+ OXM_OF_IPV6_ND_SLL, "OXM_OF_IPV6_ND_SLL",
}, {
MFF_ND_TLL, "nd_tll", NULL,
MF_FIELD_SIZES(mac),
}, {
MFF_ND_TLL, "nd_tll", NULL,
MF_FIELD_SIZES(mac),
MFP_ND_ADVERT,
false,
NXM_NX_ND_TLL, "NXM_NX_ND_TLL",
MFP_ND_ADVERT,
false,
NXM_NX_ND_TLL, "NXM_NX_ND_TLL",
+ OXM_OF_IPV6_ND_TLL, "OXM_OF_IPV6_ND_TLL",
* NULL for the following members, respectively. */
uint32_t nxm_header; /* An NXM_* constant (a few fields have 0). */
const char *nxm_name; /* The "NXM_*" constant's name. */
* NULL for the following members, respectively. */
uint32_t nxm_header; /* An NXM_* constant (a few fields have 0). */
const char *nxm_name; /* The "NXM_*" constant's name. */
+
+ /* OXM properties */
+ uint32_t oxm_header; /* Field id in the OXM basic class,
+ * an OXM_* constant.
+ * Ignored if oxm_name is NULL */
+ const char *oxm_name; /* The OXM_* constant's name,
+ * NULL if the field is not present
+ * in the OXM basic class */
+
};
/* The representation of a field's value. */
};
/* The representation of a field's value. */