#define NXM_MAKE_WILD_HEADER(HEADER) \
NXM_HEADER_W(NXM_VENDOR(HEADER), NXM_FIELD(HEADER), NXM_LENGTH(HEADER))
-/* ## ------------------------------- ## */
-/* ## OpenFlow 1.0-compatible fields. ## */
-/* ## ------------------------------- ## */
-
-/* Physical or virtual port on which the packet was received.
- *
- * Prereqs: None.
- *
- * Format: 16-bit integer in network byte order.
- *
- * Masking: Not maskable. */
-#define NXM_OF_IN_PORT NXM_HEADER (0x0000, 0, 2)
-
-/* Source or destination address in Ethernet header.
- *
- * Prereqs: None.
- *
- * Format: 48-bit Ethernet MAC address.
- *
- * Masking: Fully maskable, in versions 1.8 and later. Earlier versions only
- * supported the following masks for NXM_OF_ETH_DST_W: 00:00:00:00:00:00,
- * fe:ff:ff:ff:ff:ff, 01:00:00:00:00:00, ff:ff:ff:ff:ff:ff. */
-#define NXM_OF_ETH_DST NXM_HEADER (0x0000, 1, 6)
-#define NXM_OF_ETH_DST_W NXM_HEADER_W(0x0000, 1, 6)
-#define NXM_OF_ETH_SRC NXM_HEADER (0x0000, 2, 6)
-#define NXM_OF_ETH_SRC_W NXM_HEADER_W(0x0000, 2, 6)
-
-/* Packet's Ethernet type.
- *
- * For an Ethernet II packet this is taken from the Ethernet header. For an
- * 802.2 LLC+SNAP header with OUI 00-00-00 this is taken from the SNAP header.
- * A packet that has neither format has value 0x05ff
- * (OFP_DL_TYPE_NOT_ETH_TYPE).
- *
- * For a packet with an 802.1Q header, this is the type of the encapsulated
- * frame.
- *
- * Prereqs: None.
- *
- * Format: 16-bit integer in network byte order.
- *
- * Masking: Not maskable. */
-#define NXM_OF_ETH_TYPE NXM_HEADER (0x0000, 3, 2)
-
-/* 802.1Q TCI.
- *
- * For a packet with an 802.1Q header, this is the Tag Control Information
- * (TCI) field, with the CFI bit forced to 1. For a packet with no 802.1Q
- * header, this has value 0.
- *
- * Prereqs: None.
- *
- * Format: 16-bit integer in network byte order.
- *
- * Masking: Arbitrary masks.
- *
- * This field can be used in various ways:
- *
- * - If it is not constrained at all, the nx_match matches packets without
- * an 802.1Q header or with an 802.1Q header that has any TCI value.
- *
- * - Testing for an exact match with 0 matches only packets without an
- * 802.1Q header.
- *
- * - Testing for an exact match with a TCI value with CFI=1 matches packets
- * that have an 802.1Q header with a specified VID and PCP.
- *
- * - Testing for an exact match with a nonzero TCI value with CFI=0 does
- * not make sense. The switch may reject this combination.
- *
- * - Testing with a specific VID and CFI=1, with nxm_mask=0x1fff, matches
- * packets that have an 802.1Q header with that VID (and any PCP).
- *
- * - Testing with a specific PCP and CFI=1, with nxm_mask=0xf000, matches
- * packets that have an 802.1Q header with that PCP (and any VID).
- *
- * - Testing with nxm_value=0, nxm_mask=0x0fff matches packets with no 802.1Q
- * header or with an 802.1Q header with a VID of 0.
- *
- * - Testing with nxm_value=0, nxm_mask=0xe000 matches packets with no 802.1Q
- * header or with an 802.1Q header with a PCP of 0.
- *
- * - Testing with nxm_value=0, nxm_mask=0xefff matches packets with no 802.1Q
- * header or with an 802.1Q header with both VID and PCP of 0.
- */
-#define NXM_OF_VLAN_TCI NXM_HEADER (0x0000, 4, 2)
-#define NXM_OF_VLAN_TCI_W NXM_HEADER_W(0x0000, 4, 2)
-
-/* The "type of service" byte of the IP header, with the ECN bits forced to 0.
- *
- * Prereqs: NXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd.
- *
- * Format: 8-bit integer with 2 least-significant bits forced to 0.
- *
- * Masking: Not maskable. */
-#define NXM_OF_IP_TOS NXM_HEADER (0x0000, 5, 1)
-
-/* The "protocol" byte in the IP header.
- *
- * Prereqs: NXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd.
- *
- * Format: 8-bit integer.
- *
- * Masking: Not maskable. */
-#define NXM_OF_IP_PROTO NXM_HEADER (0x0000, 6, 1)
-
-/* The source or destination address in the IP header.
- *
- * Prereqs: NXM_OF_ETH_TYPE must match 0x0800 exactly.
- *
- * Format: 32-bit integer in network byte order.
- *
- * Masking: Fully maskable, in Open vSwitch 1.8 and later. In earlier
- * versions, only CIDR masks are allowed, that is, masks that consist of N
- * high-order bits set to 1 and the other 32-N bits set to 0. */
-#define NXM_OF_IP_SRC NXM_HEADER (0x0000, 7, 4)
-#define NXM_OF_IP_SRC_W NXM_HEADER_W(0x0000, 7, 4)
-#define NXM_OF_IP_DST NXM_HEADER (0x0000, 8, 4)
-#define NXM_OF_IP_DST_W NXM_HEADER_W(0x0000, 8, 4)
-
-/* The source or destination port in the TCP header.
- *
- * Prereqs:
- * NXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd.
- * NXM_OF_IP_PROTO must match 6 exactly.
- *
- * Format: 16-bit integer in network byte order.
- *
- * Masking: Fully maskable, in Open vSwitch 1.6 and later. Not maskable, in
- * earlier versions. */
-#define NXM_OF_TCP_SRC NXM_HEADER (0x0000, 9, 2)
-#define NXM_OF_TCP_SRC_W NXM_HEADER_W(0x0000, 9, 2)
-#define NXM_OF_TCP_DST NXM_HEADER (0x0000, 10, 2)
-#define NXM_OF_TCP_DST_W NXM_HEADER_W(0x0000, 10, 2)
-
-/* The source or destination port in the UDP header.
- *
- * Prereqs:
- * NXM_OF_ETH_TYPE must match either 0x0800 or 0x86dd.
- * NXM_OF_IP_PROTO must match 17 exactly.
- *
- * Format: 16-bit integer in network byte order.
- *
- * Masking: Fully maskable, in Open vSwitch 1.6 and later. Not maskable, in
- * earlier versions. */
-#define NXM_OF_UDP_SRC NXM_HEADER (0x0000, 11, 2)
-#define NXM_OF_UDP_SRC_W NXM_HEADER_W(0x0000, 11, 2)
-#define NXM_OF_UDP_DST NXM_HEADER (0x0000, 12, 2)
-#define NXM_OF_UDP_DST_W NXM_HEADER_W(0x0000, 12, 2)
-
-/* The type or code in the ICMP header.
- *
- * Prereqs:
- * NXM_OF_ETH_TYPE must match 0x0800 exactly.
- * NXM_OF_IP_PROTO must match 1 exactly.
- *
- * Format: 8-bit integer.
- *
- * Masking: Not maskable. */
-#define NXM_OF_ICMP_TYPE NXM_HEADER (0x0000, 13, 1)
-#define NXM_OF_ICMP_CODE NXM_HEADER (0x0000, 14, 1)
-
-/* ARP opcode.
- *
- * For an Ethernet+IP ARP packet, the opcode in the ARP header. Always 0
- * otherwise. Only ARP opcodes between 1 and 255 should be specified for
- * matching.
- *
- * Prereqs: NXM_OF_ETH_TYPE must match either 0x0806 or 0x8035.
- *
- * Format: 16-bit integer in network byte order.
- *
- * Masking: Not maskable. */
-#define NXM_OF_ARP_OP NXM_HEADER (0x0000, 15, 2)
-
-/* For an Ethernet+IP ARP packet, the source or target protocol address
- * in the ARP header. Always 0 otherwise.
- *
- * Prereqs: NXM_OF_ETH_TYPE must match either 0x0806 or 0x8035.
- *
- * Format: 32-bit integer in network byte order.
- *
- * Masking: Fully maskable, in Open vSwitch 1.8 and later. In earlier
- * versions, only CIDR masks are allowed, that is, masks that consist of N
- * high-order bits set to 1 and the other 32-N bits set to 0. */
-#define NXM_OF_ARP_SPA NXM_HEADER (0x0000, 16, 4)
-#define NXM_OF_ARP_SPA_W NXM_HEADER_W(0x0000, 16, 4)
-#define NXM_OF_ARP_TPA NXM_HEADER (0x0000, 17, 4)
-#define NXM_OF_ARP_TPA_W NXM_HEADER_W(0x0000, 17, 4)
-
-/* ## ------------------------ ## */
-/* ## Nicira match extensions. ## */
-/* ## ------------------------ ## */
-
-/* Metadata registers.
- *
- * Registers initially have value 0. Actions allow register values to be
- * manipulated.
- *
- * Prereqs: None.
- *
- * Format: Array of 32-bit integer registers. Space is reserved for up to
- * NXM_NX_MAX_REGS registers, but switches may implement fewer.
- *
- * Masking: Arbitrary masks. */
+/* Number of registers allocated NXM field IDs. */
#define NXM_NX_MAX_REGS 16
-#define NXM_NX_REG(IDX) NXM_HEADER (0x0001, IDX, 4)
-#define NXM_NX_REG_W(IDX) NXM_HEADER_W(0x0001, IDX, 4)
-#define NXM_NX_REG_IDX(HEADER) NXM_FIELD(HEADER)
-#define NXM_IS_NX_REG(HEADER) (!((((HEADER) ^ NXM_NX_REG0)) & 0xffffe1ff))
-#define NXM_IS_NX_REG_W(HEADER) (!((((HEADER) ^ NXM_NX_REG0_W)) & 0xffffe1ff))
-#define NXM_NX_REG0 NXM_HEADER (0x0001, 0, 4)
-#define NXM_NX_REG0_W NXM_HEADER_W(0x0001, 0, 4)
-#define NXM_NX_REG1 NXM_HEADER (0x0001, 1, 4)
-#define NXM_NX_REG1_W NXM_HEADER_W(0x0001, 1, 4)
-#define NXM_NX_REG2 NXM_HEADER (0x0001, 2, 4)
-#define NXM_NX_REG2_W NXM_HEADER_W(0x0001, 2, 4)
-#define NXM_NX_REG3 NXM_HEADER (0x0001, 3, 4)
-#define NXM_NX_REG3_W NXM_HEADER_W(0x0001, 3, 4)
-#define NXM_NX_REG4 NXM_HEADER (0x0001, 4, 4)
-#define NXM_NX_REG4_W NXM_HEADER_W(0x0001, 4, 4)
-#define NXM_NX_REG5 NXM_HEADER (0x0001, 5, 4)
-#define NXM_NX_REG5_W NXM_HEADER_W(0x0001, 5, 4)
-#define NXM_NX_REG6 NXM_HEADER (0x0001, 6, 4)
-#define NXM_NX_REG6_W NXM_HEADER_W(0x0001, 6, 4)
-#define NXM_NX_REG7 NXM_HEADER (0x0001, 7, 4)
-#define NXM_NX_REG7_W NXM_HEADER_W(0x0001, 7, 4)
-
-/* Tunnel ID.
- *
- * For a packet received via a Geneve, GRE, VXLAN or LISP tunnel including a
- * key less than 64 bits, the key is stored in the low bits and the high bits
- * are zeroed. For other packets, the value is 0.
- *
- * All zero bits, for packets not received via a keyed tunnel.
- *
- * Prereqs: None.
- *
- * Format: 64-bit integer in network byte order.
- *
- * Masking: Arbitrary masks. */
-#define NXM_NX_TUN_ID NXM_HEADER (0x0001, 16, 8)
-#define NXM_NX_TUN_ID_W NXM_HEADER_W(0x0001, 16, 8)
-
-/* For an Ethernet+IP ARP packet, the source or target hardware address
- * in the ARP header. Always 0 otherwise.
- *
- * Prereqs: NXM_OF_ETH_TYPE must match either 0x0806 or 0x8035.
- *
- * Format: 48-bit Ethernet MAC address.
- *
- * Masking: Not maskable. */
-#define NXM_NX_ARP_SHA NXM_HEADER (0x0001, 17, 6)
-#define NXM_NX_ARP_THA NXM_HEADER (0x0001, 18, 6)
-
-/* The source or destination address in the IPv6 header.
- *
- * Prereqs: NXM_OF_ETH_TYPE must match 0x86dd exactly.
- *
- * Format: 128-bit IPv6 address.
- *
- * Masking: Fully maskable, in Open vSwitch 1.8 and later. In previous
- * versions, only CIDR masks are allowed, that is, masks that consist of N
- * high-order bits set to 1 and the other 128-N bits set to 0. */
-#define NXM_NX_IPV6_SRC NXM_HEADER (0x0001, 19, 16)
-#define NXM_NX_IPV6_SRC_W NXM_HEADER_W(0x0001, 19, 16)
-#define NXM_NX_IPV6_DST NXM_HEADER (0x0001, 20, 16)
-#define NXM_NX_IPV6_DST_W NXM_HEADER_W(0x0001, 20, 16)
-
-/* The type or code in the ICMPv6 header.
- *
- * Prereqs:
- * NXM_OF_ETH_TYPE must match 0x86dd exactly.
- * NXM_OF_IP_PROTO must match 58 exactly.
- *
- * Format: 8-bit integer.
- *
- * Masking: Not maskable. */
-#define NXM_NX_ICMPV6_TYPE NXM_HEADER (0x0001, 21, 1)
-#define NXM_NX_ICMPV6_CODE NXM_HEADER (0x0001, 22, 1)
-
-/* The target address in an IPv6 Neighbor Discovery message.
- *
- * Prereqs:
- * NXM_OF_ETH_TYPE must match 0x86dd exactly.
- * NXM_OF_IP_PROTO must match 58 exactly.
- * NXM_OF_ICMPV6_TYPE must be either 135 or 136.
- *
- * Format: 128-bit IPv6 address.
- *
- * Masking: Fully maskable, in Open vSwitch 1.8 and later. In previous
- * versions, only CIDR masks are allowed, that is, masks that consist of N
- * high-order bits set to 1 and the other 128-N bits set to 0. */
-#define NXM_NX_ND_TARGET NXM_HEADER (0x0001, 23, 16)
-#define NXM_NX_ND_TARGET_W NXM_HEADER_W (0x0001, 23, 16)
-
-/* The source link-layer address option in an IPv6 Neighbor Discovery
- * message.
- *
- * Prereqs:
- * NXM_OF_ETH_TYPE must match 0x86dd exactly.
- * NXM_OF_IP_PROTO must match 58 exactly.
- * NXM_OF_ICMPV6_TYPE must be exactly 135.
- *
- * Format: 48-bit Ethernet MAC address.
- *
- * Masking: Not maskable. */
-#define NXM_NX_ND_SLL NXM_HEADER (0x0001, 24, 6)
-
-/* The target link-layer address option in an IPv6 Neighbor Discovery
- * message.
- *
- * Prereqs:
- * NXM_OF_ETH_TYPE must match 0x86dd exactly.
- * NXM_OF_IP_PROTO must match 58 exactly.
- * NXM_OF_ICMPV6_TYPE must be exactly 136.
- *
- * Format: 48-bit Ethernet MAC address.
- *
- * Masking: Not maskable. */
-#define NXM_NX_ND_TLL NXM_HEADER (0x0001, 25, 6)
-
-/* IP fragment information.
- *
- * Prereqs:
- * NXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd.
- *
- * Format: 8-bit value with one of the values 0, 1, or 3, as described below.
- *
- * Masking: Fully maskable.
- *
- * This field has three possible values:
- *
- * - A packet that is not an IP fragment has value 0.
- *
- * - A packet that is an IP fragment with offset 0 (the first fragment) has
- * bit 0 set and thus value 1.
- *
- * - A packet that is an IP fragment with nonzero offset has bits 0 and 1 set
- * and thus value 3.
- *
- * NX_IP_FRAG_ANY and NX_IP_FRAG_LATER are declared to symbolically represent
- * the meanings of bits 0 and 1.
- *
- * The switch may reject matches against values that can never appear.
- *
- * It is important to understand how this field interacts with the OpenFlow IP
- * fragment handling mode:
- *
- * - In OFPC_FRAG_DROP mode, the OpenFlow switch drops all IP fragments
- * before they reach the flow table, so every packet that is available for
- * matching will have value 0 in this field.
- *
- * - Open vSwitch does not implement OFPC_FRAG_REASM mode, but if it did then
- * IP fragments would be reassembled before they reached the flow table and
- * again every packet available for matching would always have value 0.
- *
- * - In OFPC_FRAG_NORMAL mode, all three values are possible, but OpenFlow
- * 1.0 says that fragments' transport ports are always 0, even for the
- * first fragment, so this does not provide much extra information.
- *
- * - In OFPC_FRAG_NX_MATCH mode, all three values are possible. For
- * fragments with offset 0, Open vSwitch makes L4 header information
- * available.
- */
-#define NXM_NX_IP_FRAG NXM_HEADER (0x0001, 26, 1)
-#define NXM_NX_IP_FRAG_W NXM_HEADER_W(0x0001, 26, 1)
/* Bits in the value of NXM_NX_IP_FRAG. */
#define NX_IP_FRAG_ANY (1 << 0) /* Is this a fragment? */
#define NX_IP_FRAG_LATER (1 << 1) /* Is this a fragment with nonzero offset? */
-/* The flow label in the IPv6 header.
- *
- * Prereqs: NXM_OF_ETH_TYPE must match 0x86dd exactly.
- *
- * Format: 20-bit IPv6 flow label in least-significant bits.
- *
- * Masking: Fully maskable. */
-#define NXM_NX_IPV6_LABEL NXM_HEADER (0x0001, 27, 4)
-#define NXM_NX_IPV6_LABEL_W NXM_HEADER_W(0x0001, 27, 4)
-
-/* The ECN of the IP header.
- *
- * Prereqs: NXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd.
- *
- * Format: ECN in the low-order 2 bits.
- *
- * Masking: Not maskable. */
-#define NXM_NX_IP_ECN NXM_HEADER (0x0001, 28, 1)
-
-/* The time-to-live/hop limit of the IP header.
- *
- * Prereqs: NXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd.
- *
- * Format: 8-bit integer.
- *
- * Masking: Not maskable. */
-#define NXM_NX_IP_TTL NXM_HEADER (0x0001, 29, 1)
-
/* Flow cookie.
*
* This may be used to gain the OpenFlow 1.1-like ability to restrict
#define NXM_NX_COOKIE NXM_HEADER (0x0001, 30, 8)
#define NXM_NX_COOKIE_W NXM_HEADER_W(0x0001, 30, 8)
-/* The source or destination address in the outer IP header of a tunneled
- * packet.
- *
- * For non-tunneled packets, the value is 0.
- *
- * Prereqs: None.
- *
- * Format: 32-bit integer in network byte order.
- *
- * Masking: Fully maskable. */
-#define NXM_NX_TUN_IPV4_SRC NXM_HEADER (0x0001, 31, 4)
-#define NXM_NX_TUN_IPV4_SRC_W NXM_HEADER_W(0x0001, 31, 4)
-#define NXM_NX_TUN_IPV4_DST NXM_HEADER (0x0001, 32, 4)
-#define NXM_NX_TUN_IPV4_DST_W NXM_HEADER_W(0x0001, 32, 4)
-
-/* Metadata marked onto the packet in a system-dependent manner.
- *
- * The packet mark may be used to carry contextual information
- * to other parts of the system outside of Open vSwitch. As a
- * result, the semantics depend on system in use.
- *
- * Prereqs: None.
- *
- * Format: 32-bit integer in network byte order.
- *
- * Masking: Fully maskable. */
-#define NXM_NX_PKT_MARK NXM_HEADER (0x0001, 33, 4)
-#define NXM_NX_PKT_MARK_W NXM_HEADER_W(0x0001, 33, 4)
-
-/* The flags in the TCP header.
-*
-* Prereqs:
-* NXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd.
-* NXM_OF_IP_PROTO must match 6 exactly.
-*
-* Format: 16-bit integer with 4 most-significant bits forced to 0.
-*
-* Masking: Bits 0-11 fully maskable. */
-#define NXM_NX_TCP_FLAGS NXM_HEADER (0x0001, 34, 2)
-#define NXM_NX_TCP_FLAGS_W NXM_HEADER_W(0x0001, 34, 2)
-
-/* Metadata dp_hash.
- *
- * Internal use only, not programable from controller.
- *
- * The dp_hash is used to carry the flow hash computed in the
- * datapath.
- *
- * Prereqs: None.
- *
- * Format: 32-bit integer in network byte order.
- *
- * Masking: Fully maskable. */
-#define NXM_NX_DP_HASH NXM_HEADER (0x0001, 35, 4)
-#define NXM_NX_DP_HASH_W NXM_HEADER_W(0x0001, 35, 4)
-
-/* Metadata recirc_id.
- *
- * Internal use only, not programable from controller.
- *
- * The recirc_id used for recirculation. 0 is reserved
- * for initially received packet.
- *
- * Prereqs: None.
- *
- * Format: 32-bit integer in network byte order.
- *
- * Masking: not maskable. */
-#define NXM_NX_RECIRC_ID NXM_HEADER (0x0001, 36, 4)
/* ## --------------------- ## */
/* ## Requests and replies. ## */