--- openflow-2012-01-09.h	2015-07-23 09:54:16.872479351 -0700
+++ openflow-2012-01-09-2.h	2015-07-23 09:54:16.876479351 -0700
@@ -453,9 +453,10 @@
     OFPXMT_OFB_IPV6_ND_TLL    = 33, /* Target link-layer for ND. */
     OFPXMT_OFB_MPLS_LABEL     = 34, /* MPLS label. */
     OFPXMT_OFB_MPLS_TC        = 35, /* MPLS TC. */
+    OFPXMT_OFB_PBB_ISID       = 36, /* PBB I-SID. */
 };
 
-#define OFPXMT_OFB_ALL    ((UINT64_C(1) << 36) - 1)
+#define OFPXMT_OFB_ALL    ((UINT64_C(1) << 37) - 1)
 
 /* OpenFlow port on which the packet was received.
  * May be a physical port, a logical port, or the reserved port OFPP_LOCAL
@@ -808,6 +809,20 @@
  * Masking: Not maskable. */
 #define OXM_OF_MPLS_TC     OXM_HEADER  (0x8000, OFPXMT_OFB_MPLS_TC, 1)
 
+/* IEEE 802.1ah I-SID.
+ *
+ * For a packet with an PBB header, this is the I-SID from the
+ * outermost service tag.
+ *
+ * Prereqs:
+ *   OXM_OF_ETH_TYPE must match 0x88E7 exactly.
+ *
+ * Format: 24-bit integer in network byte order.
+ *
+ * Masking: Arbitrary masks. */
+#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)
+
 /* Header for OXM experimenter match fields. */
 struct ofp_oxm_experimenter_header {
     uint32_t oxm_header;        /* oxm_class = OFPXMC_EXPERIMENTER */
@@ -838,6 +853,8 @@
     OFPAT_SET_NW_TTL   = 23, /* IP TTL. */
     OFPAT_DEC_NW_TTL   = 24, /* Decrement IP TTL. */
     OFPAT_SET_FIELD    = 25, /* Set a header field using OXM TLV format. */
+    OFPAT_PUSH_PBB     = 26, /* Push a new PBB service tag */
+    OFPAT_POP_PBB      = 27, /* Pop the outer PBB service tag */
     OFPAT_EXPERIMENTER = 0xffff
 };
 
@@ -873,9 +890,9 @@
 };
 OFP_ASSERT(sizeof(struct ofp_action_mpls_ttl) == 8);
 
-/* Action structure for OFPAT_PUSH_VLAN/MPLS. */
+/* Action structure for OFPAT_PUSH_VLAN/MPLS/PBB. */
 struct ofp_action_push {
-    uint16_t type;                  /* OFPAT_PUSH_VLAN/MPLS. */
+    uint16_t type;                  /* OFPAT_PUSH_VLAN/MPLS/PBB. */
     uint16_t len;                   /* Length is 8. */
     uint16_t ethertype;             /* Ethertype */
     uint8_t pad[2];
