summary refs log tree commit diff
path: root/virtio_sys/src/virtio_net.rs
blob: a8ff84a3dd094014dda2cef8d08c0b42cb81383f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
/* automatically generated by rust-bindgen */

#[repr(C)]
#[derive(Default)]
pub struct __IncompleteArrayField<T>(::std::marker::PhantomData<T>);
impl <T> __IncompleteArrayField<T> {
    #[inline]
    pub fn new() -> Self {
        __IncompleteArrayField(::std::marker::PhantomData)
    }
    #[inline]
    pub unsafe fn as_ptr(&self) -> *const T { ::std::mem::transmute(self) }
    #[inline]
    pub unsafe fn as_mut_ptr(&mut self) -> *mut T {
        ::std::mem::transmute(self)
    }
    #[inline]
    pub unsafe fn as_slice(&self, len: usize) -> &[T] {
        ::std::slice::from_raw_parts(self.as_ptr(), len)
    }
    #[inline]
    pub unsafe fn as_mut_slice(&mut self, len: usize) -> &mut [T] {
        ::std::slice::from_raw_parts_mut(self.as_mut_ptr(), len)
    }
}
impl <T> ::std::fmt::Debug for __IncompleteArrayField<T> {
    fn fmt(&self, fmt: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        fmt.write_str("__IncompleteArrayField")
    }
}
impl <T> ::std::clone::Clone for __IncompleteArrayField<T> {
    #[inline]
    fn clone(&self) -> Self { Self::new() }
}
impl <T> ::std::marker::Copy for __IncompleteArrayField<T> { }
pub const __BITS_PER_LONG: ::std::os::raw::c_uint = 64;
pub const __FD_SETSIZE: ::std::os::raw::c_uint = 1024;
pub const VIRTIO_ID_NET: ::std::os::raw::c_uint = 1;
pub const VIRTIO_ID_BLOCK: ::std::os::raw::c_uint = 2;
pub const VIRTIO_ID_CONSOLE: ::std::os::raw::c_uint = 3;
pub const VIRTIO_ID_RNG: ::std::os::raw::c_uint = 4;
pub const VIRTIO_ID_BALLOON: ::std::os::raw::c_uint = 5;
pub const VIRTIO_ID_RPMSG: ::std::os::raw::c_uint = 7;
pub const VIRTIO_ID_SCSI: ::std::os::raw::c_uint = 8;
pub const VIRTIO_ID_9P: ::std::os::raw::c_uint = 9;
pub const VIRTIO_ID_RPROC_SERIAL: ::std::os::raw::c_uint = 11;
pub const VIRTIO_ID_CAIF: ::std::os::raw::c_uint = 12;
pub const VIRTIO_ID_GPU: ::std::os::raw::c_uint = 16;
pub const VIRTIO_ID_INPUT: ::std::os::raw::c_uint = 18;
pub const VIRTIO_CONFIG_S_ACKNOWLEDGE: ::std::os::raw::c_uint = 1;
pub const VIRTIO_CONFIG_S_DRIVER: ::std::os::raw::c_uint = 2;
pub const VIRTIO_CONFIG_S_DRIVER_OK: ::std::os::raw::c_uint = 4;
pub const VIRTIO_CONFIG_S_FEATURES_OK: ::std::os::raw::c_uint = 8;
pub const VIRTIO_CONFIG_S_FAILED: ::std::os::raw::c_uint = 128;
pub const VIRTIO_TRANSPORT_F_START: ::std::os::raw::c_uint = 28;
pub const VIRTIO_TRANSPORT_F_END: ::std::os::raw::c_uint = 33;
pub const VIRTIO_F_NOTIFY_ON_EMPTY: ::std::os::raw::c_uint = 24;
pub const VIRTIO_F_ANY_LAYOUT: ::std::os::raw::c_uint = 27;
pub const VIRTIO_F_VERSION_1: ::std::os::raw::c_uint = 32;
pub const ETH_ALEN: ::std::os::raw::c_uint = 6;
pub const ETH_HLEN: ::std::os::raw::c_uint = 14;
pub const ETH_ZLEN: ::std::os::raw::c_uint = 60;
pub const ETH_DATA_LEN: ::std::os::raw::c_uint = 1500;
pub const ETH_FRAME_LEN: ::std::os::raw::c_uint = 1514;
pub const ETH_FCS_LEN: ::std::os::raw::c_uint = 4;
pub const ETH_P_LOOP: ::std::os::raw::c_uint = 96;
pub const ETH_P_PUP: ::std::os::raw::c_uint = 512;
pub const ETH_P_PUPAT: ::std::os::raw::c_uint = 513;
pub const ETH_P_TSN: ::std::os::raw::c_uint = 8944;
pub const ETH_P_IP: ::std::os::raw::c_uint = 2048;
pub const ETH_P_X25: ::std::os::raw::c_uint = 2053;
pub const ETH_P_ARP: ::std::os::raw::c_uint = 2054;
pub const ETH_P_BPQ: ::std::os::raw::c_uint = 2303;
pub const ETH_P_IEEEPUP: ::std::os::raw::c_uint = 2560;
pub const ETH_P_IEEEPUPAT: ::std::os::raw::c_uint = 2561;
pub const ETH_P_BATMAN: ::std::os::raw::c_uint = 17157;
pub const ETH_P_DEC: ::std::os::raw::c_uint = 24576;
pub const ETH_P_DNA_DL: ::std::os::raw::c_uint = 24577;
pub const ETH_P_DNA_RC: ::std::os::raw::c_uint = 24578;
pub const ETH_P_DNA_RT: ::std::os::raw::c_uint = 24579;
pub const ETH_P_LAT: ::std::os::raw::c_uint = 24580;
pub const ETH_P_DIAG: ::std::os::raw::c_uint = 24581;
pub const ETH_P_CUST: ::std::os::raw::c_uint = 24582;
pub const ETH_P_SCA: ::std::os::raw::c_uint = 24583;
pub const ETH_P_TEB: ::std::os::raw::c_uint = 25944;
pub const ETH_P_RARP: ::std::os::raw::c_uint = 32821;
pub const ETH_P_ATALK: ::std::os::raw::c_uint = 32923;
pub const ETH_P_AARP: ::std::os::raw::c_uint = 33011;
pub const ETH_P_8021Q: ::std::os::raw::c_uint = 33024;
pub const ETH_P_IPX: ::std::os::raw::c_uint = 33079;
pub const ETH_P_IPV6: ::std::os::raw::c_uint = 34525;
pub const ETH_P_PAUSE: ::std::os::raw::c_uint = 34824;
pub const ETH_P_SLOW: ::std::os::raw::c_uint = 34825;
pub const ETH_P_WCCP: ::std::os::raw::c_uint = 34878;
pub const ETH_P_MPLS_UC: ::std::os::raw::c_uint = 34887;
pub const ETH_P_MPLS_MC: ::std::os::raw::c_uint = 34888;
pub const ETH_P_ATMMPOA: ::std::os::raw::c_uint = 34892;
pub const ETH_P_PPP_DISC: ::std::os::raw::c_uint = 34915;
pub const ETH_P_PPP_SES: ::std::os::raw::c_uint = 34916;
pub const ETH_P_LINK_CTL: ::std::os::raw::c_uint = 34924;
pub const ETH_P_ATMFATE: ::std::os::raw::c_uint = 34948;
pub const ETH_P_PAE: ::std::os::raw::c_uint = 34958;
pub const ETH_P_AOE: ::std::os::raw::c_uint = 34978;
pub const ETH_P_8021AD: ::std::os::raw::c_uint = 34984;
pub const ETH_P_802_EX1: ::std::os::raw::c_uint = 34997;
pub const ETH_P_TIPC: ::std::os::raw::c_uint = 35018;
pub const ETH_P_8021AH: ::std::os::raw::c_uint = 35047;
pub const ETH_P_MVRP: ::std::os::raw::c_uint = 35061;
pub const ETH_P_1588: ::std::os::raw::c_uint = 35063;
pub const ETH_P_PRP: ::std::os::raw::c_uint = 35067;
pub const ETH_P_FCOE: ::std::os::raw::c_uint = 35078;
pub const ETH_P_TDLS: ::std::os::raw::c_uint = 35085;
pub const ETH_P_FIP: ::std::os::raw::c_uint = 35092;
pub const ETH_P_80221: ::std::os::raw::c_uint = 35095;
pub const ETH_P_LOOPBACK: ::std::os::raw::c_uint = 36864;
pub const ETH_P_QINQ1: ::std::os::raw::c_uint = 37120;
pub const ETH_P_QINQ2: ::std::os::raw::c_uint = 37376;
pub const ETH_P_QINQ3: ::std::os::raw::c_uint = 37632;
pub const ETH_P_EDSA: ::std::os::raw::c_uint = 56026;
pub const ETH_P_AF_IUCV: ::std::os::raw::c_uint = 64507;
pub const ETH_P_802_3_MIN: ::std::os::raw::c_uint = 1536;
pub const ETH_P_802_3: ::std::os::raw::c_uint = 1;
pub const ETH_P_AX25: ::std::os::raw::c_uint = 2;
pub const ETH_P_ALL: ::std::os::raw::c_uint = 3;
pub const ETH_P_802_2: ::std::os::raw::c_uint = 4;
pub const ETH_P_SNAP: ::std::os::raw::c_uint = 5;
pub const ETH_P_DDCMP: ::std::os::raw::c_uint = 6;
pub const ETH_P_WAN_PPP: ::std::os::raw::c_uint = 7;
pub const ETH_P_PPP_MP: ::std::os::raw::c_uint = 8;
pub const ETH_P_LOCALTALK: ::std::os::raw::c_uint = 9;
pub const ETH_P_CAN: ::std::os::raw::c_uint = 12;
pub const ETH_P_CANFD: ::std::os::raw::c_uint = 13;
pub const ETH_P_PPPTALK: ::std::os::raw::c_uint = 16;
pub const ETH_P_TR_802_2: ::std::os::raw::c_uint = 17;
pub const ETH_P_MOBITEX: ::std::os::raw::c_uint = 21;
pub const ETH_P_CONTROL: ::std::os::raw::c_uint = 22;
pub const ETH_P_IRDA: ::std::os::raw::c_uint = 23;
pub const ETH_P_ECONET: ::std::os::raw::c_uint = 24;
pub const ETH_P_HDLC: ::std::os::raw::c_uint = 25;
pub const ETH_P_ARCNET: ::std::os::raw::c_uint = 26;
pub const ETH_P_DSA: ::std::os::raw::c_uint = 27;
pub const ETH_P_TRAILER: ::std::os::raw::c_uint = 28;
pub const ETH_P_PHONET: ::std::os::raw::c_uint = 245;
pub const ETH_P_IEEE802154: ::std::os::raw::c_uint = 246;
pub const ETH_P_CAIF: ::std::os::raw::c_uint = 247;
pub const ETH_P_XDSA: ::std::os::raw::c_uint = 248;
pub const VIRTIO_NET_F_CSUM: ::std::os::raw::c_uint = 0;
pub const VIRTIO_NET_F_GUEST_CSUM: ::std::os::raw::c_uint = 1;
pub const VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: ::std::os::raw::c_uint = 2;
pub const VIRTIO_NET_F_MTU: ::std::os::raw::c_uint = 3;
pub const VIRTIO_NET_F_MAC: ::std::os::raw::c_uint = 5;
pub const VIRTIO_NET_F_GUEST_TSO4: ::std::os::raw::c_uint = 7;
pub const VIRTIO_NET_F_GUEST_TSO6: ::std::os::raw::c_uint = 8;
pub const VIRTIO_NET_F_GUEST_ECN: ::std::os::raw::c_uint = 9;
pub const VIRTIO_NET_F_GUEST_UFO: ::std::os::raw::c_uint = 10;
pub const VIRTIO_NET_F_HOST_TSO4: ::std::os::raw::c_uint = 11;
pub const VIRTIO_NET_F_HOST_TSO6: ::std::os::raw::c_uint = 12;
pub const VIRTIO_NET_F_HOST_ECN: ::std::os::raw::c_uint = 13;
pub const VIRTIO_NET_F_HOST_UFO: ::std::os::raw::c_uint = 14;
pub const VIRTIO_NET_F_MRG_RXBUF: ::std::os::raw::c_uint = 15;
pub const VIRTIO_NET_F_STATUS: ::std::os::raw::c_uint = 16;
pub const VIRTIO_NET_F_CTRL_VQ: ::std::os::raw::c_uint = 17;
pub const VIRTIO_NET_F_CTRL_RX: ::std::os::raw::c_uint = 18;
pub const VIRTIO_NET_F_CTRL_VLAN: ::std::os::raw::c_uint = 19;
pub const VIRTIO_NET_F_CTRL_RX_EXTRA: ::std::os::raw::c_uint = 20;
pub const VIRTIO_NET_F_GUEST_ANNOUNCE: ::std::os::raw::c_uint = 21;
pub const VIRTIO_NET_F_MQ: ::std::os::raw::c_uint = 22;
pub const VIRTIO_NET_F_CTRL_MAC_ADDR: ::std::os::raw::c_uint = 23;
pub const VIRTIO_NET_F_GSO: ::std::os::raw::c_uint = 6;
pub const VIRTIO_NET_S_LINK_UP: ::std::os::raw::c_uint = 1;
pub const VIRTIO_NET_S_ANNOUNCE: ::std::os::raw::c_uint = 2;
pub const VIRTIO_NET_HDR_F_NEEDS_CSUM: ::std::os::raw::c_uint = 1;
pub const VIRTIO_NET_HDR_F_DATA_VALID: ::std::os::raw::c_uint = 2;
pub const VIRTIO_NET_HDR_GSO_NONE: ::std::os::raw::c_uint = 0;
pub const VIRTIO_NET_HDR_GSO_TCPV4: ::std::os::raw::c_uint = 1;
pub const VIRTIO_NET_HDR_GSO_UDP: ::std::os::raw::c_uint = 3;
pub const VIRTIO_NET_HDR_GSO_TCPV6: ::std::os::raw::c_uint = 4;
pub const VIRTIO_NET_HDR_GSO_ECN: ::std::os::raw::c_uint = 128;
pub const VIRTIO_NET_OK: ::std::os::raw::c_uint = 0;
pub const VIRTIO_NET_ERR: ::std::os::raw::c_uint = 1;
pub const VIRTIO_NET_CTRL_RX: ::std::os::raw::c_uint = 0;
pub const VIRTIO_NET_CTRL_RX_PROMISC: ::std::os::raw::c_uint = 0;
pub const VIRTIO_NET_CTRL_RX_ALLMULTI: ::std::os::raw::c_uint = 1;
pub const VIRTIO_NET_CTRL_RX_ALLUNI: ::std::os::raw::c_uint = 2;
pub const VIRTIO_NET_CTRL_RX_NOMULTI: ::std::os::raw::c_uint = 3;
pub const VIRTIO_NET_CTRL_RX_NOUNI: ::std::os::raw::c_uint = 4;
pub const VIRTIO_NET_CTRL_RX_NOBCAST: ::std::os::raw::c_uint = 5;
pub const VIRTIO_NET_CTRL_MAC: ::std::os::raw::c_uint = 1;
pub const VIRTIO_NET_CTRL_MAC_TABLE_SET: ::std::os::raw::c_uint = 0;
pub const VIRTIO_NET_CTRL_MAC_ADDR_SET: ::std::os::raw::c_uint = 1;
pub const VIRTIO_NET_CTRL_VLAN: ::std::os::raw::c_uint = 2;
pub const VIRTIO_NET_CTRL_VLAN_ADD: ::std::os::raw::c_uint = 0;
pub const VIRTIO_NET_CTRL_VLAN_DEL: ::std::os::raw::c_uint = 1;
pub const VIRTIO_NET_CTRL_ANNOUNCE: ::std::os::raw::c_uint = 3;
pub const VIRTIO_NET_CTRL_ANNOUNCE_ACK: ::std::os::raw::c_uint = 0;
pub const VIRTIO_NET_CTRL_MQ: ::std::os::raw::c_uint = 4;
pub const VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET: ::std::os::raw::c_uint = 0;
pub const VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN: ::std::os::raw::c_uint = 1;
pub const VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX: ::std::os::raw::c_uint = 32768;
pub const VIRTIO_NET_CTRL_GUEST_OFFLOADS: ::std::os::raw::c_uint = 5;
pub const VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET: ::std::os::raw::c_uint = 0;
pub type __s8 = ::std::os::raw::c_schar;
pub type __u8 = ::std::os::raw::c_uchar;
pub type __s16 = ::std::os::raw::c_short;
pub type __u16 = ::std::os::raw::c_ushort;
pub type __s32 = ::std::os::raw::c_int;
pub type __u32 = ::std::os::raw::c_uint;
pub type __s64 = ::std::os::raw::c_longlong;
pub type __u64 = ::std::os::raw::c_ulonglong;
#[repr(C)]
#[derive(Debug, Copy)]
pub struct __kernel_fd_set {
    pub fds_bits: [::std::os::raw::c_ulong; 16usize],
}
#[test]
fn bindgen_test_layout___kernel_fd_set() {
    assert_eq!(::std::mem::size_of::<__kernel_fd_set>() , 128usize , concat !
               ( "Size of: " , stringify ! ( __kernel_fd_set ) ));
    assert_eq! (::std::mem::align_of::<__kernel_fd_set>() , 8usize , concat !
                ( "Alignment of " , stringify ! ( __kernel_fd_set ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const __kernel_fd_set ) ) . fds_bits as * const
                _ as usize } , 0usize , concat ! (
                "Alignment of field: " , stringify ! ( __kernel_fd_set ) ,
                "::" , stringify ! ( fds_bits ) ));
}
impl Clone for __kernel_fd_set {
    fn clone(&self) -> Self { *self }
}
pub type __kernel_sighandler_t =
    ::std::option::Option<unsafe extern "C" fn(arg1: ::std::os::raw::c_int)>;
