--- openflow-2012-06-25.h	2015-07-23 09:54:17.376479371 -0700
+++ openflow-2012-06-27.h	2015-07-23 09:54:17.380479371 -0700
@@ -151,7 +151,7 @@
     OFPT_METER_MOD          = 29, /* Controller/switch message */
 
     /* Controller role change event messages. */
-    OFPT_ROLE_EVENT         = 30, /* Async message */
+    OFPT_ROLE_STATUS        = 30, /* Async message */
 };
 
 /* Header on all OpenFlow packets. */
@@ -2702,7 +2702,7 @@
     OFPCR_ROLE_SLAVE    = 3,    /* Read-only access. */
 };
 
-/* Role request, reply and event message. */
+/* Role request and reply message. */
 struct ofp_role_request {
     struct ofp_header header;   /* Type OFPT_ROLE_REQUEST/OFPT_ROLE_REPLY. */
     uint32_t role;              /* One of OFPCR_ROLE_*. */
@@ -2711,11 +2711,21 @@
 };
 OFP_ASSERT(sizeof(struct ofp_role_request) == 24);
 
-/* Other async messages bitmask. */
-enum ofp_async_message_type {
-    OFPAMT_ROLE_EVENT = 1,    /* Role event */
+/* What changed about the controller role */
+enum ofp_controller_role_reason {
+    OFPCRR_MASTER_REQUEST = 0,  /* Another controller asked to be master. */
 };
 
+/* Role status event message. */
+struct ofp_role_status {
+    struct ofp_header header;   /* Type OFPT_ROLE_REQUEST/OFPT_ROLE_REPLY. */
+    uint32_t role;              /* One of OFPCR_ROLE_*. */
+    uint8_t reason;             /* One of OFPCRR_*. */
+    uint8_t pad[3];             /* Align to 64 bits. */
+    uint64_t generation_id;     /* Master Election Generation Id */
+};
+OFP_ASSERT(sizeof(struct ofp_role_status) == 24);
+
 /* Async Config property types.
  * Low order bit cleared indicates a property for the slave role.
  * Low order bit set indicates a property for the master/equal role.
@@ -2727,8 +2737,8 @@
     OFPACPT_PORT_STATUS_MASTER   = 3,  /* Port-status mask for master. */
     OFPACPT_FLOW_REMOVED_SLAVE   = 4,  /* Flow removed mask for slave. */
     OFPACPT_FLOW_REMOVED_MASTER  = 5,  /* Flow removed mask for master. */
-    OFPACPT_OTHER_EVENT_SLAVE    = 6,  /* Other events mask for slave. */
-    OFPACPT_OTHER_EVENT_MASTER   = 7,  /* Other events mask for master. */
+    OFPACPT_ROLE_STATUS_SLAVE    = 6,  /* Role status mask for slave. */
+    OFPACPT_ROLE_STATUS_MASTER   = 7,  /* Role status mask for master. */
     OFPTFPT_EXPERIMENTER_SLAVE   = 0xFFFE, /* Experimenter for slave. */
     OFPTFPT_EXPERIMENTER_MASTER  = 0xFFFF, /* Experimenter for master. */
 };
@@ -2745,7 +2755,7 @@
     uint16_t         type;    /* One of OFPACPT_PACKET_IN_*,
                                  OFPACPT_PORT_STATUS_*,
                                  OFPACPT_FLOW_REMOVED_*,
-                                 OFPACPT_OTHER_EVENT_*. */
+                                 OFPACPT_ROLE_STATUS_*. */
     uint16_t         length;  /* Length in bytes of this property. */
     uint32_t         mask;    /* Bitmasks of reason values. */
 };
