• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * This file is auto-generated. Modifications will be lost.
3  *
4  * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5  * for more information.
6  */
7 #ifndef _UAPI_LINUX_VIRTIO_NET_H
8 #define _UAPI_LINUX_VIRTIO_NET_H
9 #include <linux/types.h>
10 #include <linux/virtio_ids.h>
11 #include <linux/virtio_config.h>
12 #include <linux/virtio_types.h>
13 #include <linux/if_ether.h>
14 #define VIRTIO_NET_F_CSUM 0
15 #define VIRTIO_NET_F_GUEST_CSUM 1
16 #define VIRTIO_NET_F_CTRL_GUEST_OFFLOADS 2
17 #define VIRTIO_NET_F_MTU 3
18 #define VIRTIO_NET_F_MAC 5
19 #define VIRTIO_NET_F_GUEST_TSO4 7
20 #define VIRTIO_NET_F_GUEST_TSO6 8
21 #define VIRTIO_NET_F_GUEST_ECN 9
22 #define VIRTIO_NET_F_GUEST_UFO 10
23 #define VIRTIO_NET_F_HOST_TSO4 11
24 #define VIRTIO_NET_F_HOST_TSO6 12
25 #define VIRTIO_NET_F_HOST_ECN 13
26 #define VIRTIO_NET_F_HOST_UFO 14
27 #define VIRTIO_NET_F_MRG_RXBUF 15
28 #define VIRTIO_NET_F_STATUS 16
29 #define VIRTIO_NET_F_CTRL_VQ 17
30 #define VIRTIO_NET_F_CTRL_RX 18
31 #define VIRTIO_NET_F_CTRL_VLAN 19
32 #define VIRTIO_NET_F_CTRL_RX_EXTRA 20
33 #define VIRTIO_NET_F_GUEST_ANNOUNCE 21
34 #define VIRTIO_NET_F_MQ 22
35 #define VIRTIO_NET_F_CTRL_MAC_ADDR 23
36 #define VIRTIO_NET_F_VQ_NOTF_COAL 52
37 #define VIRTIO_NET_F_NOTF_COAL 53
38 #define VIRTIO_NET_F_GUEST_USO4 54
39 #define VIRTIO_NET_F_GUEST_USO6 55
40 #define VIRTIO_NET_F_HOST_USO 56
41 #define VIRTIO_NET_F_HASH_REPORT 57
42 #define VIRTIO_NET_F_GUEST_HDRLEN 59
43 #define VIRTIO_NET_F_RSS 60
44 #define VIRTIO_NET_F_RSC_EXT 61
45 #define VIRTIO_NET_F_STANDBY 62
46 #define VIRTIO_NET_F_SPEED_DUPLEX 63
47 #ifndef VIRTIO_NET_NO_LEGACY
48 #define VIRTIO_NET_F_GSO 6
49 #endif
50 #define VIRTIO_NET_S_LINK_UP 1
51 #define VIRTIO_NET_S_ANNOUNCE 2
52 #define VIRTIO_NET_RSS_HASH_TYPE_IPv4 (1 << 0)
53 #define VIRTIO_NET_RSS_HASH_TYPE_TCPv4 (1 << 1)
54 #define VIRTIO_NET_RSS_HASH_TYPE_UDPv4 (1 << 2)
55 #define VIRTIO_NET_RSS_HASH_TYPE_IPv6 (1 << 3)
56 #define VIRTIO_NET_RSS_HASH_TYPE_TCPv6 (1 << 4)
57 #define VIRTIO_NET_RSS_HASH_TYPE_UDPv6 (1 << 5)
58 #define VIRTIO_NET_RSS_HASH_TYPE_IP_EX (1 << 6)
59 #define VIRTIO_NET_RSS_HASH_TYPE_TCP_EX (1 << 7)
60 #define VIRTIO_NET_RSS_HASH_TYPE_UDP_EX (1 << 8)
61 struct virtio_net_config {
62   __u8 mac[ETH_ALEN];
63   __virtio16 status;
64   __virtio16 max_virtqueue_pairs;
65   __virtio16 mtu;
66   __le32 speed;
67   __u8 duplex;
68   __u8 rss_max_key_size;
69   __le16 rss_max_indirection_table_length;
70   __le32 supported_hash_types;
71 } __attribute__((packed));
72 struct virtio_net_hdr_v1 {
73 #define VIRTIO_NET_HDR_F_NEEDS_CSUM 1
74 #define VIRTIO_NET_HDR_F_DATA_VALID 2
75 #define VIRTIO_NET_HDR_F_RSC_INFO 4
76   __u8 flags;
77 #define VIRTIO_NET_HDR_GSO_NONE 0
78 #define VIRTIO_NET_HDR_GSO_TCPV4 1
79 #define VIRTIO_NET_HDR_GSO_UDP 3
80 #define VIRTIO_NET_HDR_GSO_TCPV6 4
81 #define VIRTIO_NET_HDR_GSO_UDP_L4 5
82 #define VIRTIO_NET_HDR_GSO_ECN 0x80
83   __u8 gso_type;
84   __virtio16 hdr_len;
85   __virtio16 gso_size;
86   union {
87     struct {
88       __virtio16 csum_start;
89       __virtio16 csum_offset;
90     };
91     struct {
92       __virtio16 start;
93       __virtio16 offset;
94     } csum;
95     struct {
96       __le16 segments;
97       __le16 dup_acks;
98     } rsc;
99   };
100   __virtio16 num_buffers;
101 };
102 struct virtio_net_hdr_v1_hash {
103   struct virtio_net_hdr_v1 hdr;
104   __le32 hash_value;
105 #define VIRTIO_NET_HASH_REPORT_NONE 0
106 #define VIRTIO_NET_HASH_REPORT_IPv4 1
107 #define VIRTIO_NET_HASH_REPORT_TCPv4 2
108 #define VIRTIO_NET_HASH_REPORT_UDPv4 3
109 #define VIRTIO_NET_HASH_REPORT_IPv6 4
110 #define VIRTIO_NET_HASH_REPORT_TCPv6 5
111 #define VIRTIO_NET_HASH_REPORT_UDPv6 6
112 #define VIRTIO_NET_HASH_REPORT_IPv6_EX 7
113 #define VIRTIO_NET_HASH_REPORT_TCPv6_EX 8
114 #define VIRTIO_NET_HASH_REPORT_UDPv6_EX 9
115   __le16 hash_report;
116   __le16 padding;
117 };
118 #ifndef VIRTIO_NET_NO_LEGACY
119 struct virtio_net_hdr {
120   __u8 flags;
121   __u8 gso_type;
122   __virtio16 hdr_len;
123   __virtio16 gso_size;
124   __virtio16 csum_start;
125   __virtio16 csum_offset;
126 };
127 struct virtio_net_hdr_mrg_rxbuf {
128   struct virtio_net_hdr hdr;
129   __virtio16 num_buffers;
130 };
131 #endif
132 struct virtio_net_ctrl_hdr {
133   __u8 __linux_class;
134   __u8 cmd;
135 } __attribute__((packed));
136 typedef __u8 virtio_net_ctrl_ack;
137 #define VIRTIO_NET_OK 0
138 #define VIRTIO_NET_ERR 1
139 #define VIRTIO_NET_CTRL_RX 0
140 #define VIRTIO_NET_CTRL_RX_PROMISC 0
141 #define VIRTIO_NET_CTRL_RX_ALLMULTI 1
142 #define VIRTIO_NET_CTRL_RX_ALLUNI 2
143 #define VIRTIO_NET_CTRL_RX_NOMULTI 3
144 #define VIRTIO_NET_CTRL_RX_NOUNI 4
145 #define VIRTIO_NET_CTRL_RX_NOBCAST 5
146 struct virtio_net_ctrl_mac {
147   __virtio32 entries;
148   __u8 macs[][ETH_ALEN];
149 } __attribute__((packed));
150 #define VIRTIO_NET_CTRL_MAC 1
151 #define VIRTIO_NET_CTRL_MAC_TABLE_SET 0
152 #define VIRTIO_NET_CTRL_MAC_ADDR_SET 1
153 #define VIRTIO_NET_CTRL_VLAN 2
154 #define VIRTIO_NET_CTRL_VLAN_ADD 0
155 #define VIRTIO_NET_CTRL_VLAN_DEL 1
156 #define VIRTIO_NET_CTRL_ANNOUNCE 3
157 #define VIRTIO_NET_CTRL_ANNOUNCE_ACK 0
158 #define VIRTIO_NET_CTRL_MQ 4
159 struct virtio_net_ctrl_mq {
160   __virtio16 virtqueue_pairs;
161 };
162 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET 0
163 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN 1
164 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX 0x8000
165 struct virtio_net_rss_config {
166   __le32 hash_types;
167   __le16 indirection_table_mask;
168   __le16 unclassified_queue;
169   __le16 indirection_table[1];
170   __le16 max_tx_vq;
171   __u8 hash_key_length;
172   __u8 hash_key_data[];
173 };
174 #define VIRTIO_NET_CTRL_MQ_RSS_CONFIG 1
175 struct virtio_net_hash_config {
176   __le32 hash_types;
177   __le16 reserved[4];
178   __u8 hash_key_length;
179   __u8 hash_key_data[];
180 };
181 #define VIRTIO_NET_CTRL_MQ_HASH_CONFIG 2
182 #define VIRTIO_NET_CTRL_GUEST_OFFLOADS 5
183 #define VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET 0
184 #define VIRTIO_NET_CTRL_NOTF_COAL 6
185 struct virtio_net_ctrl_coal_tx {
186   __le32 tx_max_packets;
187   __le32 tx_usecs;
188 };
189 #define VIRTIO_NET_CTRL_NOTF_COAL_TX_SET 0
190 struct virtio_net_ctrl_coal_rx {
191   __le32 rx_max_packets;
192   __le32 rx_usecs;
193 };
194 #define VIRTIO_NET_CTRL_NOTF_COAL_RX_SET 1
195 #define VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET 2
196 #define VIRTIO_NET_CTRL_NOTF_COAL_VQ_GET 3
197 struct virtio_net_ctrl_coal {
198   __le32 max_packets;
199   __le32 max_usecs;
200 };
201 struct virtio_net_ctrl_coal_vq {
202   __le16 vqn;
203   __le16 reserved;
204   struct virtio_net_ctrl_coal coal;
205 };
206 #endif
207