pub type __kernel_key_t = ::std::os::raw::c_int;
pub type __kernel_mqd_t = ::std::os::raw::c_int;
pub type __kernel_old_uid_t = ::std::os::raw::c_ushort;
pub type __kernel_old_gid_t = ::std::os::raw::c_ushort;
pub type __kernel_old_dev_t = ::std::os::raw::c_ulong;
pub type __kernel_long_t = ::std::os::raw::c_long;
pub type __kernel_ulong_t = ::std::os::raw::c_ulong;
pub type __kernel_ino_t = __kernel_ulong_t;
pub type __kernel_mode_t = ::std::os::raw::c_uint;
pub type __kernel_pid_t = ::std::os::raw::c_int;
pub type __kernel_ipc_pid_t = ::std::os::raw::c_int;
pub type __kernel_uid_t = ::std::os::raw::c_uint;
pub type __kernel_gid_t = ::std::os::raw::c_uint;
pub type __kernel_suseconds_t = __kernel_long_t;
pub type __kernel_daddr_t = ::std::os::raw::c_int;
pub type __kernel_uid32_t = ::std::os::raw::c_uint;
pub type __kernel_gid32_t = ::std::os::raw::c_uint;
pub type __kernel_size_t = __kernel_ulong_t;
pub type __kernel_ssize_t = __kernel_long_t;
pub type __kernel_ptrdiff_t = __kernel_long_t;
#[repr(C)]
#[derive(Debug, Copy)]
pub struct __kernel_fsid_t {
    pub val: [::std::os::raw::c_int; 2usize],
}
#[test]
fn bindgen_test_layout___kernel_fsid_t() {
    assert_eq!(::std::mem::size_of::<__kernel_fsid_t>() , 8usize , concat ! (
               "Size of: " , stringify ! ( __kernel_fsid_t ) ));
    assert_eq! (::std::mem::align_of::<__kernel_fsid_t>() , 4usize , concat !
                ( "Alignment of " , stringify ! ( __kernel_fsid_t ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const __kernel_fsid_t ) ) . val as * const _ as
                usize } , 0usize , concat ! (
                "Alignment of field: " , stringify ! ( __kernel_fsid_t ) ,
                "::" , stringify ! ( val ) ));
}
impl Clone for __kernel_fsid_t {
    fn clone(&self) -> Self { *self }
}
pub type __kernel_off_t = __kernel_long_t;
pub type __kernel_loff_t = ::std::os::raw::c_longlong;
pub type __kernel_time_t = __kernel_long_t;
pub type __kernel_clock_t = __kernel_long_t;
pub type __kernel_timer_t = ::std::os::raw::c_int;
pub type __kernel_clockid_t = ::std::os::raw::c_int;
pub type __kernel_caddr_t = *mut ::std::os::raw::c_char;
pub type __kernel_uid16_t = ::std::os::raw::c_ushort;
pub type __kernel_gid16_t = ::std::os::raw::c_ushort;
pub type __le16 = __u16;
pub type __be16 = __u16;
pub type __le32 = __u32;
pub type __be32 = __u32;
pub type __le64 = __u64;
pub type __be64 = __u64;
pub type __sum16 = __u16;
pub type __wsum = __u32;
pub type __virtio16 = __u16;
pub type __virtio32 = __u32;
pub type __virtio64 = __u64;
#[repr(C, packed)]
#[derive(Debug, Copy)]
pub struct ethhdr {
    pub h_dest: [::std::os::raw::c_uchar; 6usize],
    pub h_source: [::std::os::raw::c_uchar; 6usize],
    pub h_proto: __be16,
}
#[test]
fn bindgen_test_layout_ethhdr() {
    assert_eq!(::std::mem::size_of::<ethhdr>() , 14usize , concat ! (
               "Size of: " , stringify ! ( ethhdr ) ));
    assert_eq! (::std::mem::align_of::<ethhdr>() , 1usize , concat ! (
                "Alignment of " , stringify ! ( ethhdr ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const ethhdr ) ) . h_dest as * const _ as usize
                } , 0usize , concat ! (
                "Alignment of field: " , stringify ! ( ethhdr ) , "::" ,
                stringify ! ( h_dest ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const ethhdr ) ) . h_source as * const _ as
                usize } , 6usize , concat ! (
                "Alignment of field: " , stringify ! ( ethhdr ) , "::" ,
                stringify ! ( h_source ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const ethhdr ) ) . h_proto as * const _ as
                usize } , 12usize , concat ! (
                "Alignment of field: " , stringify ! ( ethhdr ) , "::" ,
                stringify ! ( h_proto ) ));
}
impl Clone for ethhdr {
    fn clone(&self) -> Self { *self }
}
#[repr(C, packed)]
#[derive(Debug, Copy)]
pub struct virtio_net_config {
    pub mac: [__u8; 6usize],
    pub status: __u16,
    pub max_virtqueue_pairs: __u16,
    pub mtu: __u16,
}
#[test]
fn bindgen_test_layout_virtio_net_config() {
    assert_eq!(::std::mem::size_of::<virtio_net_config>() , 12usize , concat !
               ( "Size of: " , stringify ! ( virtio_net_config ) ));
    assert_eq! (::std::mem::align_of::<virtio_net_config>() , 1usize , concat
                ! ( "Alignment of " , stringify ! ( virtio_net_config ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_config ) ) . mac as * const _
                as usize } , 0usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_config ) ,
                "::" , stringify ! ( mac ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_config ) ) . status as * const
                _ as usize } , 6usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_config ) ,
                "::" , stringify ! ( status ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_config ) ) .
                max_virtqueue_pairs as * const _ as usize } , 8usize , concat
                ! (
                "Alignment of field: " , stringify ! ( virtio_net_config ) ,
                "::" , stringify ! ( max_virtqueue_pairs ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_config ) ) . mtu as * const _
                as usize } , 10usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_config ) ,
                "::" , stringify ! ( mtu ) ));
}
impl Clone for virtio_net_config {
    fn clone(&self) -> Self { *self }
}
#[repr(C)]
#[derive(Debug, Copy)]
pub struct virtio_net_hdr_v1 {
    pub flags: __u8,
    pub gso_type: __u8,
    pub hdr_len: __virtio16,
    pub gso_size: __virtio16,
    pub csum_start: __virtio16,
    pub csum_offset: __virtio16,
    pub num_buffers: __virtio16,
}
#[test]
fn bindgen_test_layout_virtio_net_hdr_v1() {
    assert_eq!(::std::mem::size_of::<virtio_net_hdr_v1>() , 12usize , concat !
               ( "Size of: " , stringify ! ( virtio_net_hdr_v1 ) ));
    assert_eq! (::std::mem::align_of::<virtio_net_hdr_v1>() , 2usize , concat
                ! ( "Alignment of " , stringify ! ( virtio_net_hdr_v1 ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_hdr_v1 ) ) . flags as * const
                _ as usize } , 0usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_hdr_v1 ) ,
                "::" , stringify ! ( flags ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_hdr_v1 ) ) . gso_type as *
                const _ as usize } , 1usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_hdr_v1 ) ,
                "::" , stringify ! ( gso_type ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_hdr_v1 ) ) . hdr_len as *
                const _ as usize } , 2usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_hdr_v1 ) ,
                "::" , stringify ! ( hdr_len ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_hdr_v1 ) ) . gso_size as *
                const _ as usize } , 4usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_hdr_v1 ) ,
                "::" , stringify ! ( gso_size ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_hdr_v1 ) ) . csum_start as *
                const _ as usize } , 6usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_hdr_v1 ) ,
                "::" , stringify ! ( csum_start ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_hdr_v1 ) ) . csum_offset as *
                const _ as usize } , 8usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_hdr_v1 ) ,
                "::" , stringify ! ( csum_offset ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_hdr_v1 ) ) . num_buffers as *
                const _ as usize } , 10usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_hdr_v1 ) ,
                "::" , stringify ! ( num_buffers ) ));
}
impl Clone for virtio_net_hdr_v1 {
    fn clone(&self) -> Self { *self }
}
#[repr(C)]
#[derive(Debug, Copy)]
pub struct virtio_net_hdr {
    pub flags: __u8,
    pub gso_type: __u8,
    pub hdr_len: __virtio16,
    pub gso_size: __virtio16,
    pub csum_start: __virtio16,
    pub csum_offset: __virtio16,
}
#[test]
fn bindgen_test_layout_virtio_net_hdr() {
    assert_eq!(::std::mem::size_of::<virtio_net_hdr>() , 10usize , concat ! (
               "Size of: " , stringify ! ( virtio_net_hdr ) ));
    assert_eq! (::std::mem::align_of::<virtio_net_hdr>() , 2usize , concat ! (
                "Alignment of " , stringify ! ( virtio_net_hdr ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_hdr ) ) . flags as * const _
                as usize } , 0usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_hdr ) , "::"
                , stringify ! ( flags ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_hdr ) ) . gso_type as * const
                _ as usize } , 1usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_hdr ) , "::"
                , stringify ! ( gso_type ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_hdr ) ) . hdr_len as * const _
                as usize } , 2usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_hdr ) , "::"
                , stringify ! ( hdr_len ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_hdr ) ) . gso_size as * const
                _ as usize } , 4usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_hdr ) , "::"
                , stringify ! ( gso_size ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_hdr ) ) . csum_start as *
                const _ as usize } , 6usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_hdr ) , "::"
                , stringify ! ( csum_start ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_hdr ) ) . csum_offset as *
                const _ as usize } , 8usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_hdr ) , "::"
                , stringify ! ( csum_offset ) ));
}
impl Clone for virtio_net_hdr {
    fn clone(&self) -> Self { *self }
}
#[repr(C)]
#[derive(Debug, Copy)]
pub struct virtio_net_hdr_mrg_rxbuf {
    pub hdr: virtio_net_hdr,
    pub num_buffers: __virtio16,
}
#[test]
fn bindgen_test_layout_virtio_net_hdr_mrg_rxbuf() {
    assert_eq!(::std::mem::size_of::<virtio_net_hdr_mrg_rxbuf>() , 12usize ,
               concat ! (
               "Size of: " , stringify ! ( virtio_net_hdr_mrg_rxbuf ) ));
    assert_eq! (::std::mem::align_of::<virtio_net_hdr_mrg_rxbuf>() , 2usize ,
                concat ! (
                "Alignment of " , stringify ! ( virtio_net_hdr_mrg_rxbuf ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_hdr_mrg_rxbuf ) ) . hdr as *
                const _ as usize } , 0usize , concat ! (
                "Alignment of field: " , stringify ! (
                virtio_net_hdr_mrg_rxbuf ) , "::" , stringify ! ( hdr ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_hdr_mrg_rxbuf ) ) .
                num_buffers as * const _ as usize } , 10usize , concat ! (
                "Alignment of field: " , stringify ! (
                virtio_net_hdr_mrg_rxbuf ) , "::" , stringify ! ( num_buffers
                ) ));
}
impl Clone for virtio_net_hdr_mrg_rxbuf {
    fn clone(&self) -> Self { *self }
}
#[repr(C, packed)]
#[derive(Debug, Copy)]
pub struct virtio_net_ctrl_hdr {
    pub class: __u8,
    pub cmd: __u8,
}
#[test]
fn bindgen_test_layout_virtio_net_ctrl_hdr() {
    assert_eq!(::std::mem::size_of::<virtio_net_ctrl_hdr>() , 2usize , concat
               ! ( "Size of: " , stringify ! ( virtio_net_ctrl_hdr ) ));
    assert_eq! (::std::mem::align_of::<virtio_net_ctrl_hdr>() , 1usize ,
                concat ! (
                "Alignment of " , stringify ! ( virtio_net_ctrl_hdr ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_ctrl_hdr ) ) . class as *
                const _ as usize } , 0usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_ctrl_hdr ) ,
                "::" , stringify ! ( class ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_ctrl_hdr ) ) . cmd as * const
                _ as usize } , 1usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_ctrl_hdr ) ,
                "::" , stringify ! ( cmd ) ));
}
impl Clone for virtio_net_ctrl_hdr {
    fn clone(&self) -> Self { *self }
}
pub type virtio_net_ctrl_ack = __u8;
#[repr(C, packed)]
#[derive(Debug, Copy)]
pub struct virtio_net_ctrl_mac {
    pub entries: __virtio32,
    pub macs: __IncompleteArrayField<[__u8; 6usize]>,
}
#[test]
fn bindgen_test_layout_virtio_net_ctrl_mac() {
    assert_eq!(::std::mem::size_of::<virtio_net_ctrl_mac>() , 4usize , concat
               ! ( "Size of: " , stringify ! ( virtio_net_ctrl_mac ) ));
    assert_eq! (::std::mem::align_of::<virtio_net_ctrl_mac>() , 1usize ,
                concat ! (
                "Alignment of " , stringify ! ( virtio_net_ctrl_mac ) ));
}
impl Clone for virtio_net_ctrl_mac {
    fn clone(&self) -> Self { *self }
}
#[repr(C)]
#[derive(Debug, Copy)]
pub struct virtio_net_ctrl_mq {
    pub virtqueue_pairs: __virtio16,
}
#[test]
fn bindgen_test_layout_virtio_net_ctrl_mq() {
    assert_eq!(::std::mem::size_of::<virtio_net_ctrl_mq>() , 2usize , concat !
               ( "Size of: " , stringify ! ( virtio_net_ctrl_mq ) ));
    assert_eq! (::std::mem::align_of::<virtio_net_ctrl_mq>() , 2usize , concat
                ! ( "Alignment of " , stringify ! ( virtio_net_ctrl_mq ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const virtio_net_ctrl_mq ) ) . virtqueue_pairs
                as * const _ as usize } , 0usize , concat ! (
                "Alignment of field: " , stringify ! ( virtio_net_ctrl_mq ) ,
                "::" , stringify ! ( virtqueue_pairs ) ));
}
impl Clone for virtio_net_ctrl_mq {
    fn clone(&self) -> Self { *self }
}