brintos

brintos / linux-shallow public Read only

0
0
Text · 18.2 KiB · ac91747 Raw
553 lines · c
1#ifndef _UAPI_LINUX_VIRTIO_NET_H2#define _UAPI_LINUX_VIRTIO_NET_H3/* This header is BSD licensed so anyone can use the definitions to implement4 * compatible drivers/servers.5 *6 * Redistribution and use in source and binary forms, with or without7 * modification, are permitted provided that the following conditions8 * are met:9 * 1. Redistributions of source code must retain the above copyright10 *    notice, this list of conditions and the following disclaimer.11 * 2. Redistributions in binary form must reproduce the above copyright12 *    notice, this list of conditions and the following disclaimer in the13 *    documentation and/or other materials provided with the distribution.14 * 3. Neither the name of IBM nor the names of its contributors15 *    may be used to endorse or promote products derived from this software16 *    without specific prior written permission.17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE20 * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF27 * SUCH DAMAGE. */28#include <linux/types.h>29#include <linux/virtio_ids.h>30#include <linux/virtio_config.h>31#include <linux/virtio_types.h>32#include <linux/if_ether.h>33 34/* The feature bitmap for virtio net */35#define VIRTIO_NET_F_CSUM	0	/* Host handles pkts w/ partial csum */36#define VIRTIO_NET_F_GUEST_CSUM	1	/* Guest handles pkts w/ partial csum */37#define VIRTIO_NET_F_CTRL_GUEST_OFFLOADS 2 /* Dynamic offload configuration. */38#define VIRTIO_NET_F_MTU	3	/* Initial MTU advice */39#define VIRTIO_NET_F_MAC	5	/* Host has given MAC address. */40#define VIRTIO_NET_F_GUEST_TSO4	7	/* Guest can handle TSOv4 in. */41#define VIRTIO_NET_F_GUEST_TSO6	8	/* Guest can handle TSOv6 in. */42#define VIRTIO_NET_F_GUEST_ECN	9	/* Guest can handle TSO[6] w/ ECN in. */43#define VIRTIO_NET_F_GUEST_UFO	10	/* Guest can handle UFO in. */44#define VIRTIO_NET_F_HOST_TSO4	11	/* Host can handle TSOv4 in. */45#define VIRTIO_NET_F_HOST_TSO6	12	/* Host can handle TSOv6 in. */46#define VIRTIO_NET_F_HOST_ECN	13	/* Host can handle TSO[6] w/ ECN in. */47#define VIRTIO_NET_F_HOST_UFO	14	/* Host can handle UFO in. */48#define VIRTIO_NET_F_MRG_RXBUF	15	/* Host can merge receive buffers. */49#define VIRTIO_NET_F_STATUS	16	/* virtio_net_config.status available */50#define VIRTIO_NET_F_CTRL_VQ	17	/* Control channel available */51#define VIRTIO_NET_F_CTRL_RX	18	/* Control channel RX mode support */52#define VIRTIO_NET_F_CTRL_VLAN	19	/* Control channel VLAN filtering */53#define VIRTIO_NET_F_CTRL_RX_EXTRA 20	/* Extra RX mode control support */54#define VIRTIO_NET_F_GUEST_ANNOUNCE 21	/* Guest can announce device on the55					 * network */56#define VIRTIO_NET_F_MQ	22	/* Device supports Receive Flow57					 * Steering */58#define VIRTIO_NET_F_CTRL_MAC_ADDR 23	/* Set MAC address */59#define VIRTIO_NET_F_DEVICE_STATS 50	/* Device can provide device-level statistics. */60#define VIRTIO_NET_F_VQ_NOTF_COAL 52	/* Device supports virtqueue notification coalescing */61#define VIRTIO_NET_F_NOTF_COAL	53	/* Device supports notifications coalescing */62#define VIRTIO_NET_F_GUEST_USO4	54	/* Guest can handle USOv4 in. */63#define VIRTIO_NET_F_GUEST_USO6	55	/* Guest can handle USOv6 in. */64#define VIRTIO_NET_F_HOST_USO	56	/* Host can handle USO in. */65#define VIRTIO_NET_F_HASH_REPORT  57	/* Supports hash report */66#define VIRTIO_NET_F_GUEST_HDRLEN  59	/* Guest provides the exact hdr_len value. */67#define VIRTIO_NET_F_RSS	  60	/* Supports RSS RX steering */68#define VIRTIO_NET_F_RSC_EXT	  61	/* extended coalescing info */69#define VIRTIO_NET_F_STANDBY	  62	/* Act as standby for another device70					 * with the same MAC.71					 */72#define VIRTIO_NET_F_SPEED_DUPLEX 63	/* Device set linkspeed and duplex */73 74#ifndef VIRTIO_NET_NO_LEGACY75#define VIRTIO_NET_F_GSO	6	/* Host handles pkts w/ any GSO type */76#endif /* VIRTIO_NET_NO_LEGACY */77 78#define VIRTIO_NET_S_LINK_UP	1	/* Link is up */79#define VIRTIO_NET_S_ANNOUNCE	2	/* Announcement is needed */80 81/* supported/enabled hash types */82#define VIRTIO_NET_RSS_HASH_TYPE_IPv4          (1 << 0)83#define VIRTIO_NET_RSS_HASH_TYPE_TCPv4         (1 << 1)84#define VIRTIO_NET_RSS_HASH_TYPE_UDPv4         (1 << 2)85#define VIRTIO_NET_RSS_HASH_TYPE_IPv6          (1 << 3)86#define VIRTIO_NET_RSS_HASH_TYPE_TCPv6         (1 << 4)87#define VIRTIO_NET_RSS_HASH_TYPE_UDPv6         (1 << 5)88#define VIRTIO_NET_RSS_HASH_TYPE_IP_EX         (1 << 6)89#define VIRTIO_NET_RSS_HASH_TYPE_TCP_EX        (1 << 7)90#define VIRTIO_NET_RSS_HASH_TYPE_UDP_EX        (1 << 8)91 92struct virtio_net_config {93	/* The config defining mac address (if VIRTIO_NET_F_MAC) */94	__u8 mac[ETH_ALEN];95	/* See VIRTIO_NET_F_STATUS and VIRTIO_NET_S_* above */96	__virtio16 status;97	/* Maximum number of each of transmit and receive queues;98	 * see VIRTIO_NET_F_MQ and VIRTIO_NET_CTRL_MQ.99	 * Legal values are between 1 and 0x8000100	 */101	__virtio16 max_virtqueue_pairs;102	/* Default maximum transmit unit advice */103	__virtio16 mtu;104	/*105	 * speed, in units of 1Mb. All values 0 to INT_MAX are legal.106	 * Any other value stands for unknown.107	 */108	__le32 speed;109	/*110	 * 0x00 - half duplex111	 * 0x01 - full duplex112	 * Any other value stands for unknown.113	 */114	__u8 duplex;115	/* maximum size of RSS key */116	__u8 rss_max_key_size;117	/* maximum number of indirection table entries */118	__le16 rss_max_indirection_table_length;119	/* bitmask of supported VIRTIO_NET_RSS_HASH_ types */120	__le32 supported_hash_types;121} __attribute__((packed));122 123/*124 * This header comes first in the scatter-gather list.  If you don't125 * specify GSO or CSUM features, you can simply ignore the header.126 *127 * This is bitwise-equivalent to the legacy struct virtio_net_hdr_mrg_rxbuf,128 * only flattened.129 */130struct virtio_net_hdr_v1 {131#define VIRTIO_NET_HDR_F_NEEDS_CSUM	1	/* Use csum_start, csum_offset */132#define VIRTIO_NET_HDR_F_DATA_VALID	2	/* Csum is valid */133#define VIRTIO_NET_HDR_F_RSC_INFO	4	/* rsc info in csum_ fields */134	__u8 flags;135#define VIRTIO_NET_HDR_GSO_NONE		0	/* Not a GSO frame */136#define VIRTIO_NET_HDR_GSO_TCPV4	1	/* GSO frame, IPv4 TCP (TSO) */137#define VIRTIO_NET_HDR_GSO_UDP		3	/* GSO frame, IPv4 UDP (UFO) */138#define VIRTIO_NET_HDR_GSO_TCPV6	4	/* GSO frame, IPv6 TCP */139#define VIRTIO_NET_HDR_GSO_UDP_L4	5	/* GSO frame, IPv4& IPv6 UDP (USO) */140#define VIRTIO_NET_HDR_GSO_ECN		0x80	/* TCP has ECN set */141	__u8 gso_type;142	__virtio16 hdr_len;	/* Ethernet + IP + tcp/udp hdrs */143	__virtio16 gso_size;	/* Bytes to append to hdr_len per frame */144	union {145		struct {146			__virtio16 csum_start;147			__virtio16 csum_offset;148		};149		/* Checksum calculation */150		struct {151			/* Position to start checksumming from */152			__virtio16 start;153			/* Offset after that to place checksum */154			__virtio16 offset;155		} csum;156		/* Receive Segment Coalescing */157		struct {158			/* Number of coalesced segments */159			__le16 segments;160			/* Number of duplicated acks */161			__le16 dup_acks;162		} rsc;163	};164	__virtio16 num_buffers;	/* Number of merged rx buffers */165};166 167struct virtio_net_hdr_v1_hash {168	struct virtio_net_hdr_v1 hdr;169	__le32 hash_value;170#define VIRTIO_NET_HASH_REPORT_NONE            0171#define VIRTIO_NET_HASH_REPORT_IPv4            1172#define VIRTIO_NET_HASH_REPORT_TCPv4           2173#define VIRTIO_NET_HASH_REPORT_UDPv4           3174#define VIRTIO_NET_HASH_REPORT_IPv6            4175#define VIRTIO_NET_HASH_REPORT_TCPv6           5176#define VIRTIO_NET_HASH_REPORT_UDPv6           6177#define VIRTIO_NET_HASH_REPORT_IPv6_EX         7178#define VIRTIO_NET_HASH_REPORT_TCPv6_EX        8179#define VIRTIO_NET_HASH_REPORT_UDPv6_EX        9180	__le16 hash_report;181	__le16 padding;182};183 184#ifndef VIRTIO_NET_NO_LEGACY185/* This header comes first in the scatter-gather list.186 * For legacy virtio, if VIRTIO_F_ANY_LAYOUT is not negotiated, it must187 * be the first element of the scatter-gather list.  If you don't188 * specify GSO or CSUM features, you can simply ignore the header. */189struct virtio_net_hdr {190	/* See VIRTIO_NET_HDR_F_* */191	__u8 flags;192	/* See VIRTIO_NET_HDR_GSO_* */193	__u8 gso_type;194	__virtio16 hdr_len;		/* Ethernet + IP + tcp/udp hdrs */195	__virtio16 gso_size;		/* Bytes to append to hdr_len per frame */196	__virtio16 csum_start;	/* Position to start checksumming from */197	__virtio16 csum_offset;	/* Offset after that to place checksum */198};199 200/* This is the version of the header to use when the MRG_RXBUF201 * feature has been negotiated. */202struct virtio_net_hdr_mrg_rxbuf {203	struct virtio_net_hdr hdr;204	__virtio16 num_buffers;	/* Number of merged rx buffers */205};206#endif /* ...VIRTIO_NET_NO_LEGACY */207 208/*209 * Control virtqueue data structures210 *211 * The control virtqueue expects a header in the first sg entry212 * and an ack/status response in the last entry.  Data for the213 * command goes in between.214 */215struct virtio_net_ctrl_hdr {216	__u8 class;217	__u8 cmd;218} __attribute__((packed));219 220typedef __u8 virtio_net_ctrl_ack;221 222#define VIRTIO_NET_OK     0223#define VIRTIO_NET_ERR    1224 225/*226 * Control the RX mode, ie. promisucous, allmulti, etc...227 * All commands require an "out" sg entry containing a 1 byte228 * state value, zero = disable, non-zero = enable.  Commands229 * 0 and 1 are supported with the VIRTIO_NET_F_CTRL_RX feature.230 * Commands 2-5 are added with VIRTIO_NET_F_CTRL_RX_EXTRA.231 */232#define VIRTIO_NET_CTRL_RX    0233 #define VIRTIO_NET_CTRL_RX_PROMISC      0234 #define VIRTIO_NET_CTRL_RX_ALLMULTI     1235 #define VIRTIO_NET_CTRL_RX_ALLUNI       2236 #define VIRTIO_NET_CTRL_RX_NOMULTI      3237 #define VIRTIO_NET_CTRL_RX_NOUNI        4238 #define VIRTIO_NET_CTRL_RX_NOBCAST      5239 240/*241 * Control the MAC242 *243 * The MAC filter table is managed by the hypervisor, the guest should244 * assume the size is infinite.  Filtering should be considered245 * non-perfect, ie. based on hypervisor resources, the guest may246 * received packets from sources not specified in the filter list.247 *248 * In addition to the class/cmd header, the TABLE_SET command requires249 * two out scatterlists.  Each contains a 4 byte count of entries followed250 * by a concatenated byte stream of the ETH_ALEN MAC addresses.  The251 * first sg list contains unicast addresses, the second is for multicast.252 * This functionality is present if the VIRTIO_NET_F_CTRL_RX feature253 * is available.254 *255 * The ADDR_SET command requests one out scatterlist, it contains a256 * 6 bytes MAC address. This functionality is present if the257 * VIRTIO_NET_F_CTRL_MAC_ADDR feature is available.258 */259struct virtio_net_ctrl_mac {260	__virtio32 entries;261	__u8 macs[][ETH_ALEN];262} __attribute__((packed));263 264#define VIRTIO_NET_CTRL_MAC    1265 #define VIRTIO_NET_CTRL_MAC_TABLE_SET        0266 #define VIRTIO_NET_CTRL_MAC_ADDR_SET         1267 268/*269 * Control VLAN filtering270 *271 * The VLAN filter table is controlled via a simple ADD/DEL interface.272 * VLAN IDs not added may be filterd by the hypervisor.  Del is the273 * opposite of add.  Both commands expect an out entry containing a 2274 * byte VLAN ID.  VLAN filterting is available with the275 * VIRTIO_NET_F_CTRL_VLAN feature bit.276 */277#define VIRTIO_NET_CTRL_VLAN       2278 #define VIRTIO_NET_CTRL_VLAN_ADD             0279 #define VIRTIO_NET_CTRL_VLAN_DEL             1280 281/*282 * Control link announce acknowledgement283 *284 * The command VIRTIO_NET_CTRL_ANNOUNCE_ACK is used to indicate that285 * driver has recevied the notification; device would clear the286 * VIRTIO_NET_S_ANNOUNCE bit in the status field after it receives287 * this command.288 */289#define VIRTIO_NET_CTRL_ANNOUNCE       3290 #define VIRTIO_NET_CTRL_ANNOUNCE_ACK         0291 292/*293 * Control Receive Flow Steering294 */295#define VIRTIO_NET_CTRL_MQ   4296/*297 * The command VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET298 * enables Receive Flow Steering, specifying the number of the transmit and299 * receive queues that will be used. After the command is consumed and acked by300 * the device, the device will not steer new packets on receive virtqueues301 * other than specified nor read from transmit virtqueues other than specified.302 * Accordingly, driver should not transmit new packets  on virtqueues other than303 * specified.304 */305struct virtio_net_ctrl_mq {306	__virtio16 virtqueue_pairs;307};308 309 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET        0310 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN        1311 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX        0x8000312 313/*314 * The command VIRTIO_NET_CTRL_MQ_RSS_CONFIG has the same effect as315 * VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET does and additionally configures316 * the receive steering to use a hash calculated for incoming packet317 * to decide on receive virtqueue to place the packet. The command318 * also provides parameters to calculate a hash and receive virtqueue.319 */320struct virtio_net_rss_config {321	__le32 hash_types;322	__le16 indirection_table_mask;323	__le16 unclassified_queue;324	__le16 indirection_table[1/* + indirection_table_mask */];325	__le16 max_tx_vq;326	__u8 hash_key_length;327	__u8 hash_key_data[/* hash_key_length */];328};329 330 #define VIRTIO_NET_CTRL_MQ_RSS_CONFIG          1331 332/*333 * The command VIRTIO_NET_CTRL_MQ_HASH_CONFIG requests the device334 * to include in the virtio header of the packet the value of the335 * calculated hash and the report type of hash. It also provides336 * parameters for hash calculation. The command requires feature337 * VIRTIO_NET_F_HASH_REPORT to be negotiated to extend the338 * layout of virtio header as defined in virtio_net_hdr_v1_hash.339 */340struct virtio_net_hash_config {341	__le32 hash_types;342	/* for compatibility with virtio_net_rss_config */343	__le16 reserved[4];344	__u8 hash_key_length;345	__u8 hash_key_data[/* hash_key_length */];346};347 348 #define VIRTIO_NET_CTRL_MQ_HASH_CONFIG         2349 350/*351 * Control network offloads352 *353 * Reconfigures the network offloads that Guest can handle.354 *355 * Available with the VIRTIO_NET_F_CTRL_GUEST_OFFLOADS feature bit.356 *357 * Command data format matches the feature bit mask exactly.358 *359 * See VIRTIO_NET_F_GUEST_* for the list of offloads360 * that can be enabled/disabled.361 */362#define VIRTIO_NET_CTRL_GUEST_OFFLOADS   5363#define VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET        0364 365/*366 * Control notifications coalescing.367 *368 * Request the device to change the notifications coalescing parameters.369 *370 * Available with the VIRTIO_NET_F_NOTF_COAL feature bit.371 */372#define VIRTIO_NET_CTRL_NOTF_COAL		6373/*374 * Set the tx-usecs/tx-max-packets parameters.375 */376struct virtio_net_ctrl_coal_tx {377	/* Maximum number of packets to send before a TX notification */378	__le32 tx_max_packets;379	/* Maximum number of usecs to delay a TX notification */380	__le32 tx_usecs;381};382 383#define VIRTIO_NET_CTRL_NOTF_COAL_TX_SET		0384 385/*386 * Set the rx-usecs/rx-max-packets parameters.387 */388struct virtio_net_ctrl_coal_rx {389	/* Maximum number of packets to receive before a RX notification */390	__le32 rx_max_packets;391	/* Maximum number of usecs to delay a RX notification */392	__le32 rx_usecs;393};394 395#define VIRTIO_NET_CTRL_NOTF_COAL_RX_SET		1396#define VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET		2397#define VIRTIO_NET_CTRL_NOTF_COAL_VQ_GET		3398 399struct virtio_net_ctrl_coal {400	__le32 max_packets;401	__le32 max_usecs;402};403 404struct  virtio_net_ctrl_coal_vq {405	__le16 vqn;406	__le16 reserved;407	struct virtio_net_ctrl_coal coal;408};409 410/*411 * Device Statistics412 */413#define VIRTIO_NET_CTRL_STATS         8414#define VIRTIO_NET_CTRL_STATS_QUERY   0415#define VIRTIO_NET_CTRL_STATS_GET     1416 417struct virtio_net_stats_capabilities {418 419#define VIRTIO_NET_STATS_TYPE_CVQ       (1ULL << 32)420 421#define VIRTIO_NET_STATS_TYPE_RX_BASIC  (1ULL << 0)422#define VIRTIO_NET_STATS_TYPE_RX_CSUM   (1ULL << 1)423#define VIRTIO_NET_STATS_TYPE_RX_GSO    (1ULL << 2)424#define VIRTIO_NET_STATS_TYPE_RX_SPEED  (1ULL << 3)425 426#define VIRTIO_NET_STATS_TYPE_TX_BASIC  (1ULL << 16)427#define VIRTIO_NET_STATS_TYPE_TX_CSUM   (1ULL << 17)428#define VIRTIO_NET_STATS_TYPE_TX_GSO    (1ULL << 18)429#define VIRTIO_NET_STATS_TYPE_TX_SPEED  (1ULL << 19)430 431	__le64 supported_stats_types[1];432};433 434struct virtio_net_ctrl_queue_stats {435	struct {436		__le16 vq_index;437		__le16 reserved[3];438		__le64 types_bitmap[1];439	} stats[1];440};441 442struct virtio_net_stats_reply_hdr {443#define VIRTIO_NET_STATS_TYPE_REPLY_CVQ       32444 445#define VIRTIO_NET_STATS_TYPE_REPLY_RX_BASIC  0446#define VIRTIO_NET_STATS_TYPE_REPLY_RX_CSUM   1447#define VIRTIO_NET_STATS_TYPE_REPLY_RX_GSO    2448#define VIRTIO_NET_STATS_TYPE_REPLY_RX_SPEED  3449 450#define VIRTIO_NET_STATS_TYPE_REPLY_TX_BASIC  16451#define VIRTIO_NET_STATS_TYPE_REPLY_TX_CSUM   17452#define VIRTIO_NET_STATS_TYPE_REPLY_TX_GSO    18453#define VIRTIO_NET_STATS_TYPE_REPLY_TX_SPEED  19454	__u8 type;455	__u8 reserved;456	__le16 vq_index;457	__le16 reserved1;458	__le16 size;459};460 461struct virtio_net_stats_cvq {462	struct virtio_net_stats_reply_hdr hdr;463 464	__le64 command_num;465	__le64 ok_num;466};467 468struct virtio_net_stats_rx_basic {469	struct virtio_net_stats_reply_hdr hdr;470 471	__le64 rx_notifications;472 473	__le64 rx_packets;474	__le64 rx_bytes;475 476	__le64 rx_interrupts;477 478	__le64 rx_drops;479	__le64 rx_drop_overruns;480};481 482struct virtio_net_stats_tx_basic {483	struct virtio_net_stats_reply_hdr hdr;484 485	__le64 tx_notifications;486 487	__le64 tx_packets;488	__le64 tx_bytes;489 490	__le64 tx_interrupts;491 492	__le64 tx_drops;493	__le64 tx_drop_malformed;494};495 496struct virtio_net_stats_rx_csum {497	struct virtio_net_stats_reply_hdr hdr;498 499	__le64 rx_csum_valid;500	__le64 rx_needs_csum;501	__le64 rx_csum_none;502	__le64 rx_csum_bad;503};504 505struct virtio_net_stats_tx_csum {506	struct virtio_net_stats_reply_hdr hdr;507 508	__le64 tx_csum_none;509	__le64 tx_needs_csum;510};511 512struct virtio_net_stats_rx_gso {513	struct virtio_net_stats_reply_hdr hdr;514 515	__le64 rx_gso_packets;516	__le64 rx_gso_bytes;517	__le64 rx_gso_packets_coalesced;518	__le64 rx_gso_bytes_coalesced;519};520 521struct virtio_net_stats_tx_gso {522	struct virtio_net_stats_reply_hdr hdr;523 524	__le64 tx_gso_packets;525	__le64 tx_gso_bytes;526	__le64 tx_gso_segments;527	__le64 tx_gso_segments_bytes;528	__le64 tx_gso_packets_noseg;529	__le64 tx_gso_bytes_noseg;530};531 532struct virtio_net_stats_rx_speed {533	struct virtio_net_stats_reply_hdr hdr;534 535	/* rx_{packets,bytes}_allowance_exceeded are too long. So rename to536	 * short name.537	 */538	__le64 rx_ratelimit_packets;539	__le64 rx_ratelimit_bytes;540};541 542struct virtio_net_stats_tx_speed {543	struct virtio_net_stats_reply_hdr hdr;544 545	/* tx_{packets,bytes}_allowance_exceeded are too long. So rename to546	 * short name.547	 */548	__le64 tx_ratelimit_packets;549	__le64 tx_ratelimit_bytes;550};551 552#endif /* _UAPI_LINUX_VIRTIO_NET_H */553