--- openflow-2013-11-27-2.h	2015-07-23 09:54:17.740479386 -0700
+++ openflow-2014-01-21.h	2015-07-23 09:54:17.748479387 -0700
@@ -660,6 +660,7 @@
     OFPXMC_NXM_0          = 0x0000,    /* Backward compatibility with NXM */
     OFPXMC_NXM_1          = 0x0001,    /* Backward compatibility with NXM */
     OFPXMC_OPENFLOW_BASIC = 0x8000,    /* Basic class for OpenFlow */
+    OFPXMC_PACKET_REGS    = 0x8001,    /* Packet registers (pipeline fields). */
     OFPXMC_EXPERIMENTER   = 0xFFFF,    /* Experimenter class */
 };
 
@@ -707,15 +708,6 @@
     OFPXMT_OFB_IPV6_EXTHDR    = 39, /* IPv6 Extension Header pseudo-field */
     OFPXMT_OFB_PBB_UCA        = 41, /* PBB UCA header field. */
     OFPXMT_OFB_TCP_FLAGS      = 42, /* TCP flags. */
-
-    OFPXMT_OFB_PKT_REG_0      = 128, /* Packet register 0 (scratch space). */
-    OFPXMT_OFB_PKT_REG_1      = 129, /* Packet register 1 (scratch space). */
-    OFPXMT_OFB_PKT_REG_2      = 130, /* Packet register 2 (scratch space). */
-    OFPXMT_OFB_PKT_REG_3      = 131, /* Packet register 3 (scratch space). */
-    OFPXMT_OFB_PKT_REG_4      = 132, /* Packet register 4 (scratch space). */
-    OFPXMT_OFB_PKT_REG_5      = 133, /* Packet register 5 (scratch space). */
-    OFPXMT_OFB_PKT_REG_6      = 134, /* Packet register 6 (scratch space). */
-    OFPXMT_OFB_PKT_REG_7      = 135, /* Packet register 7 (scratch space). */
 };
 
 #define OFPXMT_OFB_ALL    ((UINT64_C(1) << 42) - 1)
@@ -1183,7 +1175,7 @@
  * Set to zero when packet enters the pipeline.
  * May be used to stored values through the pipeline.
  * Usually not usable as a match field.
- * Switch may not implement all those registers.
+ * Switch implement a variable number of registers, may be 0.
  *
  * Prereqs: None.
  *
@@ -1191,22 +1183,8 @@
  *
  * Masking: Arbitrary masks.
  */
-#define OXM_OF_PKT_REG_0    OXM_HEADER  (0x8000, OFPXMT_OFB_PKT_REG_0, 8)
-#define OXM_OF_PKT_REG_0_W  OXM_HEADER_W(0x8000, OFPXMT_OFB_PKT_REG_0, 8)
-#define OXM_OF_PKT_REG_1    OXM_HEADER  (0x8000, OFPXMT_OFB_PKT_REG_1, 8)
-#define OXM_OF_PKT_REG_1_W  OXM_HEADER_W(0x8000, OFPXMT_OFB_PKT_REG_1, 8)
-#define OXM_OF_PKT_REG_2    OXM_HEADER  (0x8000, OFPXMT_OFB_PKT_REG_2, 8)
-#define OXM_OF_PKT_REG_2_W  OXM_HEADER_W(0x8000, OFPXMT_OFB_PKT_REG_2, 8)
-#define OXM_OF_PKT_REG_3    OXM_HEADER  (0x8000, OFPXMT_OFB_PKT_REG_3, 8)
-#define OXM_OF_PKT_REG_3_W  OXM_HEADER_W(0x8000, OFPXMT_OFB_PKT_REG_3, 8)
-#define OXM_OF_PKT_REG_4    OXM_HEADER  (0x8000, OFPXMT_OFB_PKT_REG_4, 8)
-#define OXM_OF_PKT_REG_4_W  OXM_HEADER_W(0x8000, OFPXMT_OFB_PKT_REG_4, 8)
-#define OXM_OF_PKT_REG_5    OXM_HEADER  (0x8000, OFPXMT_OFB_PKT_REG_5, 8)
-#define OXM_OF_PKT_REG_5_W  OXM_HEADER_W(0x8000, OFPXMT_OFB_PKT_REG_5, 8)
-#define OXM_OF_PKT_REG_6    OXM_HEADER  (0x8000, OFPXMT_OFB_PKT_REG_6, 8)
-#define OXM_OF_PKT_REG_6_W  OXM_HEADER_W(0x8000, OFPXMT_OFB_PKT_REG_6, 8)
-#define OXM_OF_PKT_REG_7    OXM_HEADER  (0x8000, OFPXMT_OFB_PKT_REG_7, 8)
-#define OXM_OF_PKT_REG_7_W  OXM_HEADER_W(0x8000, OFPXMT_OFB_PKT_REG_7, 8)
+#define OXM_OF_PKT_REG(N)    (OXM_HEADER  (0x8001, N, 8))
+#define OXM_OF_PKT_REG_W(N)  (OXM_HEADER_W(0x8001, N, 8))
 
 /* ## -------------------------- ## */
 /* ## OpenFlow Extensible Stats. ## */
