xref: /aosp_15_r20/external/crosvm/virtio_sys/src/virtio_net.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1 /* automatically generated by tools/bindgen-all-the-things */
2 
3 #![allow(clippy::missing_safety_doc)]
4 #![allow(clippy::undocumented_unsafe_blocks)]
5 #![allow(clippy::upper_case_acronyms)]
6 #![allow(non_upper_case_globals)]
7 #![allow(non_camel_case_types)]
8 #![allow(non_snake_case)]
9 #![allow(dead_code)]
10 
11 // Added by virtio_sys/bindgen.sh
12 use zerocopy::AsBytes;
13 use zerocopy::FromBytes;
14 use zerocopy::FromZeroes;
15 
16 #[repr(C)]
17 #[derive(Default)]
18 pub struct __IncompleteArrayField<T>(::std::marker::PhantomData<T>, [T; 0]);
19 impl<T> __IncompleteArrayField<T> {
20     #[inline]
new() -> Self21     pub const fn new() -> Self {
22         __IncompleteArrayField(::std::marker::PhantomData, [])
23     }
24     #[inline]
as_ptr(&self) -> *const T25     pub fn as_ptr(&self) -> *const T {
26         self as *const _ as *const T
27     }
28     #[inline]
as_mut_ptr(&mut self) -> *mut T29     pub fn as_mut_ptr(&mut self) -> *mut T {
30         self as *mut _ as *mut T
31     }
32     #[inline]
as_slice(&self, len: usize) -> &[T]33     pub unsafe fn as_slice(&self, len: usize) -> &[T] {
34         ::std::slice::from_raw_parts(self.as_ptr(), len)
35     }
36     #[inline]
as_mut_slice(&mut self, len: usize) -> &mut [T]37     pub unsafe fn as_mut_slice(&mut self, len: usize) -> &mut [T] {
38         ::std::slice::from_raw_parts_mut(self.as_mut_ptr(), len)
39     }
40 }
41 impl<T> ::std::fmt::Debug for __IncompleteArrayField<T> {
fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result42     fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
43         fmt.write_str("__IncompleteArrayField")
44     }
45 }
46 pub const VIRTIO_NET_F_CSUM: u32 = 0;
47 pub const VIRTIO_NET_F_GUEST_CSUM: u32 = 1;
48 pub const VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: u32 = 2;
49 pub const VIRTIO_NET_F_MTU: u32 = 3;
50 pub const VIRTIO_NET_F_MAC: u32 = 5;
51 pub const VIRTIO_NET_F_GUEST_TSO4: u32 = 7;
52 pub const VIRTIO_NET_F_GUEST_TSO6: u32 = 8;
53 pub const VIRTIO_NET_F_GUEST_ECN: u32 = 9;
54 pub const VIRTIO_NET_F_GUEST_UFO: u32 = 10;
55 pub const VIRTIO_NET_F_HOST_TSO4: u32 = 11;
56 pub const VIRTIO_NET_F_HOST_TSO6: u32 = 12;
57 pub const VIRTIO_NET_F_HOST_ECN: u32 = 13;
58 pub const VIRTIO_NET_F_HOST_UFO: u32 = 14;
59 pub const VIRTIO_NET_F_MRG_RXBUF: u32 = 15;
60 pub const VIRTIO_NET_F_STATUS: u32 = 16;
61 pub const VIRTIO_NET_F_CTRL_VQ: u32 = 17;
62 pub const VIRTIO_NET_F_CTRL_RX: u32 = 18;
63 pub const VIRTIO_NET_F_CTRL_VLAN: u32 = 19;
64 pub const VIRTIO_NET_F_CTRL_RX_EXTRA: u32 = 20;
65 pub const VIRTIO_NET_F_GUEST_ANNOUNCE: u32 = 21;
66 pub const VIRTIO_NET_F_MQ: u32 = 22;
67 pub const VIRTIO_NET_F_CTRL_MAC_ADDR: u32 = 23;
68 pub const VIRTIO_NET_F_VQ_NOTF_COAL: u32 = 52;
69 pub const VIRTIO_NET_F_NOTF_COAL: u32 = 53;
70 pub const VIRTIO_NET_F_GUEST_USO4: u32 = 54;
71 pub const VIRTIO_NET_F_GUEST_USO6: u32 = 55;
72 pub const VIRTIO_NET_F_HOST_USO: u32 = 56;
73 pub const VIRTIO_NET_F_HASH_REPORT: u32 = 57;
74 pub const VIRTIO_NET_F_GUEST_HDRLEN: u32 = 59;
75 pub const VIRTIO_NET_F_RSS: u32 = 60;
76 pub const VIRTIO_NET_F_RSC_EXT: u32 = 61;
77 pub const VIRTIO_NET_F_STANDBY: u32 = 62;
78 pub const VIRTIO_NET_F_SPEED_DUPLEX: u32 = 63;
79 pub const VIRTIO_NET_F_GSO: u32 = 6;
80 pub const VIRTIO_NET_S_LINK_UP: u32 = 1;
81 pub const VIRTIO_NET_S_ANNOUNCE: u32 = 2;
82 pub const VIRTIO_NET_RSS_HASH_TYPE_IPv4: u32 = 1;
83 pub const VIRTIO_NET_RSS_HASH_TYPE_TCPv4: u32 = 2;
84 pub const VIRTIO_NET_RSS_HASH_TYPE_UDPv4: u32 = 4;
85 pub const VIRTIO_NET_RSS_HASH_TYPE_IPv6: u32 = 8;
86 pub const VIRTIO_NET_RSS_HASH_TYPE_TCPv6: u32 = 16;
87 pub const VIRTIO_NET_RSS_HASH_TYPE_UDPv6: u32 = 32;
88 pub const VIRTIO_NET_RSS_HASH_TYPE_IP_EX: u32 = 64;
89 pub const VIRTIO_NET_RSS_HASH_TYPE_TCP_EX: u32 = 128;
90 pub const VIRTIO_NET_RSS_HASH_TYPE_UDP_EX: u32 = 256;
91 pub const VIRTIO_NET_HDR_F_NEEDS_CSUM: u32 = 1;
92 pub const VIRTIO_NET_HDR_F_DATA_VALID: u32 = 2;
93 pub const VIRTIO_NET_HDR_F_RSC_INFO: u32 = 4;
94 pub const VIRTIO_NET_HDR_GSO_NONE: u32 = 0;
95 pub const VIRTIO_NET_HDR_GSO_TCPV4: u32 = 1;
96 pub const VIRTIO_NET_HDR_GSO_UDP: u32 = 3;
97 pub const VIRTIO_NET_HDR_GSO_TCPV6: u32 = 4;
98 pub const VIRTIO_NET_HDR_GSO_UDP_L4: u32 = 5;
99 pub const VIRTIO_NET_HDR_GSO_ECN: u32 = 128;
100 pub const VIRTIO_NET_HASH_REPORT_NONE: u32 = 0;
101 pub const VIRTIO_NET_HASH_REPORT_IPv4: u32 = 1;
102 pub const VIRTIO_NET_HASH_REPORT_TCPv4: u32 = 2;
103 pub const VIRTIO_NET_HASH_REPORT_UDPv4: u32 = 3;
104 pub const VIRTIO_NET_HASH_REPORT_IPv6: u32 = 4;
105 pub const VIRTIO_NET_HASH_REPORT_TCPv6: u32 = 5;
106 pub const VIRTIO_NET_HASH_REPORT_UDPv6: u32 = 6;
107 pub const VIRTIO_NET_HASH_REPORT_IPv6_EX: u32 = 7;
108 pub const VIRTIO_NET_HASH_REPORT_TCPv6_EX: u32 = 8;
109 pub const VIRTIO_NET_HASH_REPORT_UDPv6_EX: u32 = 9;
110 pub const VIRTIO_NET_OK: u32 = 0;
111 pub const VIRTIO_NET_ERR: u32 = 1;
112 pub const VIRTIO_NET_CTRL_RX: u32 = 0;
113 pub const VIRTIO_NET_CTRL_RX_PROMISC: u32 = 0;
114 pub const VIRTIO_NET_CTRL_RX_ALLMULTI: u32 = 1;
115 pub const VIRTIO_NET_CTRL_RX_ALLUNI: u32 = 2;
116 pub const VIRTIO_NET_CTRL_RX_NOMULTI: u32 = 3;
117 pub const VIRTIO_NET_CTRL_RX_NOUNI: u32 = 4;
118 pub const VIRTIO_NET_CTRL_RX_NOBCAST: u32 = 5;
119 pub const VIRTIO_NET_CTRL_MAC: u32 = 1;
120 pub const VIRTIO_NET_CTRL_MAC_TABLE_SET: u32 = 0;
121 pub const VIRTIO_NET_CTRL_MAC_ADDR_SET: u32 = 1;
122 pub const VIRTIO_NET_CTRL_VLAN: u32 = 2;
123 pub const VIRTIO_NET_CTRL_VLAN_ADD: u32 = 0;
124 pub const VIRTIO_NET_CTRL_VLAN_DEL: u32 = 1;
125 pub const VIRTIO_NET_CTRL_ANNOUNCE: u32 = 3;
126 pub const VIRTIO_NET_CTRL_ANNOUNCE_ACK: u32 = 0;
127 pub const VIRTIO_NET_CTRL_MQ: u32 = 4;
128 pub const VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET: u32 = 0;
129 pub const VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN: u32 = 1;
130 pub const VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX: u32 = 32768;
131 pub const VIRTIO_NET_CTRL_MQ_RSS_CONFIG: u32 = 1;
132 pub const VIRTIO_NET_CTRL_MQ_HASH_CONFIG: u32 = 2;
133 pub const VIRTIO_NET_CTRL_GUEST_OFFLOADS: u32 = 5;
134 pub const VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET: u32 = 0;
135 pub const VIRTIO_NET_CTRL_NOTF_COAL: u32 = 6;
136 pub const VIRTIO_NET_CTRL_NOTF_COAL_TX_SET: u32 = 0;
137 pub const VIRTIO_NET_CTRL_NOTF_COAL_RX_SET: u32 = 1;
138 pub const VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET: u32 = 2;
139 pub const VIRTIO_NET_CTRL_NOTF_COAL_VQ_GET: u32 = 3;
140 pub type __le16 = u16;
141 pub type __le32 = u32;
142 pub type __virtio16 = u16;
143 pub type __virtio32 = u32;
144 #[repr(C, packed)]
145 #[derive(Debug, Default, Copy, Clone)]
146 pub struct virtio_net_config {
147     pub mac: [u8; 6usize],
148     pub status: __virtio16,
149     pub max_virtqueue_pairs: __virtio16,
150     pub mtu: __virtio16,
151     pub speed: __le32,
152     pub duplex: u8,
153     pub rss_max_key_size: u8,
154     pub rss_max_indirection_table_length: __le16,
155     pub supported_hash_types: __le32,
156 }
157 #[repr(C)]
158 #[derive(Copy, Clone)]
159 pub struct virtio_net_hdr_v1 {
160     pub flags: u8,
161     pub gso_type: u8,
162     pub hdr_len: __virtio16,
163     pub gso_size: __virtio16,
164     pub __bindgen_anon_1: virtio_net_hdr_v1__bindgen_ty_1,
165     pub num_buffers: __virtio16,
166 }
167 #[repr(C)]
168 #[derive(Copy, Clone)]
169 pub union virtio_net_hdr_v1__bindgen_ty_1 {
170     pub __bindgen_anon_1: virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_1,
171     pub csum: virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_2,
172     pub rsc: virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_3,
173 }
174 #[repr(C)]
175 #[derive(Debug, Default, Copy, Clone)]
176 pub struct virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_1 {
177     pub csum_start: __virtio16,
178     pub csum_offset: __virtio16,
179 }
180 #[repr(C)]
181 #[derive(Debug, Default, Copy, Clone)]
182 pub struct virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_2 {
183     pub start: __virtio16,
184     pub offset: __virtio16,
185 }
186 #[repr(C)]
187 #[derive(Debug, Default, Copy, Clone)]
188 pub struct virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_3 {
189     pub segments: __le16,
190     pub dup_acks: __le16,
191 }
192 impl Default for virtio_net_hdr_v1__bindgen_ty_1 {
default() -> Self193     fn default() -> Self {
194         let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
195         unsafe {
196             ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
197             s.assume_init()
198         }
199     }
200 }
201 impl Default for virtio_net_hdr_v1 {
default() -> Self202     fn default() -> Self {
203         let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
204         unsafe {
205             ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
206             s.assume_init()
207         }
208     }
209 }
210 #[repr(C)]
211 #[derive(Copy, Clone)]
212 pub struct virtio_net_hdr_v1_hash {
213     pub hdr: virtio_net_hdr_v1,
214     pub hash_value: __le32,
215     pub hash_report: __le16,
216     pub padding: __le16,
217 }
218 impl Default for virtio_net_hdr_v1_hash {
default() -> Self219     fn default() -> Self {
220         let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
221         unsafe {
222             ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
223             s.assume_init()
224         }
225     }
226 }
227 #[repr(C)]
228 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)]
229 pub struct virtio_net_hdr {
230     pub flags: u8,
231     pub gso_type: u8,
232     pub hdr_len: __virtio16,
233     pub gso_size: __virtio16,
234     pub csum_start: __virtio16,
235     pub csum_offset: __virtio16,
236 }
237 #[repr(C)]
238 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)]
239 pub struct virtio_net_hdr_mrg_rxbuf {
240     pub hdr: virtio_net_hdr,
241     pub num_buffers: __virtio16,
242 }
243 #[repr(C, packed)]
244 #[derive(Debug, Default, Copy, Clone)]
245 pub struct virtio_net_ctrl_hdr {
246     pub class: u8,
247     pub cmd: u8,
248 }
249 pub type virtio_net_ctrl_ack = u8;
250 #[repr(C)]
251 #[derive(Debug, Default, Copy, Clone)]
252 pub struct virtio_net_ctrl_mq {
253     pub virtqueue_pairs: __virtio16,
254 }
255 #[repr(C)]
256 #[derive(Debug, Default)]
257 pub struct virtio_net_rss_config {
258     pub hash_types: __le32,
259     pub indirection_table_mask: __le16,
260     pub unclassified_queue: __le16,
261     pub indirection_table: [__le16; 1usize],
262     pub max_tx_vq: __le16,
263     pub hash_key_length: u8,
264     pub hash_key_data: __IncompleteArrayField<u8>,
265 }
266 #[repr(C)]
267 #[derive(Debug, Default)]
268 pub struct virtio_net_hash_config {
269     pub hash_types: __le32,
270     pub reserved: [__le16; 4usize],
271     pub hash_key_length: u8,
272     pub hash_key_data: __IncompleteArrayField<u8>,
273 }
274 #[repr(C)]
275 #[derive(Debug, Default, Copy, Clone)]
276 pub struct virtio_net_ctrl_coal_tx {
277     pub tx_max_packets: __le32,
278     pub tx_usecs: __le32,
279 }
280 #[repr(C)]
281 #[derive(Debug, Default, Copy, Clone)]
282 pub struct virtio_net_ctrl_coal_rx {
283     pub rx_max_packets: __le32,
284     pub rx_usecs: __le32,
285 }
286 #[repr(C)]
287 #[derive(Debug, Default, Copy, Clone)]
288 pub struct virtio_net_ctrl_coal {
289     pub max_packets: __le32,
290     pub max_usecs: __le32,
291 }
292 #[repr(C)]
293 #[derive(Debug, Default, Copy, Clone)]
294 pub struct virtio_net_ctrl_coal_vq {
295     pub vqn: __le16,
296     pub reserved: __le16,
297     pub coal: virtio_net_ctrl_coal,
298 }
299