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