--- openflow-2011-09-02-2.h	2015-07-23 09:54:16.616479340 -0700
+++ openflow-2011-09-06.h	2015-07-23 09:54:16.620479340 -0700
@@ -642,6 +642,53 @@
 #define OXM_MAKE_WILD_HEADER(HEADER) \
         OXM_HEADER_W(OXM_EXPERIMENTER(HEADER), OXM_FIELD(HEADER), OXM_LENGTH(HEADER))
 
+/* OXM Experimenter IDs. */
+enum ofp_oxm_experimenters {
+    OFPXME_OPENFLOW   = 0x0000,    /* OpenFlow consortium */
+    OFPXME_NICIRA     = 0x0001,    /* Nicira */
+    OFPXME_HP         = 0x0002,    /* HP */
+};
+
+/* OXM Flow match field types for OpenFlow Experimenter. */
+enum oxm_of_match_fields {
+    OFPXMT_OF_IN_PORT        = 0,  /* Switch input port. */
+    OFPXMT_OF_METADATA       = 1,  /* Metadata passed between tables. */
+    OFPXMT_OF_ETH_DST        = 2,  /* Ethernet destination address. */
+    OFPXMT_OF_ETH_SRC        = 3,  /* Ethernet source address. */
+    OFPXMT_OF_ETH_TYPE       = 4,  /* Ethernet frame type. */
+    OFPXMT_OF_VLAN_VID       = 5,  /* VLAN id. */
+    OFPXMT_OF_VLAN_PCP       = 6,  /* VLAN priority. */
+    OFPXMT_OF_IP_TOS         = 7,  /* IP ToS (DSCP field, 6 bits). */
+    OFPXMT_OF_IP_ECN         = 8,  /* IP ECN bits (2 bits). */
+    OFPXMT_OF_IP_PROTO       = 9,  /* IP protocol. */
+    OFPXMT_OF_IPV4_SRC       = 10, /* IPv4 source address. */
+    OFPXMT_OF_IPV4_DST       = 11, /* IPv4 destination address. */
+    OFPXMT_OF_TCP_SRC        = 12, /* TCP source port. */
+    OFPXMT_OF_TCP_DST        = 13, /* TCP destination port. */
+    OFPXMT_OF_UDP_SRC        = 14, /* UDP source port. */
+    OFPXMT_OF_UDP_DST        = 15, /* UDP destination port. */
+    OFPXMT_OF_SCTP_SRC       = 16, /* SCTP source port. */
+    OFPXMT_OF_SCTP_DST       = 17, /* SCTP destination port. */
+    OFPXMT_OF_ICMPV4_TYPE    = 18, /* ICMP type. */
+    OFPXMT_OF_ICMPV4_CODE    = 19, /* ICMP code. */
+    OFPXMT_OF_ARP_OP         = 20, /* ARP opcode. */
+    OFPXMT_OF_ARP_SPA        = 21, /* ARP source IPv4 address. */
+    OFPXMT_OF_ARP_TPA        = 22, /* ARP target IPv4 address. */
+    OFPXMT_OF_ARP_SHA        = 23, /* ARP source hardware address. */
+    OFPXMT_OF_ARP_THA        = 24, /* ARP target hardware address. */
+    OFPXMT_OF_IPV6_SRC       = 25, /* IPv6 source address. */
+    OFPXMT_OF_IPV6_DST       = 26, /* IPv6 destination address. */
+    OFPXMT_OF_ICMPV6_TYPE    = 27, /* ICMP type. */
+    OFPXMT_OF_ICMPV6_CODE    = 28, /* ICMP code. */
+    OFPXMT_OF_IPV6_ND_TARGET = 29, /* Target address for ND. */
+    OFPXMT_OF_IPV6_ND_SLL    = 30, /* Source link-layer for ND. */
+    OFPXMT_OF_IPV6_ND_TLL    = 31, /* Target link-layer for ND. */
+    OFPXMT_OF_MPLS_LABEL     = 32, /* MPLS label. */
+    OFPXMT_OF_MPLS_TC        = 33, /* MPLS TC. */
+};
+
+#define OFPXMT_OF_ALL    ((1 << 34) - 1)
+
 /* Physical or virtual port on which the packet was received.
  *
  * Prereqs: None.
@@ -649,7 +696,7 @@
  * Format: 16-bit integer in network byte order.
  *
  * Masking: Not maskable. */
