--- openflow-2013-11-20.h	2015-07-23 09:54:17.988479396 -0700
+++ openflow-2013-11-22-2.h	2015-07-23 09:54:17.996479397 -0700
@@ -715,9 +715,11 @@
     OFPXMT_OFB_PBB_UCA        = 41, /* PBB UCA header field. */
     OFPXMT_OFB_TCP_FLAGS      = 42, /* TCP flags. */
     OFPXMT_OFB_ACTSET_OUTPUT  = 43, /* Output port from action set metadata. */
+    OFPXMT_OFB_IP_VERSION     = 44, /* IP version, root type for IP packet. */
+    OFPXMT_OFB_NO_PACKET      = 45, /* Root type for circuit switches. */
 };
 
-#define OFPXMT_OFB_ALL    ((UINT64_C(1) << 44) - 1)
+#define OFPXMT_OFB_ALL    ((UINT64_C(1) << 46) - 1)
 
 /* OpenFlow port on which the packet was received.
  * May be a physical port, a logical port, or the reserved port OFPP_LOCAL
@@ -848,7 +850,9 @@
 /* The Diff Serv Code Point (DSCP) bits of the IP header.
  * Part of the IPv4 ToS field or the IPv6 Traffic Class field.
  *
- * Prereqs: OXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd.
+ * Prereqs:
+ *   either OXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd,
+ *   or OXM_OF_IP_VERSION must be either 4 or 6.
  *
  * Format: 8-bit integer with 2 most-significant bits forced to 0.
  * Only the lower 6 bits have meaning.
@@ -859,7 +863,9 @@
 /* The ECN bits of the IP header.
  * Part of the IPv4 ToS field or the IPv6 Traffic Class field.
  *
- * Prereqs: OXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd.
+ * Prereqs:
+ *   either OXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd,
+ *   or OXM_OF_IP_VERSION must be either 4 or 6.
  *
  * Format: 8-bit integer with 6 most-significant bits forced to 0.
  * Only the lower 2 bits have meaning.
@@ -869,7 +875,9 @@
 
 /* The "protocol" byte in the IP header.
  *
- * Prereqs: OXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd.
+ * Prereqs:
+ *   either OXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd,
+ *   or OXM_OF_IP_VERSION must be either 4 or 6.
  *
  * Format: 8-bit integer.
  *
@@ -878,7 +886,9 @@
 
 /* The source or destination address in the IP header.
  *
- * Prereqs: OXM_OF_ETH_TYPE must match 0x0800 exactly.
+ * Prereqs:
+ *   either OXM_OF_ETH_TYPE must match 0x0800 exactly,
+ *   or OXM_OF_IP_VERSION must match 4 exactly.
  *
  * Format: 32-bit integer in network byte order.
  *
@@ -892,7 +902,8 @@
 /* The source or destination port in the TCP header.
  *
  * Prereqs:
- *   OXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd.
+ *   either OXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd,
+ *   or OXM_OF_IP_VERSION must be either 4 or 6,
  *   OXM_OF_IP_PROTO must match 6 exactly.
  *
  * Format: 16-bit integer in network byte order.
@@ -916,7 +927,8 @@
 /* The source or destination port in the UDP header.
  *
  * Prereqs:
- *   OXM_OF_ETH_TYPE must match either 0x0800 or 0x86dd.
+ *   either OXM_OF_ETH_TYPE must match either 0x0800 or 0x86dd,
+ *   or OXM_OF_IP_VERSION must match either 4 or 6,
  *   OXM_OF_IP_PROTO must match 17 exactly.
  *
  * Format: 16-bit integer in network byte order.
@@ -928,7 +940,8 @@
 /* The source or destination port in the SCTP header.
  *
  * Prereqs:
- *   OXM_OF_ETH_TYPE must match either 0x0800 or 0x86dd.
+ *   either OXM_OF_ETH_TYPE must match either 0x0800 or 0x86dd,
+ *   or OXM_OF_IP_VERSION must match either 4 or 6,
  *   OXM_OF_IP_PROTO must match 132 exactly.
  *
  * Format: 16-bit integer in network byte order.
@@ -940,7 +953,8 @@
 /* The type or code in the ICMP header.
  *
  * Prereqs:
- *   OXM_OF_ETH_TYPE must match 0x0800 exactly.
+ *   either OXM_OF_ETH_TYPE must match 0x0800 exactly,
+ *   or OXM_OF_IP_VERSION must match 4 exactly,
  *   OXM_OF_IP_PROTO must match 1 exactly.
  *
  * Format: 8-bit integer.
@@ -988,7 +1002,9 @@
 
 /* The source or destination address in the IPv6 header.
  *
- * Prereqs: OXM_OF_ETH_TYPE must match 0x86dd exactly.
+ * Prereqs:
+ *   either OXM_OF_ETH_TYPE must match 0x86dd exactly,
+ *   or OXM_OF_IP_VERSION must match 6 exactly.
  *
  * Format: 128-bit IPv6 address.
  *
@@ -1002,7 +1018,8 @@
 /* The IPv6 Flow Label
  *
  * Prereqs:
- *   OXM_OF_ETH_TYPE must match 0x86dd exactly
+ *   either OXM_OF_ETH_TYPE must match 0x86dd exactly,
+ *   or OXM_OF_IP_VERSION must match 6 exactly.
  *
  * Format: 32-bit integer with 12 most-significant bits forced to 0.
  * Only the lower 20 bits have meaning.
@@ -1015,7 +1032,8 @@
 /* The type or code in the ICMPv6 header.
  *
  * Prereqs:
- *   OXM_OF_ETH_TYPE must match 0x86dd exactly.
+ *   either OXM_OF_ETH_TYPE must match 0x86dd exactly,
+ *   or OXM_OF_IP_VERSION must match 6 exactly,
  *   OXM_OF_IP_PROTO must match 58 exactly.
  *
  * Format: 8-bit integer.
@@ -1027,7 +1045,8 @@
 /* The target address in an IPv6 Neighbor Discovery message.
  *
  * Prereqs:
- *   OXM_OF_ETH_TYPE must match 0x86dd exactly.
+ *   either OXM_OF_ETH_TYPE must match 0x86dd exactly,
+ *   or OXM_OF_IP_VERSION must match 6 exactly,
  *   OXM_OF_IP_PROTO must match 58 exactly.
  *   OXM_OF_ICMPV6_TYPE must be either 135 or 136.
  *
@@ -1040,7 +1059,8 @@
  * message.
  *
  * Prereqs:
- *   OXM_OF_ETH_TYPE must match 0x86dd exactly.
+ *   either OXM_OF_ETH_TYPE must match 0x86dd exactly,
+ *   or OXM_OF_IP_VERSION must match 6 exactly,
  *   OXM_OF_IP_PROTO must match 58 exactly.
  *   OXM_OF_ICMPV6_TYPE must be exactly 135.
  *
@@ -1053,7 +1073,8 @@
  * message.
  *
  * Prereqs:
- *   OXM_OF_ETH_TYPE must match 0x86dd exactly.
+ *   either OXM_OF_ETH_TYPE must match 0x86dd exactly,
+ *   or OXM_OF_IP_VERSION must match 6 exactly,
  *   OXM_OF_IP_PROTO must match 58 exactly.
  *   OXM_OF_ICMPV6_TYPE must be exactly 136.
  *
@@ -1131,7 +1152,8 @@
 /* The IPv6 Extension Header pseudo-field.
  *
  * Prereqs:
- *   OXM_OF_ETH_TYPE must match 0x86dd exactly
+ *   either OXM_OF_ETH_TYPE must match 0x86dd exactly,
+ *   or OXM_OF_IP_VERSION must match 6 exactly.
  *
  * Format: 16-bit integer with 7 most-significant bits forced to 0.
  * Only the lower 9 bits have meaning.
@@ -1182,6 +1204,32 @@
  * Masking: Not maskable. */
 #define OXM_OF_ACTSET_OUTPUT OXM_HEADER  (0x8000, OFPXMT_OFB_ACTSET_OUTPUT, 4)
 
+/* IP version.
+ *
+ * IP version header, 0x4 for IPv4 packets, 0x6 for IPv6 packets.
+ * Root type for IP packets, only used for pure IP packets, with
+ * no header in front of the IP header.
+ *
+ * Prereqs: None.
+ *
+ * Format: 8-bit integer with 4 most-significant bits forced to 0.
+ * Only the lower 4 bits has meaning.
+ *
+ * Masking: Not maskable. */
+#define OXM_OF_IP_VERSION  OXM_HEADER  (0x8000, OFPXMT_OFB_IP_VERSION, 1)
+
+/* No packet.
+ *
+ * Root type for tables that don't match packets. Those tables would only
+ * match pipeline fields. For example, may be used in circuit switches.
+ *
+ * Prereqs: None.
+ *
+ * Format: No payload - 0 bits.
+ *
+ * Masking: Not maskable. */
+#define OXM_OF_NO_PACKET  OXM_HEADER  (0x8000, OFPXMT_OFB_NO_PACKET, 0)
+
 /* Header for OXM experimenter match fields.
  * The experimenter class should not use OXM_HEADER() macros for defining
  * fields due to this extra header. */
