#ifndef OPENFLOW_NICIRA_EXT_H
#define OPENFLOW_NICIRA_EXT_H 1
-#include "openflow/openflow.h"
-#include "openvswitch/types.h"
+#include <openflow/openflow.h>
+#include <openvswitch/types.h>
/* The following vendor extensions, proposed by Nicira, are not yet
* standardized, so they are not included in openflow.h. Some of them may be
* short, that is also supported by Open vSwitch. This section also defines a
* replacement for each OpenFlow message that includes struct ofp10_match.
*
+ * OpenFlow 1.2+ introduced OpenFlow Extensible Match (OXM), adapting
+ * the design of NXM. The format of NXM and OXM are compatible.
+ *
*
* Format
* ======
* +----------------------------------+---------------+--+------------------+
*
* The most-significant 23 bits of the header are collectively "nxm_type".
- * Bits 16...31 are "nxm_vendor", one of the NXM_VENDOR_* values below. Bits
- * 9...15 are "nxm_field", which is a vendor-specific value. nxm_type normally
- * designates a protocol header, such as the Ethernet type, but it can also
- * refer to packet metadata, such as the switch port on which a packet arrived.
+ * Bits 16...31 are "nxm_vendor", one of OFPXMC12_* values. In case of
+ * NXM, it's either OFPXMC12_NXM_0 or OFPXMC12_NXM_1.
+ * Bits 9...15 are "nxm_field", which is a vendor-specific value. nxm_type
+ * normally designates a protocol header, such as the Ethernet type, but it
+ * can also refer to packet metadata, such as the switch port on which a packet
+ * arrived.
*
* Bit 8 is "nxm_hasmask" (labeled "hm" above for space reasons). The meaning
* of this bit is explained later.
* nx_match error.
*/
-#define NXM_HEADER__(VENDOR, FIELD, HASMASK, LENGTH) \
- (((VENDOR) << 16) | ((FIELD) << 9) | ((HASMASK) << 8) | (LENGTH))
-#define NXM_HEADER(VENDOR, FIELD, LENGTH) \
- NXM_HEADER__(VENDOR, FIELD, 0, LENGTH)
-#define NXM_HEADER_W(VENDOR, FIELD, LENGTH) \
- NXM_HEADER__(VENDOR, FIELD, 1, (LENGTH) * 2)
-#define NXM_VENDOR(HEADER) ((HEADER) >> 16)
-#define NXM_FIELD(HEADER) (((HEADER) >> 9) & 0x7f)
-#define NXM_TYPE(HEADER) (((HEADER) >> 9) & 0x7fffff)
-#define NXM_HASMASK(HEADER) (((HEADER) >> 8) & 1)
-#define NXM_LENGTH(HEADER) ((HEADER) & 0xff)
-
-#define NXM_MAKE_WILD_HEADER(HEADER) \
- NXM_HEADER_W(NXM_VENDOR(HEADER), NXM_FIELD(HEADER), NXM_LENGTH(HEADER))
-
/* Number of registers allocated NXM field IDs. */
#define NXM_NX_MAX_REGS 16
#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? */
-/* Flow cookie.
- *
- * This may be used to gain the OpenFlow 1.1-like ability to restrict
- * certain NXM-based Flow Mod and Flow Stats Request messages to flows
- * with specific cookies. See the "nx_flow_mod" and "nx_flow_stats_request"
- * structure definitions for more details. This match is otherwise not
- * allowed.
- *
- * Prereqs: None.
- *
- * Format: 64-bit integer in network byte order.
- *
- * Masking: Arbitrary masks. */
-#define NXM_NX_COOKIE NXM_HEADER (0x0001, 30, 8)
-#define NXM_NX_COOKIE_W NXM_HEADER_W(0x0001, 30, 8)
-
-
/* ## --------------------- ## */
/* ## Requests and replies. ## */
/* ## --------------------- ## */