--- openflow-2012-06-27.h	2015-07-23 09:54:17.380479371 -0700
+++ openflow-2013-01-18-3.h	2015-07-23 09:54:17.388479372 -0700
@@ -2711,6 +2711,35 @@
 };
 OFP_ASSERT(sizeof(struct ofp_role_request) == 24);
 
+/* Role property types.
+ */
+enum ofp_role_prop_type {
+    OFPRPT_EXPERIMENTER           = 0xFFFF, /* Experimenter property. */
+};
+
+/* Common header for all Role Properties */
+struct ofp_role_prop_header {
+    uint16_t         type;    /* One of OFPRPT_*. */
+    uint16_t         length;  /* Length in bytes of this property. */
+};
+OFP_ASSERT(sizeof(struct ofp_role_prop_header) == 4);
+
+/* Experimenter role property */
+struct ofp_role_prop_experimenter {
+    uint16_t         type;    /* One of OFPRPT_EXPERIMENTER. */
+    uint16_t         length;  /* Length in bytes of this property. */
+    uint32_t         experimenter;  /* Experimenter ID which takes the same
+                                       form as in struct
+                                       ofp_experimenter_header. */
+    uint32_t         exp_type;      /* Experimenter defined. */
+    /* Followed by:
+     *   - Exactly (length - 12) bytes containing the experimenter data, then
+     *   - Exactly (length + 7)/8*8 - (length) (between 0 and 7)
+     *     bytes of all-zero bytes */
+    uint32_t         experimenter_data[0];
+};
+OFP_ASSERT(sizeof(struct ofp_role_prop_experimenter) == 12);
+
 /* What changed about the controller role */
 enum ofp_controller_role_reason {
     OFPCRR_MASTER_REQUEST = 0,  /* Another controller asked to be master. */
@@ -2723,6 +2752,9 @@
     uint8_t reason;             /* One of OFPCRR_*. */
     uint8_t pad[3];             /* Align to 64 bits. */
     uint64_t generation_id;     /* Master Election Generation Id */
+
+    /* Role Property list */
+    struct ofp_role_prop_header properties[0];
 };
 OFP_ASSERT(sizeof(struct ofp_role_status) == 24);
 
