meta-flow: Autogenerate mf_field data structures.
[cascardo/ovs.git] / include / openflow / nicira-ext.h
index bbf3388..b1885b2 100644 (file)
@@ -482,406 +482,13 @@ OFP_ASSERT(sizeof(struct nx_async_config) == 24);
 #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
@@ -898,75 +505,6 @@ OFP_ASSERT(sizeof(struct nx_async_config) == 24);
 #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. ## */