-#define OXM_OF_IN_PORT    OXM_HEADER  (0x0000,  0, 2)
+#define OXM_OF_IN_PORT    OXM_HEADER  (0x0000, OFPXMT_OF_IN_PORT, 2)
 
 /* Table metadata.
  *
@@ -659,8 +706,8 @@
  *
  * Masking: Arbitrary masks.
  */
-#define OXM_OF_METADATA   OXM_HEADER  (0x0000,  1, 8)
-#define OXM_OF_METADATA_W OXM_HEADER_W(0x0000,  1, 8)
+#define OXM_OF_METADATA   OXM_HEADER  (0x0000, OFPXMT_OF_METADATA, 8)
+#define OXM_OF_METADATA_W OXM_HEADER_W(0x0000, OFPXMT_OF_METADATA, 8)
 
 /* Source or destination address in Ethernet header.
  *
@@ -672,9 +719,10 @@
  *   be supported for OXM_OF_ETH_DST_W (as well as the trivial patterns that
  *   are all-0-bits or all-1-bits).  Support for other patterns and for masking
  *   of OXM_OF_ETH_SRC is optional. */
-#define OXM_OF_ETH_DST    OXM_HEADER  (0x0000,  2, 6)
-#define OXM_OF_ETH_DST_W  OXM_HEADER_W(0x0000,  2, 6)
-#define OXM_OF_ETH_SRC    OXM_HEADER  (0x0000,  3, 6)
+#define OXM_OF_ETH_DST    OXM_HEADER  (0x0000, OFPXMT_OF_ETH_DST, 6)
+#define OXM_OF_ETH_DST_W  OXM_HEADER_W(0x0000, OFPXMT_OF_ETH_DST, 6)
+#define OXM_OF_ETH_SRC    OXM_HEADER  (0x0000, OFPXMT_OF_ETH_SRC, 6)
+#define OXM_OF_ETH_SRC_W  OXM_HEADER_W(0x0000, OFPXMT_OF_ETH_SRC, 6)
 
 /* Packet's Ethernet type.
  *
@@ -683,7 +731,7 @@
  * Format: 16-bit integer in network byte order.
  *
  * Masking: Not maskable. */
-#define OXM_OF_ETH_TYPE   OXM_HEADER  (0x0000,  4, 2)
+#define OXM_OF_ETH_TYPE   OXM_HEADER  (0x0000, OFPXMT_OF_ETH_TYPE, 2)
 
 /* The VLAN id is 12-bits, so we can use the entire 16 bits to indicate
  * special conditions.
@@ -723,8 +771,8 @@
  *   - Testing for an exact match with a VID value matches packets
  *     that have an 802.1Q header with a specified VID.
  */
-#define OXM_OF_VLAN_VID   OXM_HEADER  (0x0000,  5, 2)
-#define OXM_OF_VLAN_VID_W OXM_HEADER_W(0x0000,  5, 2)
+#define OXM_OF_VLAN_VID   OXM_HEADER  (0x0000, OFPXMT_OF_VLAN_VID, 2)
+#define OXM_OF_VLAN_VID_W OXM_HEADER_W(0x0000, OFPXMT_OF_VLAN_VID, 2)
 
 /* 802.1Q PCP.
  *
@@ -736,10 +784,9 @@
  *
  * Format: 8-bit integer in network byte order.
  *
- * Masking: Arbitrary masks.
+ * Masking: Not maskable.
  */
