--- openflow-2013-01-16-2.h	2015-07-23 09:54:17.372479371 -0700
+++ openflow-2012-06-25.h	2015-07-23 09:54:17.376479371 -0700
@@ -149,6 +149,9 @@
 
     /* Meters and rate limiters configuration messages. */
     OFPT_METER_MOD          = 29, /* Controller/switch message */
+
+    /* Controller role change event messages. */
+    OFPT_ROLE_EVENT         = 30, /* Async message */
 };
 
 /* Header on all OpenFlow packets. */
@@ -2699,7 +2702,7 @@
     OFPCR_ROLE_SLAVE    = 3,    /* Read-only access. */
 };
 
-/* Role request and reply message. */
+/* Role request, reply and event message. */
 struct ofp_role_request {
     struct ofp_header header;   /* Type OFPT_ROLE_REQUEST/OFPT_ROLE_REPLY. */
     uint32_t role;              /* One of OFPCR_ROLE_*. */
@@ -2708,6 +2711,11 @@
 };
 OFP_ASSERT(sizeof(struct ofp_role_request) == 24);
 
+/* Other async messages bitmask. */
+enum ofp_async_message_type {
+    OFPAMT_ROLE_EVENT = 1,    /* Role event */
+};
+
 /* 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.
@@ -2719,6 +2727,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. */
     OFPTFPT_EXPERIMENTER_SLAVE   = 0xFFFE, /* Experimenter for slave. */
     OFPTFPT_EXPERIMENTER_MASTER  = 0xFFFF, /* Experimenter for master. */
 };
@@ -2734,7 +2744,8 @@
 struct ofp_async_config_prop_reasons {
     uint16_t         type;    /* One of OFPACPT_PACKET_IN_*,
                                  OFPACPT_PORT_STATUS_*,
-                                 OFPACPT_FLOW_REMOVED_*. */
+                                 OFPACPT_FLOW_REMOVED_*,
+                                 OFPACPT_OTHER_EVENT_*. */
     uint16_t         length;  /* Length in bytes of this property. */
     uint32_t         mask;    /* Bitmasks of reason values. */
 };
