diff options
author | Ben Pfaff <blp@nicira.com> | 2014-10-07 15:24:11 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2014-10-07 15:25:26 -0700 |
commit | a4ce8b2582e79e16c9ea4ef4565a125620826848 (patch) | |
tree | 8449cc8f6e9d36b4b95094a76f5e6b55242b954d /lib/meta-flow.c | |
parent | 795b3288aa5cb869da4fd50f5ebd09cdcc6d0c5c (diff) | |
download | openvswitch-a4ce8b2582e79e16c9ea4ef4565a125620826848.tar.gz |
meta-flow: Autogenerate mf_field data structures.
This is a first step toward improving the abstraction of OXM and NXM in the
tree. As an immediate improvement, this commit removes all of the
definitions of the OXM and NXM constants from the top-level header files,
because they are no longer used anywhere.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
Acked-by: Jarno Rajahalme <jrajahalme@nicira.com>
Diffstat (limited to 'lib/meta-flow.c')
-rw-r--r-- | lib/meta-flow.c | 769 |
1 files changed, 10 insertions, 759 deletions
diff --git a/lib/meta-flow.c b/lib/meta-flow.c index aa48a1671..b59aae7d9 100644 --- a/lib/meta-flow.c +++ b/lib/meta-flow.c @@ -47,755 +47,7 @@ VLOG_DEFINE_THIS_MODULE(meta_flow); extern const struct mf_field mf_fields[MFF_N_IDS]; /* Silence a warning. */ const struct mf_field mf_fields[MFF_N_IDS] = { - /* ## -------- ## */ - /* ## metadata ## */ - /* ## -------- ## */ - - { - MFF_DP_HASH, "dp_hash", NULL, - MF_FIELD_SIZES(be32), - MFM_FULLY, - MFS_HEXADECIMAL, - MFP_NONE, - false, - NXM_NX_DP_HASH, "NXM_NX_DP_HASH", - NXM_NX_DP_HASH, "NXM_NX_DP_HASH", 0, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, { - MFF_RECIRC_ID, "recirc_id", NULL, - MF_FIELD_SIZES(be32), - MFM_NONE, - MFS_DECIMAL, - MFP_NONE, - false, - NXM_NX_RECIRC_ID, "NXM_NX_RECIRC_ID", - NXM_NX_RECIRC_ID, "NXM_NX_RECIRC_ID", 0, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, { - MFF_TUN_ID, "tun_id", "tunnel_id", - MF_FIELD_SIZES(be64), - MFM_FULLY, - MFS_HEXADECIMAL, - MFP_NONE, - true, - NXM_NX_TUN_ID, "NXM_NX_TUN_ID", - OXM_OF_TUNNEL_ID, "OXM_OF_TUNNEL_ID", OFP13_VERSION, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NXM_OXM_ANY, - FLOW_U32OFS(tunnel.tun_id), - }, { - MFF_TUN_SRC, "tun_src", NULL, - MF_FIELD_SIZES(be32), - MFM_FULLY, - MFS_IPV4, - MFP_NONE, - true, - NXM_NX_TUN_IPV4_SRC, "NXM_NX_TUN_IPV4_SRC", - NXM_NX_TUN_IPV4_SRC, "NXM_NX_TUN_IPV4_SRC", 0, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NXM_OXM_ANY, - FLOW_U32OFS(tunnel.ip_src), - }, { - MFF_TUN_DST, "tun_dst", NULL, - MF_FIELD_SIZES(be32), - MFM_FULLY, - MFS_IPV4, - MFP_NONE, - true, - NXM_NX_TUN_IPV4_DST, "NXM_NX_TUN_IPV4_DST", - NXM_NX_TUN_IPV4_DST, "NXM_NX_TUN_IPV4_DST", 0, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NXM_OXM_ANY, - FLOW_U32OFS(tunnel.ip_dst), - }, { - MFF_TUN_FLAGS, "tun_flags", NULL, - MF_FIELD_SIZES(be16), - MFM_NONE, - MFS_TNL_FLAGS, - MFP_NONE, - false, - 0, NULL, - 0, NULL, 0, - OFPUTIL_P_NONE, - OFPUTIL_P_NONE, - -1, - }, { - MFF_TUN_TTL, "tun_ttl", NULL, - MF_FIELD_SIZES(u8), - MFM_NONE, - MFS_DECIMAL, - MFP_NONE, - false, - 0, NULL, - 0, NULL, 0, - OFPUTIL_P_NONE, - OFPUTIL_P_NONE, - -1, - }, { - MFF_TUN_TOS, "tun_tos", NULL, - MF_FIELD_SIZES(u8), - MFM_NONE, - MFS_DECIMAL, - MFP_NONE, - false, - 0, NULL, - 0, NULL, 0, - OFPUTIL_P_NONE, - OFPUTIL_P_NONE, - -1, - }, { - MFF_METADATA, "metadata", NULL, - MF_FIELD_SIZES(be64), - MFM_FULLY, - MFS_HEXADECIMAL, - MFP_NONE, - true, - OXM_OF_METADATA, "OXM_OF_METADATA", - OXM_OF_METADATA, "OXM_OF_METADATA", OFP12_VERSION, - OFPUTIL_P_NXM_OF11_UP, - OFPUTIL_P_NXM_OF11_UP, - -1, - }, { - MFF_IN_PORT, "in_port", NULL, - MF_FIELD_SIZES(be16), - MFM_NONE, - MFS_OFP_PORT, - MFP_NONE, - true, - NXM_OF_IN_PORT, "NXM_OF_IN_PORT", - NXM_OF_IN_PORT, "NXM_OF_IN_PORT", 0, - OFPUTIL_P_ANY, /* OF11+ via mapping to 32 bits. */ - OFPUTIL_P_NONE, - -1, - }, { - MFF_IN_PORT_OXM, "in_port_oxm", NULL, - MF_FIELD_SIZES(be32), - MFM_NONE, - MFS_OFP_PORT_OXM, - MFP_NONE, - true, - OXM_OF_IN_PORT, "OXM_OF_IN_PORT", - OXM_OF_IN_PORT, "OXM_OF_IN_PORT", OFP12_VERSION, - OFPUTIL_P_OF11_UP, - OFPUTIL_P_NONE, - -1, - }, { - MFF_SKB_PRIORITY, "skb_priority", NULL, - MF_FIELD_SIZES(be32), - MFM_NONE, - MFS_HEXADECIMAL, - MFP_NONE, - false, - 0, NULL, - 0, NULL, 0, - OFPUTIL_P_NONE, - OFPUTIL_P_NONE, - -1, - }, { - MFF_PKT_MARK, "pkt_mark", NULL, - MF_FIELD_SIZES(be32), - MFM_FULLY, - MFS_HEXADECIMAL, - MFP_NONE, - true, - NXM_NX_PKT_MARK, "NXM_NX_PKT_MARK", - NXM_NX_PKT_MARK, "NXM_NX_PKT_MARK", 0, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, - -#define REGISTER(IDX) \ - { \ - MFF_REG##IDX, "reg" #IDX, NULL, \ - MF_FIELD_SIZES(be32), \ - MFM_FULLY, \ - MFS_HEXADECIMAL, \ - MFP_NONE, \ - true, \ - NXM_NX_REG(IDX), "NXM_NX_REG" #IDX, \ - NXM_NX_REG(IDX), "NXM_NX_REG" #IDX, 0, \ - OFPUTIL_P_NXM_OXM_ANY, \ - OFPUTIL_P_NXM_OXM_ANY, \ - -1, \ - } -#if FLOW_N_REGS == 8 - REGISTER(0), - REGISTER(1), - REGISTER(2), - REGISTER(3), - REGISTER(4), - REGISTER(5), - REGISTER(6), - REGISTER(7), -#else -#error "Need to update mf_fields[] to match FLOW_N_REGS" -#endif - -#define XREGISTER(IDX) \ - { \ - MFF_XREG##IDX, "xreg" #IDX, NULL, \ - MF_FIELD_SIZES(be64), \ - MFM_FULLY, \ - MFS_HEXADECIMAL, \ - MFP_NONE, \ - true, \ - OXM_OF_PKT_REG(IDX), "OXM_OF_PKT_REG" #IDX, \ - OXM_OF_PKT_REG(IDX), "OXM_OF_PKT_REG" #IDX, OFP15_VERSION, \ - OFPUTIL_P_NXM_OXM_ANY, \ - OFPUTIL_P_NXM_OXM_ANY, \ - -1, \ - } -#if FLOW_N_XREGS == 4 - XREGISTER(0), - XREGISTER(1), - XREGISTER(2), - XREGISTER(3), -#else -#error "Need to update mf_fields[] to match FLOW_N_XREGS" -#endif - - /* ## -- ## */ - /* ## L2 ## */ - /* ## -- ## */ - - { - MFF_ETH_SRC, "eth_src", "dl_src", - MF_FIELD_SIZES(mac), - MFM_FULLY, - MFS_ETHERNET, - MFP_NONE, - true, - NXM_OF_ETH_SRC, "NXM_OF_ETH_SRC", - OXM_OF_ETH_SRC, "OXM_OF_ETH_SRC", OFP12_VERSION, - OFPUTIL_P_ANY, - OFPUTIL_P_NXM_OF11_UP, /* Bitwise masking only with NXM and OF11+! */ - -1, - }, { - MFF_ETH_DST, "eth_dst", "dl_dst", - MF_FIELD_SIZES(mac), - MFM_FULLY, - MFS_ETHERNET, - MFP_NONE, - true, - NXM_OF_ETH_DST, "NXM_OF_ETH_DST", - OXM_OF_ETH_DST, "OXM_OF_ETH_DST", OFP12_VERSION, - OFPUTIL_P_ANY, - OFPUTIL_P_NXM_OF11_UP, /* Bitwise masking only with NXM and OF11+! */ - -1, - }, { - MFF_ETH_TYPE, "eth_type", "dl_type", - MF_FIELD_SIZES(be16), - MFM_NONE, - MFS_HEXADECIMAL, - MFP_NONE, - false, - NXM_OF_ETH_TYPE, "NXM_OF_ETH_TYPE", - OXM_OF_ETH_TYPE, "OXM_OF_ETH_TYPE", OFP12_VERSION, - OFPUTIL_P_ANY, - OFPUTIL_P_NONE, - -1, - }, - - { - MFF_VLAN_TCI, "vlan_tci", NULL, - MF_FIELD_SIZES(be16), - MFM_FULLY, - MFS_HEXADECIMAL, - MFP_NONE, - true, - NXM_OF_VLAN_TCI, "NXM_OF_VLAN_TCI", - NXM_OF_VLAN_TCI, "NXM_OF_VLAN_TCI", 0, - OFPUTIL_P_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, { - MFF_DL_VLAN, "dl_vlan", NULL, - sizeof(ovs_be16), 12, - MFM_NONE, - MFS_DECIMAL, - MFP_NONE, - true, - 0, NULL, - 0, NULL, 0, - OFPUTIL_P_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, { - MFF_VLAN_VID, "vlan_vid", NULL, - sizeof(ovs_be16), 12, - MFM_FULLY, - MFS_DECIMAL, - MFP_NONE, - true, - OXM_OF_VLAN_VID, "OXM_OF_VLAN_VID", - OXM_OF_VLAN_VID, "OXM_OF_VLAN_VID", OFP12_VERSION, - OFPUTIL_P_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, { - MFF_DL_VLAN_PCP, "dl_vlan_pcp", NULL, - 1, 3, - MFM_NONE, - MFS_DECIMAL, - MFP_NONE, - true, - 0, NULL, - 0, NULL, 0, - OFPUTIL_P_ANY, /* Will be mapped to NXM and OXM. */ - OFPUTIL_P_NONE, - -1, - }, { - MFF_VLAN_PCP, "vlan_pcp", NULL, - 1, 3, - MFM_NONE, - MFS_DECIMAL, - MFP_VLAN_VID, - true, - OXM_OF_VLAN_PCP, "OXM_OF_VLAN_PCP", - OXM_OF_VLAN_PCP, "OXM_OF_VLAN_PCP", OFP12_VERSION, - OFPUTIL_P_ANY, /* Will be mapped to OF10 and NXM. */ - OFPUTIL_P_NONE, - -1, - }, - - /* ## ---- ## */ - /* ## L2.5 ## */ - /* ## ---- ## */ - { - MFF_MPLS_LABEL, "mpls_label", NULL, - 4, 20, - MFM_NONE, - MFS_DECIMAL, - MFP_MPLS, - true, - OXM_OF_MPLS_LABEL, "OXM_OF_MPLS_LABEL", - OXM_OF_MPLS_LABEL, "OXM_OF_MPLS_LABEL", OFP12_VERSION, - OFPUTIL_P_NXM_OF11_UP, - OFPUTIL_P_NONE, - -1, - }, { - MFF_MPLS_TC, "mpls_tc", NULL, - 1, 3, - MFM_NONE, - MFS_DECIMAL, - MFP_MPLS, - true, - OXM_OF_MPLS_TC, "OXM_OF_MPLS_TC", - OXM_OF_MPLS_TC, "OXM_OF_MPLS_TC", OFP12_VERSION, - OFPUTIL_P_NXM_OF11_UP, - OFPUTIL_P_NONE, - -1, - }, { - MFF_MPLS_BOS, "mpls_bos", NULL, - 1, 1, - MFM_NONE, - MFS_DECIMAL, - MFP_MPLS, - false, - OXM_OF_MPLS_BOS, "OXM_OF_MPLS_BOS", - OXM_OF_MPLS_BOS, "OXM_OF_MPLS_BOS", OFP13_VERSION, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NONE, - -1, - }, - - /* ## -- ## */ - /* ## L3 ## */ - /* ## -- ## */ - - { - MFF_IPV4_SRC, "ip_src", "nw_src", - MF_FIELD_SIZES(be32), - MFM_FULLY, - MFS_IPV4, - MFP_IPV4, - true, - NXM_OF_IP_SRC, "NXM_OF_IP_SRC", - OXM_OF_IPV4_SRC, "OXM_OF_IPV4_SRC", OFP12_VERSION, - OFPUTIL_P_ANY, - OFPUTIL_P_NXM_OF11_UP, - FLOW_U32OFS(nw_src), - }, { - MFF_IPV4_DST, "ip_dst", "nw_dst", - MF_FIELD_SIZES(be32), - MFM_FULLY, - MFS_IPV4, - MFP_IPV4, - true, - NXM_OF_IP_DST, "NXM_OF_IP_DST", - OXM_OF_IPV4_DST, "OXM_OF_IPV4_DST", OFP12_VERSION, - OFPUTIL_P_ANY, - OFPUTIL_P_NXM_OF11_UP, - FLOW_U32OFS(nw_dst), - }, - - { - MFF_IPV6_SRC, "ipv6_src", NULL, - MF_FIELD_SIZES(ipv6), - MFM_FULLY, - MFS_IPV6, - MFP_IPV6, - true, - NXM_NX_IPV6_SRC, "NXM_NX_IPV6_SRC", - OXM_OF_IPV6_SRC, "OXM_OF_IPV6_SRC", OFP12_VERSION, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NXM_OXM_ANY, - FLOW_U32OFS(ipv6_src), - }, { - MFF_IPV6_DST, "ipv6_dst", NULL, - MF_FIELD_SIZES(ipv6), - MFM_FULLY, - MFS_IPV6, - MFP_IPV6, - true, - NXM_NX_IPV6_DST, "NXM_NX_IPV6_DST", - OXM_OF_IPV6_DST, "OXM_OF_IPV6_DST", OFP12_VERSION, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NXM_OXM_ANY, - FLOW_U32OFS(ipv6_dst), - }, - { - MFF_IPV6_LABEL, "ipv6_label", NULL, - 4, 20, - MFM_FULLY, - MFS_HEXADECIMAL, - MFP_IPV6, - false, - NXM_NX_IPV6_LABEL, "NXM_NX_IPV6_LABEL", - OXM_OF_IPV6_FLABEL, "OXM_OF_IPV6_FLABEL", OFP12_VERSION, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, - - { - MFF_IP_PROTO, "nw_proto", "ip_proto", - MF_FIELD_SIZES(u8), - MFM_NONE, - MFS_DECIMAL, - MFP_IP_ANY, - false, - NXM_OF_IP_PROTO, "NXM_OF_IP_PROTO", - OXM_OF_IP_PROTO, "OXM_OF_IP_PROTO", OFP12_VERSION, - OFPUTIL_P_ANY, - OFPUTIL_P_NONE, - -1, - }, { - MFF_IP_DSCP, "nw_tos", NULL, - MF_FIELD_SIZES(u8), - MFM_NONE, - MFS_DECIMAL, - MFP_IP_ANY, - true, - NXM_OF_IP_TOS, "NXM_OF_IP_TOS", - NXM_OF_IP_TOS, "NXM_OF_IP_TOS", 0, - OFPUTIL_P_ANY, /* Will be shifted for OXM. */ - OFPUTIL_P_NONE, - -1, - }, { - MFF_IP_DSCP_SHIFTED, "ip_dscp", NULL, - 1, 6, - MFM_NONE, - MFS_DECIMAL, - MFP_IP_ANY, - true, - OXM_OF_IP_DSCP, "OXM_OF_IP_DSCP", - OXM_OF_IP_DSCP, "OXM_OF_IP_DSCP", OFP12_VERSION, - OFPUTIL_P_ANY, /* Will be shifted for non-OXM. */ - OFPUTIL_P_NONE, - -1, - }, { - MFF_IP_ECN, "nw_ecn", "ip_ecn", - 1, 2, - MFM_NONE, - MFS_DECIMAL, - MFP_IP_ANY, - true, - NXM_NX_IP_ECN, "NXM_NX_IP_ECN", - OXM_OF_IP_ECN, "OXM_OF_IP_ECN", OFP12_VERSION, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NONE, - -1, - }, { - MFF_IP_TTL, "nw_ttl", NULL, - MF_FIELD_SIZES(u8), - MFM_NONE, - MFS_DECIMAL, - MFP_IP_ANY, - true, - NXM_NX_IP_TTL, "NXM_NX_IP_TTL", - NXM_NX_IP_TTL, "NXM_NX_IP_TTL", 0, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NONE, - -1, - }, { - MFF_IP_FRAG, "ip_frag", NULL, - 1, 2, - MFM_FULLY, - MFS_FRAG, - MFP_IP_ANY, - false, - NXM_NX_IP_FRAG, "NXM_NX_IP_FRAG", - NXM_NX_IP_FRAG, "NXM_NX_IP_FRAG", 0, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, - - { - MFF_ARP_OP, "arp_op", NULL, - MF_FIELD_SIZES(be16), - MFM_NONE, - MFS_DECIMAL, - MFP_ARP, - true, - NXM_OF_ARP_OP, "NXM_OF_ARP_OP", - OXM_OF_ARP_OP, "OXM_OF_ARP_OP", OFP12_VERSION, - OFPUTIL_P_ANY, - OFPUTIL_P_NONE, - -1, - }, { - MFF_ARP_SPA, "arp_spa", NULL, - MF_FIELD_SIZES(be32), - MFM_FULLY, - MFS_IPV4, - MFP_ARP, - true, - NXM_OF_ARP_SPA, "NXM_OF_ARP_SPA", - OXM_OF_ARP_SPA, "OXM_OF_ARP_SPA", OFP12_VERSION, - OFPUTIL_P_ANY, - OFPUTIL_P_NXM_OF11_UP, - -1, - }, { - MFF_ARP_TPA, "arp_tpa", NULL, - MF_FIELD_SIZES(be32), - MFM_FULLY, - MFS_IPV4, - MFP_ARP, - true, - NXM_OF_ARP_TPA, "NXM_OF_ARP_TPA", - OXM_OF_ARP_TPA, "OXM_OF_ARP_TPA", OFP12_VERSION, - OFPUTIL_P_ANY, - OFPUTIL_P_NXM_OF11_UP, - -1, - }, { - MFF_ARP_SHA, "arp_sha", NULL, - MF_FIELD_SIZES(mac), - MFM_FULLY, - MFS_ETHERNET, - MFP_ARP, - true, - NXM_NX_ARP_SHA, "NXM_NX_ARP_SHA", - OXM_OF_ARP_SHA, "OXM_OF_ARP_SHA", OFP12_VERSION, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, { - MFF_ARP_THA, "arp_tha", NULL, - MF_FIELD_SIZES(mac), - MFM_FULLY, - MFS_ETHERNET, - MFP_ARP, - true, - NXM_NX_ARP_THA, "NXM_NX_ARP_THA", - OXM_OF_ARP_THA, "OXM_OF_ARP_THA", OFP12_VERSION, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, - - /* ## -- ## */ - /* ## L4 ## */ - /* ## -- ## */ - - { - MFF_TCP_SRC, "tcp_src", "tp_src", - MF_FIELD_SIZES(be16), - MFM_FULLY, - MFS_DECIMAL, - MFP_TCP, - true, - NXM_OF_TCP_SRC, "NXM_OF_TCP_SRC", - OXM_OF_TCP_SRC, "OXM_OF_TCP_SRC", OFP12_VERSION, - OFPUTIL_P_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, { - MFF_TCP_DST, "tcp_dst", "tp_dst", - MF_FIELD_SIZES(be16), - MFM_FULLY, - MFS_DECIMAL, - MFP_TCP, - true, - NXM_OF_TCP_DST, "NXM_OF_TCP_DST", - OXM_OF_TCP_DST, "OXM_OF_TCP_DST", OFP12_VERSION, - OFPUTIL_P_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, { - MFF_TCP_FLAGS, "tcp_flags", NULL, - 2, 12, - MFM_FULLY, - MFS_TCP_FLAGS, - MFP_TCP, - false, - NXM_NX_TCP_FLAGS, "NXM_NX_TCP_FLAGS", - OXM_OF_TCP_FLAGS, "OXM_OF_TCP_FLAGS", OFP15_VERSION, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, - - { - MFF_UDP_SRC, "udp_src", NULL, - MF_FIELD_SIZES(be16), - MFM_FULLY, - MFS_DECIMAL, - MFP_UDP, - true, - NXM_OF_UDP_SRC, "NXM_OF_UDP_SRC", - OXM_OF_UDP_SRC, "OXM_OF_UDP_SRC", OFP12_VERSION, - OFPUTIL_P_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, { - MFF_UDP_DST, "udp_dst", NULL, - MF_FIELD_SIZES(be16), - MFM_FULLY, - MFS_DECIMAL, - MFP_UDP, - true, - NXM_OF_UDP_DST, "NXM_OF_UDP_DST", - OXM_OF_UDP_DST, "OXM_OF_UDP_DST", OFP12_VERSION, - OFPUTIL_P_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, - - { - MFF_SCTP_SRC, "sctp_src", NULL, - MF_FIELD_SIZES(be16), - MFM_FULLY, - MFS_DECIMAL, - MFP_SCTP, - true, - OXM_OF_SCTP_SRC, "OXM_OF_SCTP_SRC", - OXM_OF_SCTP_SRC, "OXM_OF_SCTP_SRC", OFP12_VERSION, - OFPUTIL_P_NXM_OF11_UP, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, { - MFF_SCTP_DST, "sctp_dst", NULL, - MF_FIELD_SIZES(be16), - MFM_FULLY, - MFS_DECIMAL, - MFP_SCTP, - true, - OXM_OF_SCTP_DST, "OXM_OF_SCTP_DST", - OXM_OF_SCTP_DST, "OXM_OF_SCTP_DST", OFP12_VERSION, - OFPUTIL_P_NXM_OF11_UP, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, - - { - MFF_ICMPV4_TYPE, "icmp_type", NULL, - MF_FIELD_SIZES(u8), - MFM_NONE, - MFS_DECIMAL, - MFP_ICMPV4, - false, - NXM_OF_ICMP_TYPE, "NXM_OF_ICMP_TYPE", - OXM_OF_ICMPV4_TYPE, "OXM_OF_ICMPV4_TYPE", OFP12_VERSION, - OFPUTIL_P_ANY, - OFPUTIL_P_NONE, - -1, - }, { - MFF_ICMPV4_CODE, "icmp_code", NULL, - MF_FIELD_SIZES(u8), - MFM_NONE, - MFS_DECIMAL, - MFP_ICMPV4, - false, - NXM_OF_ICMP_CODE, "NXM_OF_ICMP_CODE", - OXM_OF_ICMPV4_CODE, "OXM_OF_ICMPV4_CODE", OFP12_VERSION, - OFPUTIL_P_ANY, - OFPUTIL_P_NONE, - -1, - }, - - { - MFF_ICMPV6_TYPE, "icmpv6_type", NULL, - MF_FIELD_SIZES(u8), - MFM_NONE, - MFS_DECIMAL, - MFP_ICMPV6, - false, - NXM_NX_ICMPV6_TYPE, "NXM_NX_ICMPV6_TYPE", - OXM_OF_ICMPV6_TYPE, "OXM_OF_ICMPV6_TYPE", OFP12_VERSION, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NONE, - -1, - }, { - MFF_ICMPV6_CODE, "icmpv6_code", NULL, - MF_FIELD_SIZES(u8), - MFM_NONE, - MFS_DECIMAL, - MFP_ICMPV6, - false, - NXM_NX_ICMPV6_CODE, "NXM_NX_ICMPV6_CODE", - OXM_OF_ICMPV6_CODE, "OXM_OF_ICMPV6_CODE", OFP12_VERSION, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NONE, - -1, - }, - - /* ## ---- ## */ - /* ## L"5" ## */ - /* ## ---- ## */ - - { - MFF_ND_TARGET, "nd_target", NULL, - MF_FIELD_SIZES(ipv6), - MFM_FULLY, - MFS_IPV6, - MFP_ND, - false, - NXM_NX_ND_TARGET, "NXM_NX_ND_TARGET", - OXM_OF_IPV6_ND_TARGET, "OXM_OF_IPV6_ND_TARGET", OFP12_VERSION, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, { - MFF_ND_SLL, "nd_sll", NULL, - MF_FIELD_SIZES(mac), - MFM_FULLY, - MFS_ETHERNET, - MFP_ND_SOLICIT, - false, - NXM_NX_ND_SLL, "NXM_NX_ND_SLL", - OXM_OF_IPV6_ND_SLL, "OXM_OF_IPV6_ND_SLL", OFP12_VERSION, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - }, { - MFF_ND_TLL, "nd_tll", NULL, - MF_FIELD_SIZES(mac), - MFM_FULLY, - MFS_ETHERNET, - MFP_ND_ADVERT, - false, - NXM_NX_ND_TLL, "NXM_NX_ND_TLL", - OXM_OF_IPV6_ND_TLL, "OXM_OF_IPV6_ND_TLL", OFP12_VERSION, - OFPUTIL_P_NXM_OXM_ANY, - OFPUTIL_P_NXM_OXM_ANY, - -1, - } +#include "meta-flow.inc" }; /* Maps an NXM or OXM header value to an mf_field. */ @@ -2132,7 +1384,7 @@ mf_set(const struct mf_field *mf, { if (!mask || is_all_ones(mask, mf->n_bytes)) { mf_set_value(mf, value, match); - return mf->usable_protocols; + return mf->usable_protocols_exact; } else if (is_all_zeros(mask, mf->n_bytes)) { mf_set_wild(mf, match); return OFPUTIL_P_ANY; @@ -2231,11 +1483,11 @@ mf_set(const struct mf_field *mf, case MFF_IPV4_SRC: match_set_nw_src_masked(match, value->be32, mask->be32); - goto cidr_check; + break; case MFF_IPV4_DST: match_set_nw_dst_masked(match, value->be32, mask->be32); - goto cidr_check; + break; case MFF_IPV6_SRC: match_set_ipv6_src_masked(match, &value->ipv6, &mask->ipv6); @@ -2263,11 +1515,11 @@ mf_set(const struct mf_field *mf, case MFF_ARP_SPA: match_set_nw_src_masked(match, value->be32, mask->be32); - goto cidr_check; + break; case MFF_ARP_TPA: match_set_nw_dst_masked(match, value->be32, mask->be32); - goto cidr_check; + break; case MFF_TCP_SRC: case MFF_UDP_SRC: @@ -2290,11 +1542,10 @@ mf_set(const struct mf_field *mf, OVS_NOT_REACHED(); } - return mf->usable_protocols_bitwise; - -cidr_check: - return ip_is_cidr(mask->be32) ? mf->usable_protocols : - mf->usable_protocols_bitwise; + return ((mf->usable_protocols_bitwise == mf->usable_protocols_cidr + || ip_is_cidr(mask->be32)) + ? mf->usable_protocols_cidr + : mf->usable_protocols_bitwise); } static enum ofperr |