--- openflow-2012-03-16-2.h	2015-07-23 09:54:17.060479358 -0700
+++ openflow-2012-03-19.h	2015-07-23 09:54:17.064479359 -0700
@@ -454,9 +454,10 @@
     OFPXMT_OFP_MPLS_BOS       = 36, /* MPLS BoS bit. */
     OFPXMT_OFB_PBB_ISID       = 37, /* PBB I-SID. */
     OFPXMT_OFB_TUNNEL_ID      = 38, /* Logical Port Metadata. */
+    OFPXMT_OFB_IPV6_EXTHDR    = 39, /* IPv6 Extension Header pseudo-field */
 };
 
-#define OFPXMT_OFB_ALL    ((UINT64_C(1) << 39) - 1)
+#define OFPXMT_OFB_ALL    ((UINT64_C(1) << 40) - 1)
 
 /* OpenFlow port on which the packet was received.
  * May be a physical port, a logical port, or the reserved port OFPP_LOCAL
@@ -853,6 +854,31 @@
 #define OXM_OF_TUNNEL_ID    OXM_HEADER  (0x8000, OFPXMT_OFB_TUNNEL_ID, 8)
 #define OXM_OF_TUNNEL_ID_W  OXM_HEADER_W(0x8000, OFPXMT_OFB_TUNNEL_ID, 8)
 
+/* The IPv6 Extension Header pseudo-field.
+ *
+ * Prereqs:
+ *   OXM_OF_ETH_TYPE must match 0x86dd exactly
+ *
+ * Format: 16-bit integer with 7 most-significant bits forced to 0.
+ * Only the lower 9 bits have meaning.
+ *
+ * Masking: Maskable. */
+#define OXM_OF_IPV6_EXTHDR   OXM_HEADER  (0x8000, OFPXMT_OFB_IPV6_EXTHDR, 2)
+#define OXM_OF_IPV6_EXTHDR   OXM_HEADER_W(0x8000, OFPXMT_OFB_IPV6_EXTHDR, 2)
+
+/* Bit definitions for IPv6 Extension Header pseudo-field. */
+enum ofp_ipv6exthdr_flags {      
+    OFPIEH_NONEXT = 1 << 0,     /* N-bit ("no next header" encountered */
+    OFPIEH_ESP    = 1 << 1,     /* E-bit (Encrypted Sec payload hdr present */
+    OFPIEH_AUTH   = 1 << 2,     /* A-bit (Auth header present) */
+    OFPIEH_DEST   = 1 << 3,     /* D-bit (1 or 2 Dest headers present) */
+    OFPIEH_FRAG   = 1 << 4,     /* F-bit (Frag header present) */
+    OFPIEH_ROUTER = 1 << 5,     /* R-bit (router header present) */
+    OFPIEH_HOP    = 1 << 6,     /* H-bit (Hop-by-hop header present */
+    OFPIEH_UNREP  = 1 << 7,     /* U-bit (Unexpected repeats encountered) */
+    OFPIEH_UNSEQ  = 1 << 8,     /* S-bit (Unexpected sequencing encountered) */
+};
+
 /* Header for OXM experimenter match fields. */
 struct ofp_oxm_experimenter_header {
     uint32_t oxm_header;        /* oxm_class = OFPXMC_EXPERIMENTER */
