aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSimon Horman <horms@verge.net.au>2012-04-25 10:18:30 +0900
committerBen Pfaff <blp@nicira.com>2012-04-25 10:04:04 -0700
commit36f3999b707b5456bacd780d0f9acdac85107f60 (patch)
treeef4be8134274794cb3857a43f3c663221a643df7 /lib
parentcb6e2b01787b71c39678e9ef98e3b9374a7db378 (diff)
Add OXM data to mf_fields
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>
Diffstat (limited to 'lib')
-rw-r--r--lib/meta-flow.c47
-rw-r--r--lib/meta-flow.h9
2 files changed, 50 insertions, 6 deletions
diff --git a/lib/meta-flow.c b/lib/meta-flow.c
index 84ba88bf..3db528fb 100644
--- a/lib/meta-flow.c
+++ b/lib/meta-flow.c
@@ -54,6 +54,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
MFP_NONE,
true,
NXM_NX_TUN_ID, "NXM_NX_TUN_ID",
+ 0, NULL,
}, {
MFF_IN_PORT, "in_port", NULL,
MF_FIELD_SIZES(be16),
@@ -62,6 +63,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
MFP_NONE,
false,
NXM_OF_IN_PORT, "NXM_OF_IN_PORT",
+ OXM_OF_IN_PORT, "OXM_OF_IN_PORT",
},
#define REGISTER(IDX) \
@@ -73,7 +75,8 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
MFP_NONE, \
true, \
NXM_NX_REG(IDX), \
- "NXM_NX_REG" #IDX \
+ "NXM_NX_REG" #IDX, \
+ 0, NULL, \
}
#if FLOW_N_REGS > 0
REGISTER(0),
@@ -115,6 +118,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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),
@@ -123,6 +127,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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),
@@ -131,6 +136,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
MFP_NONE,
false,
NXM_OF_ETH_TYPE, "NXM_OF_ETH_TYPE",
+ OXM_OF_ETH_TYPE, "OXM_OF_ETH_TYPE",
},
{
@@ -141,6 +147,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
MFP_NONE,
true,
NXM_OF_VLAN_TCI, "NXM_OF_VLAN_TCI",
+ 0, NULL,
}, {
MFF_VLAN_VID, "dl_vlan", NULL,
sizeof(ovs_be16), 12,
@@ -148,7 +155,8 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
MFS_DECIMAL,
MFP_NONE,
true,
- 0, NULL
+ 0, NULL,
+ OXM_OF_VLAN_VID, "OXM_OF_VLAN_VID",
}, {
MFF_VLAN_PCP, "dl_vlan_pcp", NULL,
1, 3,
@@ -156,7 +164,8 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
MFS_DECIMAL,
MFP_NONE,
true,
- 0, NULL
+ 0, NULL,
+ OXM_OF_VLAN_PCP, "OXM_OF_VLAN_PCP",
},
/* ## -- ## */
@@ -171,6 +180,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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),
@@ -179,6 +189,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
MFP_IPV4,
true,
NXM_OF_IP_DST, "NXM_OF_IP_DST",
+ OXM_OF_IPV4_DST, "OXM_OF_IPV4_DST",
},
{
@@ -189,6 +200,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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),
@@ -197,6 +209,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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,
@@ -206,6 +219,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
MFP_IPV6,
false,
NXM_NX_IPV6_LABEL, "NXM_NX_IPV6_LABEL",
+ OXM_OF_IPV6_FLABEL, "OXM_OF_IPV6_FLABEL",
},
{
@@ -216,6 +230,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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),
@@ -223,7 +238,8 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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,
@@ -232,6 +248,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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),
@@ -239,7 +256,8 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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,
@@ -247,7 +265,8 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
MFS_FRAG,
MFP_IP_ANY,
false,
- NXM_NX_IP_FRAG, "NXM_NX_IP_FRAG"
+ NXM_NX_IP_FRAG, "NXM_NX_IP_FRAG",
+ 0, NULL,
},
{
@@ -258,6 +277,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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),
@@ -266,6 +286,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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),
@@ -274,6 +295,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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),
@@ -282,6 +304,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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),
@@ -290,6 +313,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
MFP_ARP,
false,
NXM_NX_ARP_THA, "NXM_NX_ARP_THA",
+ OXM_OF_ARP_THA, "OXM_OF_ARP_THA",
},
/* ## -- ## */
@@ -304,6 +328,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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),
@@ -312,6 +337,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
MFP_TCP,
true,
NXM_OF_TCP_DST, "NXM_OF_TCP_DST",
+ OXM_OF_TCP_DST, "OXM_OF_TCP_DST",
},
{
@@ -322,6 +348,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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),
@@ -330,6 +357,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
MFP_UDP,
true,
NXM_OF_UDP_DST, "NXM_OF_UDP_DST",
+ OXM_OF_UDP_DST, "OXM_OF_UDP_DST",
},
{
@@ -340,6 +368,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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),
@@ -348,6 +377,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
MFP_ICMPV4,
false,
NXM_OF_ICMP_CODE, "NXM_OF_ICMP_CODE",
+ OXM_OF_ICMPV4_CODE, "OXM_OF_ICMPV4_CODE",
},
{
@@ -358,6 +388,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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),
@@ -366,6 +397,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
MFP_ICMPV6,
false,
NXM_NX_ICMPV6_CODE, "NXM_NX_ICMPV6_CODE",
+ OXM_OF_ICMPV6_CODE, "OXM_OF_ICMPV6_CODE",
},
/* ## ---- ## */
@@ -380,6 +412,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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),
@@ -388,6 +421,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
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),
@@ -396,6 +430,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = {
MFP_ND_ADVERT,
false,
NXM_NX_ND_TLL, "NXM_NX_ND_TLL",
+ OXM_OF_IPV6_ND_TLL, "OXM_OF_IPV6_ND_TLL",
}
};
diff --git a/lib/meta-flow.h b/lib/meta-flow.h
index 91d52c7d..6340b3e9 100644
--- a/lib/meta-flow.h
+++ b/lib/meta-flow.h
@@ -196,6 +196,15 @@ struct mf_field {
* 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. */