-/* The type of an OpenFlow asynchronous message. */
-enum ofconn_async_msg_type {
- OAM_PACKET_IN, /* OFPT_PACKET_IN or NXT_PACKET_IN. */
- OAM_PORT_STATUS, /* OFPT_PORT_STATUS. */
- OAM_FLOW_REMOVED, /* OFPT_FLOW_REMOVED or NXT_FLOW_REMOVED. */
- OAM_N_TYPES
+/* An asynchronous message that might need to be queued between threads. */
+struct ofproto_async_msg {
+ struct ovs_list list_node; /* For queuing. */
+ uint16_t controller_id; /* Controller ID to send to. */
+
+ enum ofputil_async_msg_type oam;
+ union {
+ /* OAM_PACKET_IN. */
+ struct {
+ struct ofputil_packet_in up;
+ int max_len; /* From action, or -1 if none. */
+ } pin;
+ };