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