-#define OXM_OF_VLAN_PCP   OXM_HEADER  (0x0000,  6, 2)
-#define OXM_OF_VLAN_PCP_W OXM_HEADER_W(0x0000,  6, 2)
+#define OXM_OF_VLAN_PCP   OXM_HEADER  (0x0000, OFPXMT_OF_VLAN_PCP, 2)
 
 /* The "type of service" byte of the IP header, with the ECN bits forced to 0.
  *
@@ -748,7 +795,16 @@
  * Format: 8-bit integer with 2 least-significant bits forced to 0.
  *
  * Masking: Not maskable. */
-#define OXM_OF_IP_TOS     OXM_HEADER  (0x0000,  7, 1)
+#define OXM_OF_IP_TOS     OXM_HEADER  (0x0000, OFPXMT_OF_IP_TOS, 1)
+
+/* The ECN bits of the IP header.
+ *
+ * Prereqs: OXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd.
+ *
+ * Format: 8-bit integer with 6 most-significant bits forced to 0.
+ *
+ * Masking: Not maskable. */
+#define OXM_OF_IP_ECN     OXM_HEADER  (0x0000, OFPXMT_OF_IP_ECN, 1)
 
 /* The "protocol" byte in the IP header.
  *
@@ -757,7 +813,7 @@
  * Format: 8-bit integer.
  *
  * Masking: Not maskable. */
-#define OXM_OF_IP_PROTO   OXM_HEADER  (0x0000,  8, 1)
+#define OXM_OF_IP_PROTO   OXM_HEADER  (0x0000, OFPXMT_OF_IP_PROTO, 1)
 
 /* The source or destination address in the IP header.
  *
@@ -767,10 +823,10 @@
  *
  * Masking: Arbitrary masks.
  */
-#define OXM_OF_IPV4_SRC     OXM_HEADER  (0x0000,  9, 4)
-#define OXM_OF_IPV4_SRC_W   OXM_HEADER_W(0x0000,  9, 4)
-#define OXM_OF_IPV4_DST     OXM_HEADER  (0x0000, 10, 4)
-#define OXM_OF_IPV4_DST_W   OXM_HEADER_W(0x0000, 10, 4)
+#define OXM_OF_IPV4_SRC     OXM_HEADER  (0x0000, OFPXMT_OF_IPV4_SRC, 4)
+#define OXM_OF_IPV4_SRC_W   OXM_HEADER_W(0x0000, OFPXMT_OF_IPV4_SRC, 4)
+#define OXM_OF_IPV4_DST     OXM_HEADER  (0x0000, OFPXMT_OF_IPV4_DST, 4)
+#define OXM_OF_IPV4_DST_W   OXM_HEADER_W(0x0000, OFPXMT_OF_IPV4_DST, 4)
 
 /* The source or destination port in the TCP header.
  *
@@ -781,8 +837,8 @@
  * Format: 16-bit integer in network byte order.
  *
  * Masking: Not maskable. */
-#define OXM_OF_TCP_SRC    OXM_HEADER  (0x0000, 11, 2)
-#define OXM_OF_TCP_DST    OXM_HEADER  (0x0000, 12, 2)
+#define OXM_OF_TCP_SRC    OXM_HEADER  (0x0000, OFPXMT_OF_TCP_SRC, 2)
+#define OXM_OF_TCP_DST    OXM_HEADER  (0x0000, OFPXMT_OF_TCP_DST, 2)
 
 /* The source or destination port in the UDP header.
  *
@@ -793,8 +849,8 @@
  * Format: 16-bit integer in network byte order.
  *
  * Masking: Not maskable. */
-#define OXM_OF_UDP_SRC    OXM_HEADER  (0x0000, 13, 2)
-#define OXM_OF_UDP_DST    OXM_HEADER  (0x0000, 14, 2)
+#define OXM_OF_UDP_SRC    OXM_HEADER  (0x0000, OFPXMT_OF_UDP_SRC, 2)
+#define OXM_OF_UDP_DST    OXM_HEADER  (0x0000, OFPXMT_OF_UDP_DST, 2)
 
 /* The source or destination port in the SCTP header.
  *
@@ -805,8 +861,8 @@
  * Format: 16-bit integer in network byte order.
  *
  * Masking: Not maskable. */
