--- openflow-2013-05-17.h	2015-07-23 09:54:17.328479369 -0700
+++ openflow-2013-01-25.h	2015-07-23 09:54:17.332479370 -0700
@@ -1014,8 +1014,7 @@
 /* Header for OXM experimenter match fields. */
 struct ofp_oxm_experimenter_header {
     uint32_t oxm_header;        /* oxm_class = OFPXMC_EXPERIMENTER */
-    uint32_t experimenter;      /* Experimenter ID which takes the same
-                                   form as in struct ofp_experimenter_header. */
+    uint32_t experimenter;      /* Experimenter ID. */
 };
 OFP_ASSERT(sizeof(struct ofp_oxm_experimenter_header) == 8);
 
@@ -1160,9 +1159,7 @@
 struct ofp_action_experimenter_header {
     uint16_t type;                  /* OFPAT_EXPERIMENTER. */
     uint16_t len;                   /* Length is a multiple of 8. */
-    uint32_t experimenter;          /* Experimenter ID which takes the same
-                                       form as in struct
-                                       ofp_experimenter_header. */
+    uint32_t experimenter;          /* Experimenter ID. */
 };
 OFP_ASSERT(sizeof(struct ofp_action_experimenter_header) == 8);
 
@@ -1233,14 +1230,13 @@
 OFP_ASSERT(sizeof(struct ofp_instruction_meter) == 8);
 
 /* Instruction structure for experimental instructions */
-struct ofp_instruction_experimenter {
-    uint16_t type;		/* OFPIT_EXPERIMENTER */
+struct ofp_instruction_experimenter_header {
+    uint16_t type;              /* OFPIT_EXPERIMENTER. */
     uint16_t len;               /* Length is padded to 64 bits. */
-    uint32_t experimenter;      /* Experimenter ID which takes the same form
-                                   as in struct ofp_experimenter_header. */
+    uint32_t experimenter;      /* Experimenter ID. */
     /* Experimenter-defined arbitrary additional data. */
 };
-OFP_ASSERT(sizeof(struct ofp_instruction_experimenter) == 8);
+OFP_ASSERT(sizeof(struct ofp_instruction_experimenter_header) == 8);
 
 /* ## --------------------------- ## */
 /* ## OpenFlow Flow Modification. ## */
@@ -1504,9 +1500,7 @@
     uint16_t        len;     /* Length in bytes of this band. */
     uint32_t        rate;    /* Rate for this band. */
     uint32_t        burst_size;   /* Size of bursts. */
-    uint32_t        experimenter; /* Experimenter ID which takes the same
-                                     form as in struct
-                                     ofp_experimenter_header. */
+    uint32_t        experimenter; /* Experimenter ID. */
 };
 OFP_ASSERT(sizeof(struct ofp_meter_band_experimenter) == 16);
 
@@ -1804,11 +1798,10 @@
     struct ofp_header header;
 
     uint16_t type;            /* OFPET_EXPERIMENTER. */
-    uint16_t exp_type;        /* Experimenter defined. */
-    uint32_t experimenter;    /* Experimenter ID which takes the same form
-                                 as in struct ofp_experimenter_header. */
+    uint16_t exp_code;        /* Experimenter defined. */
+    uint32_t experimenter;    /* Experimenter ID. */
     uint8_t data[0];          /* Variable-length data.  Interpreted based
-                                 on the type and code.  No padding. */
+                                 on the type and experimenter.  No padding. */
 };
 OFP_ASSERT(sizeof(struct ofp_error_experimenter_msg) == 16);
 
@@ -2503,23 +2496,33 @@
 
 /* Body for ofp_multipart_request/reply of type OFPMP_EXPERIMENTER. */
 struct ofp_experimenter_multipart_header {
-    uint32_t experimenter;    /* Experimenter ID which takes the same form
-                                 as in struct ofp_experimenter_header. */
+    uint32_t experimenter;    /* Experimenter ID. */
     uint32_t exp_type;        /* Experimenter defined. */
     /* Experimenter-defined arbitrary additional data. */
 };
 OFP_ASSERT(sizeof(struct ofp_experimenter_multipart_header) == 8);
 
-/* Experimenter extension. */
-struct ofp_experimenter_header {
+/* Typical Experimenter structure. */
+struct ofp_experimenter_structure {
+    uint32_t experimenter;      /* Experimenter ID:
+                                 * - MSB 0: low-order bytes are IEEE OUI.
+                                 * - MSB != 0: defined by ONF. */
+    uint32_t exp_type;          /* Experimenter defined. */
+    uint8_t  experimenter_data[0];
+};
+OFP_ASSERT(sizeof(struct ofp_experimenter_structure) == 8);
+
+/* Experimenter extension message. */
+struct ofp_experimenter_msg {
     struct ofp_header header;   /* Type OFPT_EXPERIMENTER. */
     uint32_t experimenter;      /* Experimenter ID:
                                  * - MSB 0: low-order bytes are IEEE OUI.
                                  * - MSB != 0: defined by ONF. */
     uint32_t exp_type;          /* Experimenter defined. */
     /* Experimenter-defined arbitrary additional data. */
+    uint8_t  experimenter_data[0];
 };
-OFP_ASSERT(sizeof(struct ofp_experimenter_header) == 16);
+OFP_ASSERT(sizeof(struct ofp_experimenter_msg) == 16);
 
 /* Configures the "role" of the sending controller.  The default role is:
  *
