+/* All ones is used to indicate all queues in a port (for stats retrieval). */
+#define OFPQ_ALL 0xffffffff
+
+/* Body for stats request of type OFPST_QUEUE. */
+struct ofp_queue_stats_request {
+ struct ofp_stats_msg osm;
+ ovs_be16 port_no; /* All ports if OFPP_ALL. */
+ uint8_t pad[2]; /* Align to 32-bits. */
+ ovs_be32 queue_id; /* All queues if OFPQ_ALL. */
+};
+OFP_ASSERT(sizeof(struct ofp_queue_stats_request) == 20);
+
+/* Body for stats reply of type OFPST_QUEUE consists of an array of this
+ * structure type. */
+struct ofp_queue_stats {
+ ovs_be16 port_no;
+ uint8_t pad[2]; /* Align to 32-bits. */
+ ovs_be32 queue_id; /* Queue id. */
+ ovs_32aligned_be64 tx_bytes; /* Number of transmitted bytes. */
+ ovs_32aligned_be64 tx_packets; /* Number of transmitted packets. */
+ ovs_32aligned_be64 tx_errors; /* # of packets dropped due to overrun. */
+};
+OFP_ASSERT(sizeof(struct ofp_queue_stats) == 32);
+
+/* Vendor extension stats message. */
+struct ofp_vendor_stats_msg {
+ struct ofp_stats_msg osm; /* Type OFPST_VENDOR. */
+ ovs_be32 vendor; /* Vendor ID:
+ * - MSB 0: low-order bytes are IEEE OUI.
+ * - MSB != 0: defined by OpenFlow
+ * consortium. */
+ /* Followed by vendor-defined arbitrary additional data. */
+};
+OFP_ASSERT(sizeof(struct ofp_vendor_stats_msg) == 16);
+