-#define OXM_OF_SCTP_SRC   OXM_HEADER  (0x0000, 15, 2)
-#define OXM_OF_SCTP_DST   OXM_HEADER  (0x0000, 16, 2)
+#define OXM_OF_SCTP_SRC   OXM_HEADER  (0x0000, OFPXMT_OF_SCTP_SRC, 2)
+#define OXM_OF_SCTP_DST   OXM_HEADER  (0x0000, OFPXMT_OF_SCTP_DST, 2)
 
 /* The type or code in the ICMP header.
  *
@@ -817,8 +873,8 @@
  * Format: 8-bit integer.
  *
  * Masking: Not maskable. */
-#define OXM_OF_ICMPV4_TYPE  OXM_HEADER  (0x0000, 17, 1)
-#define OXM_OF_ICMPV4_CODE  OXM_HEADER  (0x0000, 18, 1)
+#define OXM_OF_ICMPV4_TYPE  OXM_HEADER  (0x0000, OFPXMT_OF_ICMPV4_TYPE, 1)
+#define OXM_OF_ICMPV4_CODE  OXM_HEADER  (0x0000, OFPXMT_OF_ICMPV4_CODE, 1)
 
 /* ARP opcode.
  *
@@ -831,7 +887,7 @@
  * Format: 16-bit integer in network byte order.
  *
  * Masking: Not maskable. */
-#define OXM_OF_ARP_OP     OXM_HEADER  (0x0000, 19, 2)
+#define OXM_OF_ARP_OP     OXM_HEADER  (0x0000, OFPXMT_OF_ARP_OP, 2)
 
 /* For an Ethernet+IP ARP packet, the source or target protocol address
  * in the ARP header.  Always 0 otherwise.
@@ -842,10 +898,10 @@
  *
  * Masking: 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 OXM_OF_ARP_SPA    OXM_HEADER  (0x0000, 20, 4)
-#define OXM_OF_ARP_SPA_W  OXM_HEADER_W(0x0000, 20, 4)
-#define OXM_OF_ARP_TPA    OXM_HEADER  (0x0000, 21, 4)
-#define OXM_OF_ARP_TPA_W  OXM_HEADER_W(0x0000, 21, 4)
+#define OXM_OF_ARP_SPA    OXM_HEADER  (0x0000, OFPXMT_OF_ARP_SPA, 4)
+#define OXM_OF_ARP_SPA_W  OXM_HEADER_W(0x0000, OFPXMT_OF_ARP_SPA, 4)
+#define OXM_OF_ARP_TPA    OXM_HEADER  (0x0000, OFPXMT_OF_ARP_TPA, 4)
+#define OXM_OF_ARP_TPA_W  OXM_HEADER_W(0x0000, OFPXMT_OF_ARP_TPA, 4)
 
 /* For an Ethernet+IP ARP packet, the source or target hardware address
  * in the ARP header.  Always 0 otherwise.
@@ -855,8 +911,8 @@
  * Format: 48-bit Ethernet MAC address.
  *
  * Masking: Not maskable. */
-#define OXM_OF_ARP_SHA    OXM_HEADER  (0x0000, 22, 6)
-#define OXM_OF_ARP_THA    OXM_HEADER  (0x0000, 23, 6)
+#define OXM_OF_ARP_SHA    OXM_HEADER  (0x0000, OFPXMT_OF_ARP_SHA, 6)
+#define OXM_OF_ARP_THA    OXM_HEADER  (0x0000, OFPXMT_OF_ARP_THA, 6)
 
 /* The source or destination address in the IPv6 header.
  *
@@ -866,10 +922,10 @@
  *
  * Masking: 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 OXM_OF_IPV6_SRC    OXM_HEADER  (0x0000, 24, 16)
-#define OXM_OF_IPV6_SRC_W  OXM_HEADER_W(0x0000, 24, 16)
-#define OXM_OF_IPV6_DST    OXM_HEADER  (0x0000, 25, 16)
-#define OXM_OF_IPV6_DST_W  OXM_HEADER_W(0x0000, 25, 16)
+#define OXM_OF_IPV6_SRC    OXM_HEADER  (0x0000, OFPXMT_OF_IPV6_SRC, 16)
+#define OXM_OF_IPV6_SRC_W  OXM_HEADER_W(0x0000, OFPXMT_OF_IPV6_SRC, 16)
+#define OXM_OF_IPV6_DST    OXM_HEADER  (0x0000, OFPXMT_OF_IPV6_DST, 16)
+#define OXM_OF_IPV6_DST_W  OXM_HEADER_W(0x0000, OFPXMT_OF_IPV6_DST, 16)
 
 /* The type or code in the ICMPv6 header.
  *
@@ -880,8 +936,8 @@
  * Format: 8-bit integer.
  *
  * Masking: Not maskable. */
