diff options
Diffstat (limited to 'include/uapi/linux/virtio_net.h')
| -rw-r--r-- | include/uapi/linux/virtio_net.h | 143 | 
1 files changed, 143 insertions, 0 deletions
diff --git a/include/uapi/linux/virtio_net.h b/include/uapi/linux/virtio_net.h index cc65ef0f3c3e..ac9174717ef1 100644 --- a/include/uapi/linux/virtio_net.h +++ b/include/uapi/linux/virtio_net.h @@ -56,6 +56,7 @@  #define VIRTIO_NET_F_MQ	22	/* Device supports Receive Flow  					 * Steering */  #define VIRTIO_NET_F_CTRL_MAC_ADDR 23	/* Set MAC address */ +#define VIRTIO_NET_F_DEVICE_STATS 50	/* Device can provide device-level statistics. */  #define VIRTIO_NET_F_VQ_NOTF_COAL 52	/* Device supports virtqueue notification coalescing */  #define VIRTIO_NET_F_NOTF_COAL	53	/* Device supports notifications coalescing */  #define VIRTIO_NET_F_GUEST_USO4	54	/* Guest can handle USOv4 in. */ @@ -406,4 +407,146 @@ struct  virtio_net_ctrl_coal_vq {  	struct virtio_net_ctrl_coal coal;  }; +/* + * Device Statistics + */ +#define VIRTIO_NET_CTRL_STATS         8 +#define VIRTIO_NET_CTRL_STATS_QUERY   0 +#define VIRTIO_NET_CTRL_STATS_GET     1 + +struct virtio_net_stats_capabilities { + +#define VIRTIO_NET_STATS_TYPE_CVQ       (1ULL << 32) + +#define VIRTIO_NET_STATS_TYPE_RX_BASIC  (1ULL << 0) +#define VIRTIO_NET_STATS_TYPE_RX_CSUM   (1ULL << 1) +#define VIRTIO_NET_STATS_TYPE_RX_GSO    (1ULL << 2) +#define VIRTIO_NET_STATS_TYPE_RX_SPEED  (1ULL << 3) + +#define VIRTIO_NET_STATS_TYPE_TX_BASIC  (1ULL << 16) +#define VIRTIO_NET_STATS_TYPE_TX_CSUM   (1ULL << 17) +#define VIRTIO_NET_STATS_TYPE_TX_GSO    (1ULL << 18) +#define VIRTIO_NET_STATS_TYPE_TX_SPEED  (1ULL << 19) + +	__le64 supported_stats_types[1]; +}; + +struct virtio_net_ctrl_queue_stats { +	struct { +		__le16 vq_index; +		__le16 reserved[3]; +		__le64 types_bitmap[1]; +	} stats[1]; +}; + +struct virtio_net_stats_reply_hdr { +#define VIRTIO_NET_STATS_TYPE_REPLY_CVQ       32 + +#define VIRTIO_NET_STATS_TYPE_REPLY_RX_BASIC  0 +#define VIRTIO_NET_STATS_TYPE_REPLY_RX_CSUM   1 +#define VIRTIO_NET_STATS_TYPE_REPLY_RX_GSO    2 +#define VIRTIO_NET_STATS_TYPE_REPLY_RX_SPEED  3 + +#define VIRTIO_NET_STATS_TYPE_REPLY_TX_BASIC  16 +#define VIRTIO_NET_STATS_TYPE_REPLY_TX_CSUM   17 +#define VIRTIO_NET_STATS_TYPE_REPLY_TX_GSO    18 +#define VIRTIO_NET_STATS_TYPE_REPLY_TX_SPEED  19 +	__u8 type; +	__u8 reserved; +	__le16 vq_index; +	__le16 reserved1; +	__le16 size; +}; + +struct virtio_net_stats_cvq { +	struct virtio_net_stats_reply_hdr hdr; + +	__le64 command_num; +	__le64 ok_num; +}; + +struct virtio_net_stats_rx_basic { +	struct virtio_net_stats_reply_hdr hdr; + +	__le64 rx_notifications; + +	__le64 rx_packets; +	__le64 rx_bytes; + +	__le64 rx_interrupts; + +	__le64 rx_drops; +	__le64 rx_drop_overruns; +}; + +struct virtio_net_stats_tx_basic { +	struct virtio_net_stats_reply_hdr hdr; + +	__le64 tx_notifications; + +	__le64 tx_packets; +	__le64 tx_bytes; + +	__le64 tx_interrupts; + +	__le64 tx_drops; +	__le64 tx_drop_malformed; +}; + +struct virtio_net_stats_rx_csum { +	struct virtio_net_stats_reply_hdr hdr; + +	__le64 rx_csum_valid; +	__le64 rx_needs_csum; +	__le64 rx_csum_none; +	__le64 rx_csum_bad; +}; + +struct virtio_net_stats_tx_csum { +	struct virtio_net_stats_reply_hdr hdr; + +	__le64 tx_csum_none; +	__le64 tx_needs_csum; +}; + +struct virtio_net_stats_rx_gso { +	struct virtio_net_stats_reply_hdr hdr; + +	__le64 rx_gso_packets; +	__le64 rx_gso_bytes; +	__le64 rx_gso_packets_coalesced; +	__le64 rx_gso_bytes_coalesced; +}; + +struct virtio_net_stats_tx_gso { +	struct virtio_net_stats_reply_hdr hdr; + +	__le64 tx_gso_packets; +	__le64 tx_gso_bytes; +	__le64 tx_gso_segments; +	__le64 tx_gso_segments_bytes; +	__le64 tx_gso_packets_noseg; +	__le64 tx_gso_bytes_noseg; +}; + +struct virtio_net_stats_rx_speed { +	struct virtio_net_stats_reply_hdr hdr; + +	/* rx_{packets,bytes}_allowance_exceeded are too long. So rename to +	 * short name. +	 */ +	__le64 rx_ratelimit_packets; +	__le64 rx_ratelimit_bytes; +}; + +struct virtio_net_stats_tx_speed { +	struct virtio_net_stats_reply_hdr hdr; + +	/* tx_{packets,bytes}_allowance_exceeded are too long. So rename to +	 * short name. +	 */ +	__le64 tx_ratelimit_packets; +	__le64 tx_ratelimit_bytes; +}; +  #endif /* _UAPI_LINUX_VIRTIO_NET_H */  |