--- openflow-2011-10-07.h	2015-07-23 09:54:16.708479344 -0700
+++ openflow-2011-10-11-4.h	2015-07-23 09:54:16.712479344 -0700
@@ -409,6 +409,7 @@
 /* OXM Flow match field types for OpenFlow basic class. */
 enum oxm_ofb_match_fields {
     OFPXMT_OFB_IN_PORT        = 0,  /* Switch input port. */
+    OFPXMT_OFB_IN_PHY_PORT    = 34,  /* Switch physical input port. */
     OFPXMT_OFB_METADATA       = 1,  /* Metadata passed between tables. */
     OFPXMT_OFB_ETH_DST        = 2,  /* Ethernet destination address. */
     OFPXMT_OFB_ETH_SRC        = 3,  /* Ethernet source address. */
@@ -444,7 +445,7 @@
     OFPXMT_OFB_MPLS_TC        = 33, /* MPLS TC. */
 };
 
-#define OFPXMT_OFB_ALL    ((UINT64_C(1) << 34) - 1)
+#define OFPXMT_OFB_ALL    ((UINT64_C(1) << 35) - 1)
 
 /* Physical or virtual port on which the packet was received.
  *
@@ -455,6 +456,25 @@
  * Masking: Not maskable. */
 #define OXM_OF_IN_PORT    OXM_HEADER  (0x8000, OFPXMT_OFB_IN_PORT, 4)
 
+/* Physical port on which the packet was received.
+ *
+ * Consider a packet received on a tunnel interface defined over a link
+ * aggregation group (LAG) with two physical port members.  If the tunnel
+ * interface is the virtual port bound to OpenFlow.  In this case,
+ * OFPXMT_OF_IN_PORT is the tunnel's port number and OFPXMT_OF_IN_PHY_PORT is
+ * the physical port number of the LAG on which the tunnel is configured.
+ *
+ * When a packet is received directly on a physical port and not processed by a
+ * virtual port, OFPXMT_OF_IN_PORT and OFPXMT_OF_IN_PHY_PORT have the same
+ * value.
+ *
+ * Prereqs: None.
+ *
+ * Format: 32-bit integer in network byte order.
+ *
+ * Masking: Not maskable. */
+#define OXM_OF_IN_PHY_PORT OXM_HEADER  (0x8000, OFPXMT_OFB_IN_PHY_PORT, 4)
+
 /* Table metadata.
  *
  * Prereqs: None.
@@ -1119,12 +1139,12 @@
 struct ofp_packet_in {
     struct ofp_header header;
     uint32_t buffer_id;     /* ID assigned by datapath. */
-    uint32_t in_phy_port;   /* Physical Port on which frame was received. */
     uint16_t total_len;     /* Full length of frame. */
     uint16_t match_type;    /* OFPMT_OXM. */
     uint16_t match_len;     /* Length of OXM TLVs. */
     uint8_t reason;         /* Reason packet is being sent (one of OFPR_*) */
     uint8_t table_id;       /* ID of the table that was looked up */
+    uint8_t pad[4];         /* Pad to 64 bits. */
     /* Followed by:
      *   - Exactly match_len bytes containing OXM TLVs, then
      *   - Exactly (match_len + 7)/8*8 - match_len (between 0 and 7) bytes of