-#define OXM_OF_ICMPV6_TYPE OXM_HEADER  (0x0000, 26, 1)
-#define OXM_OF_ICMPV6_CODE OXM_HEADER  (0x0000, 27, 1)
+#define OXM_OF_ICMPV6_TYPE OXM_HEADER  (0x0000, OFPXMT_OF_ICMPV6_TYPE, 1)
+#define OXM_OF_ICMPV6_CODE OXM_HEADER  (0x0000, OFPXMT_OF_ICMPV6_CODE, 1)
 
 /* The target address in an IPv6 Neighbor Discovery message.
  *
@@ -893,7 +949,7 @@
  * Format: 128-bit IPv6 address.
  *
  * Masking: Not maskable. */
-#define OXM_OF_IPV6_ND_TARGET OXM_HEADER  (0x0000, 28, 16)
+#define OXM_OF_IPV6_ND_TARGET OXM_HEADER (0x0000, OFPXMT_OF_IPV6_ND_TARGET, 16)
 
 /* The source link-layer address option in an IPv6 Neighbor Discovery
  * message.
@@ -906,7 +962,7 @@
  * Format: 48-bit Ethernet MAC address.
  *
  * Masking: Not maskable. */
-#define OXM_OF_IPV6_ND_SLL OXM_HEADER  (0x0000, 29, 6)
+#define OXM_OF_IPV6_ND_SLL  OXM_HEADER  (0x0000, OFPXMT_OF_IPV6_ND_SLL, 6)
 
 /* The target link-layer address option in an IPv6 Neighbor Discovery
  * message.
@@ -919,7 +975,7 @@
  * Format: 48-bit Ethernet MAC address.
  *
  * Masking: Not maskable. */
-#define OXM_OF_IPV6_ND_TLL      OXM_HEADER  (0x0000, 30, 6)
+#define OXM_OF_IPV6_ND_TLL  OXM_HEADER  (0x0000, OFPXMT_OF_IPV6_ND_TLL, 6)
 
 /* The LABEL and TC in the first MPLS shim header.
  *
@@ -929,8 +985,8 @@
  * Format: 32-bit and 8-bit integer.
  *
  * Masking: Not maskable. */
-#define OXM_OF_MPLS_LABEL  OXM_HEADER  (0x0000, 31, 4)
-#define OXM_OF_MPLS_TC     OXM_HEADER  (0x0000, 32, 1)
+#define OXM_OF_MPLS_LABEL  OXM_HEADER  (0x0000, OFPXMT_OF_MPLS_LABEL, 4)
+#define OXM_OF_MPLS_TC     OXM_HEADER  (0x0000, OFPXMT_OF_MPLS_TC, 1)
 
 /* ## ------------- ## */
 /* ## Instructions. ## */
@@ -1480,53 +1536,16 @@
 };
 OFP_ASSERT(sizeof(struct ofp_aggregate_stats_reply) == 24);
 
