• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * This header was generated from the Linux kernel headers by update_headers.py,
3  * to provide necessary information from kernel to userspace, such as constants,
4  * structures, and macros, and thus, contains no copyrightable information.
5  */
6 #ifndef _UAPI_LINUX_VIRTIO_NET_H
7 #define _UAPI_LINUX_VIRTIO_NET_H
8 #include <linux/types.h>
9 #include <linux/virtio_ids.h>
10 #include <linux/virtio_config.h>
11 #include <linux/virtio_types.h>
12 #include <linux/if_ether.h>
13 #define VIRTIO_NET_F_CSUM	0
14 #define VIRTIO_NET_F_GUEST_CSUM	1
15 #define VIRTIO_NET_F_CTRL_GUEST_OFFLOADS 2
16 #define VIRTIO_NET_F_MTU	3
17 #define VIRTIO_NET_F_MAC	5
18 #define VIRTIO_NET_F_GUEST_TSO4	7
19 #define VIRTIO_NET_F_GUEST_TSO6	8
20 #define VIRTIO_NET_F_GUEST_ECN	9
21 #define VIRTIO_NET_F_GUEST_UFO	10
22 #define VIRTIO_NET_F_HOST_TSO4	11
23 #define VIRTIO_NET_F_HOST_TSO6	12
24 #define VIRTIO_NET_F_HOST_ECN	13
25 #define VIRTIO_NET_F_HOST_UFO	14
26 #define VIRTIO_NET_F_MRG_RXBUF	15
27 #define VIRTIO_NET_F_STATUS	16
28 #define VIRTIO_NET_F_CTRL_VQ	17
29 #define VIRTIO_NET_F_CTRL_RX	18
30 #define VIRTIO_NET_F_CTRL_VLAN	19
31 #define VIRTIO_NET_F_CTRL_RX_EXTRA 20
32 #define VIRTIO_NET_F_GUEST_ANNOUNCE 21
33 #define VIRTIO_NET_F_MQ	22
34 #define VIRTIO_NET_F_CTRL_MAC_ADDR 23
35 #define VIRTIO_NET_F_STANDBY	  62
36 #define VIRTIO_NET_F_SPEED_DUPLEX 63
37 #ifndef VIRTIO_NET_NO_LEGACY
38 #define VIRTIO_NET_F_GSO	6
39 #endif
40 #define VIRTIO_NET_S_LINK_UP	1
41 #define VIRTIO_NET_S_ANNOUNCE	2
42 struct virtio_net_config {
43 
44 	__u8 mac[ETH_ALEN];
45 
46 	__u16 status;
47 
48 	__u16 max_virtqueue_pairs;
49 
50 	__u16 mtu;
51 
52 	__u32 speed;
53 
54 	__u8 duplex;
55 } __attribute__((packed));
56 struct virtio_net_hdr_v1 {
57 #define VIRTIO_NET_HDR_F_NEEDS_CSUM	1
58 #define VIRTIO_NET_HDR_F_DATA_VALID	2
59 	__u8 flags;
60 #define VIRTIO_NET_HDR_GSO_NONE		0
61 #define VIRTIO_NET_HDR_GSO_TCPV4	1
62 #define VIRTIO_NET_HDR_GSO_UDP		3
63 #define VIRTIO_NET_HDR_GSO_TCPV6	4
64 #define VIRTIO_NET_HDR_GSO_ECN		0x80
65 	__u8 gso_type;
66 	__virtio16 hdr_len;
67 	__virtio16 gso_size;
68 	__virtio16 csum_start;
69 	__virtio16 csum_offset;
70 	__virtio16 num_buffers;
71 };
72 #ifndef VIRTIO_NET_NO_LEGACY
73 struct virtio_net_hdr {
74 
75 	__u8 flags;
76 
77 	__u8 gso_type;
78 	__virtio16 hdr_len;
79 	__virtio16 gso_size;
80 	__virtio16 csum_start;
81 	__virtio16 csum_offset;
82 };
83 struct virtio_net_hdr_mrg_rxbuf {
84 	struct virtio_net_hdr hdr;
85 	__virtio16 num_buffers;
86 };
87 #endif
88 struct virtio_net_ctrl_hdr {
89 	__u8 class;
90 	__u8 cmd;
91 } __attribute__((packed));
92 typedef __u8 virtio_net_ctrl_ack;
93 #define VIRTIO_NET_OK     0
94 #define VIRTIO_NET_ERR    1
95 #define VIRTIO_NET_CTRL_RX    0
96  #define VIRTIO_NET_CTRL_RX_PROMISC      0
97  #define VIRTIO_NET_CTRL_RX_ALLMULTI     1
98  #define VIRTIO_NET_CTRL_RX_ALLUNI       2
99  #define VIRTIO_NET_CTRL_RX_NOMULTI      3
100  #define VIRTIO_NET_CTRL_RX_NOUNI        4
101  #define VIRTIO_NET_CTRL_RX_NOBCAST      5
102 struct virtio_net_ctrl_mac {
103 	__virtio32 entries;
104 	__u8 macs[][ETH_ALEN];
105 } __attribute__((packed));
106 #define VIRTIO_NET_CTRL_MAC    1
107  #define VIRTIO_NET_CTRL_MAC_TABLE_SET        0
108  #define VIRTIO_NET_CTRL_MAC_ADDR_SET         1
109 #define VIRTIO_NET_CTRL_VLAN       2
110  #define VIRTIO_NET_CTRL_VLAN_ADD             0
111  #define VIRTIO_NET_CTRL_VLAN_DEL             1
112 #define VIRTIO_NET_CTRL_ANNOUNCE       3
113  #define VIRTIO_NET_CTRL_ANNOUNCE_ACK         0
114 struct virtio_net_ctrl_mq {
115 	__virtio16 virtqueue_pairs;
116 };
117 #define VIRTIO_NET_CTRL_MQ   4
118  #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET        0
119  #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN        1
120  #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX        0x8000
121 #define VIRTIO_NET_CTRL_GUEST_OFFLOADS   5
122 #define VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET        0
123 #endif
124