--- openflow-2012-01-26.h	2015-07-23 09:54:16.896479352 -0700
+++ openflow-2012-02-17.h	2015-07-23 09:54:16.900479352 -0700
@@ -447,9 +447,10 @@
     OFPXMT_OFB_MPLS_LABEL     = 34, /* MPLS label. */
     OFPXMT_OFB_MPLS_TC        = 35, /* MPLS TC. */
     OFPXMT_OFB_PBB_ISID       = 36, /* PBB I-SID. */
+    OFPXMT_OFB_TUNNEL_ID      = 37, /* Logical Port Metadata. */
 };
 
-#define OFPXMT_OFB_ALL    ((UINT64_C(1) << 37) - 1)
+#define OFPXMT_OFB_ALL    ((UINT64_C(1) << 38) - 1)
 
 /* OpenFlow port on which the packet was received.
  * May be a physical port, a logical port, or the reserved port OFPP_LOCAL
@@ -816,6 +817,25 @@
 #define OXM_OF_PBB_ISID   OXM_HEADER  (0x8000, OFPXMT_OFB_PBB_ISID, 3)
 #define OXM_OF_PBB_ISID_W OXM_HEADER_W(0x8000, OFPXMT_OFB_PBB_ISID, 3)
 
+/* Logical Port Metadata.
+ *
+ * Metadata associated with a logical port.
+ * If the logical port performs encapsulation and decapsulation, this
+ * is the demultiplexing field from the encapsulation header.
+ * For example, for a packet received via GRE tunnel including a (32-bit) key,
+ * the key is stored in the low 32-bits and the high bits are zeroed.
+ * For a MPLS logical port, the low 20 bits represent the MPLS Label.
+ * For a VxLAN logical port, the low 24 bits represent the VNI.
+ * If the packet is not received through a logical port, the value is 0.
+ *
+ * Prereqs: None.
+ *
+ * Format: 64-bit integer in network byte order.
+ *
+ * Masking: Arbitrary masks. */
+#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)
+
 /* Header for OXM experimenter match fields. */
 struct ofp_oxm_experimenter_header {
     uint32_t oxm_header;        /* oxm_class = OFPXMC_EXPERIMENTER */