-/* Flow match fields. */
-enum ofp_flow_match_fields {
-    OFPFMF_OF_IN_PORT     = 1 << 0,  /* Switch input port. */
-    OFPFMF_OF_METADATA    = 1 << 1,  /* Metadata passed between tables. */
-    OFPFMF_OF_ETH_DST     = 1 << 2,  /* Ethernet destination address. */
-    OFPFMF_OF_ETH_SRC     = 1 << 3,  /* Ethernet source address. */
-    OFPFMF_OF_ETH_TYPE    = 1 << 4,  /* Ethernet frame type. */
-    OFPFMF_OF_VLAN_VID    = 1 << 5,  /* VLAN id. */
-    OFPFMF_OF_VLAN_PCP    = 1 << 6,  /* VLAN priority. */
-    OFPFMF_OF_IP_TOS      = 1 << 7,  /* IP ToS (DSCP field, 6 bits). */
-    OFPFMF_OF_IP_PROTO    = 1 << 8,  /* IP protocol. */
-    OFPFMF_OF_IPV4_SRC    = 1 << 9,  /* IPv4 source address. */
-    OFPFMF_OF_IPV4_DST    = 1 << 10, /* IPv4 destination address. */
-    OFPFMF_OF_TCP_SRC     = 1 << 11, /* TCP source port. */
-    OFPFMF_OF_TCP_DST     = 1 << 12, /* TCP destination port. */
-    OFPFMF_OF_UDP_SRC     = 1 << 13, /* UDP source port. */
-    OFPFMF_OF_UDP_DST     = 1 << 14, /* UDP destination port. */
-    OFPFMF_OF_SCTP_SRC    = 1 << 15, /* SCTP source port. */
-    OFPFMF_OF_SCTP_DST    = 1 << 16, /* SCTP destination port. */
-    OFPFMF_OF_ICMPV4_TYPE = 1 << 17, /* ICMP type. */
-    OFPFMF_OF_ICMPV4_CODE = 1 << 18, /* ICMP code. */
-    OFPFMF_OF_ARP_OP      = 1 << 19, /* ARP opcode. */
-    OFPFMF_OF_ARP_SPA     = 1 << 20, /* ARP source IPv4 address. */
-    OFPFMF_OF_ARP_TPA     = 1 << 21, /* ARP target IPv4 address. */
-    OFPFMF_OF_ARP_SHA     = 1 << 22, /* ARP source hardware address. */
-    OFPFMF_OF_ARP_THA     = 1 << 23, /* ARP target hardware address. */
-    OFPFMF_OF_IPV6_SRC    = 1 << 24, /* IPv6 source address. */
-    OFPFMF_OF_IPV6_DST    = 1 << 25, /* IPv6 destination address. */
-    OFPFMF_OF_ICMPV6_TYPE = 1 << 26, /* ICMP type. */
-    OFPFMF_OF_ICMPV6_CODE = 1 << 27, /* ICMP code. */
-    OFPFMF_OF_IPV6_ND_TARGET = 1 << 28, /* Target address for ND. */
-    OFPFMF_OF_IPV6_ND_SLL = 1 << 29, /* Source link-layer for ND. */
-    OFPFMF_OF_IPV6_ND_TLL = 1 << 30, /* Target link-layer for ND. */
-    OFPFMF_OF_MPLS_LABEL  = 1 << 31, /* MPLS label. */
-    OFPFMF_OF_MPLS_TC     = 1 << 32, /* MPLS TC. */
-};
-
 /* Body of reply to OFPST_TABLE request. */
 struct ofp_table_stats {
     uint8_t table_id;        /* Identifier of table.  Lower numbered tables
                                 are consulted first. */
     uint8_t pad[7];          /* Align to 64-bits. */
     char name[OFP_MAX_TABLE_NAME_LEN];
-    uint64_t wildcards;      /* Bitmap of OFPFMF_* wildcards that are
+    uint64_t wildcards;      /* Bitmap of (1 << OFPXMT_*) wildcards that are
                                 supported by the table. */
-    uint64_t match;          /* Bitmap of OFPFMF_* that indicate the fields
-                                the table can match on. */
+    uint64_t match;          /* Bitmap of (1 << OFPXMT_*) that indicate the
+                                fields the table can match on. */
     uint64_t metadata_match; /* Bits of metadata table can match. */
     uint64_t metadata_write; /* Bits of metadata table can write. */
     uint32_t instructions;   /* Bitmap of OFPIT_* values supported. */
