summary refs log tree commit diff
path: root/net_sys
diff options
context:
space:
mode:
authorStephen Barber <smbarber@chromium.org>2017-06-15 23:20:16 -0700
committerchrome-bot <chrome-bot@chromium.org>2017-07-13 22:03:30 -0700
commit219b1856eb41c8c6a0dfefb4d8d257afe70886f9 (patch)
treec9a9f3cf5494ec2eb591041ea36c55b8a98529e2 /net_sys
parentc4968f7de9841c0013170534888fe4484d1a2d73 (diff)
downloadcrosvm-219b1856eb41c8c6a0dfefb4d8d257afe70886f9.tar
crosvm-219b1856eb41c8c6a0dfefb4d8d257afe70886f9.tar.gz
crosvm-219b1856eb41c8c6a0dfefb4d8d257afe70886f9.tar.bz2
crosvm-219b1856eb41c8c6a0dfefb4d8d257afe70886f9.tar.lz
crosvm-219b1856eb41c8c6a0dfefb4d8d257afe70886f9.tar.xz
crosvm-219b1856eb41c8c6a0dfefb4d8d257afe70886f9.tar.zst
crosvm-219b1856eb41c8c6a0dfefb4d8d257afe70886f9.zip
net_sys: add crate for tap interface ioctl bindings
Signed-off-by: Stephen Barber <smbarber@chromium.org>

BUG=chromium:738639
TEST=cargo test

Change-Id: Ic289419de96a2ba0791e8ce8b96d79745886cbfd
Reviewed-on: https://chromium-review.googlesource.com/538102
Commit-Ready: Stephen Barber <smbarber@chromium.org>
Tested-by: Stephen Barber <smbarber@chromium.org>
Reviewed-by: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'net_sys')
-rw-r--r--net_sys/Cargo.toml7
-rw-r--r--net_sys/src/if_tun.rs453
-rw-r--r--net_sys/src/iff.rs2217
-rw-r--r--net_sys/src/inn.rs565
-rw-r--r--net_sys/src/lib.rs60
-rw-r--r--net_sys/src/sockios.rs85
6 files changed, 3387 insertions, 0 deletions
diff --git a/net_sys/Cargo.toml b/net_sys/Cargo.toml
new file mode 100644
index 0000000..d6125e2
--- /dev/null
+++ b/net_sys/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "net_sys"
+version = "0.1.0"
+authors = ["The Chromium OS Authors"]
+
+[dependencies]
+sys_util = { path = "../sys_util" }
diff --git a/net_sys/src/if_tun.rs b/net_sys/src/if_tun.rs
new file mode 100644
index 0000000..857eaa7
--- /dev/null
+++ b/net_sys/src/if_tun.rs
@@ -0,0 +1,453 @@
+/* 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 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 BPF_LD: ::std::os::raw::c_uint = 0;
+pub const BPF_LDX: ::std::os::raw::c_uint = 1;
+pub const BPF_ST: ::std::os::raw::c_uint = 2;
+pub const BPF_STX: ::std::os::raw::c_uint = 3;
+pub const BPF_ALU: ::std::os::raw::c_uint = 4;
+pub const BPF_JMP: ::std::os::raw::c_uint = 5;
+pub const BPF_RET: ::std::os::raw::c_uint = 6;
+pub const BPF_MISC: ::std::os::raw::c_uint = 7;
+pub const BPF_W: ::std::os::raw::c_uint = 0;
+pub const BPF_H: ::std::os::raw::c_uint = 8;
+pub const BPF_B: ::std::os::raw::c_uint = 16;
+pub const BPF_IMM: ::std::os::raw::c_uint = 0;
+pub const BPF_ABS: ::std::os::raw::c_uint = 32;
+pub const BPF_IND: ::std::os::raw::c_uint = 64;
+pub const BPF_MEM: ::std::os::raw::c_uint = 96;
+pub const BPF_LEN: ::std::os::raw::c_uint = 128;
+pub const BPF_MSH: ::std::os::raw::c_uint = 160;
+pub const BPF_ADD: ::std::os::raw::c_uint = 0;
+pub const BPF_SUB: ::std::os::raw::c_uint = 16;
+pub const BPF_MUL: ::std::os::raw::c_uint = 32;
+pub const BPF_DIV: ::std::os::raw::c_uint = 48;
+pub const BPF_OR: ::std::os::raw::c_uint = 64;
+pub const BPF_AND: ::std::os::raw::c_uint = 80;
+pub const BPF_LSH: ::std::os::raw::c_uint = 96;
+pub const BPF_RSH: ::std::os::raw::c_uint = 112;
+pub const BPF_NEG: ::std::os::raw::c_uint = 128;
+pub const BPF_MOD: ::std::os::raw::c_uint = 144;
+pub const BPF_XOR: ::std::os::raw::c_uint = 160;
+pub const BPF_JA: ::std::os::raw::c_uint = 0;
+pub const BPF_JEQ: ::std::os::raw::c_uint = 16;
+pub const BPF_JGT: ::std::os::raw::c_uint = 32;
+pub const BPF_JGE: ::std::os::raw::c_uint = 48;
+pub const BPF_JSET: ::std::os::raw::c_uint = 64;
+pub const BPF_K: ::std::os::raw::c_uint = 0;
+pub const BPF_X: ::std::os::raw::c_uint = 8;
+pub const BPF_MAXINSNS: ::std::os::raw::c_uint = 4096;
+pub const BPF_MAJOR_VERSION: ::std::os::raw::c_uint = 1;
+pub const BPF_MINOR_VERSION: ::std::os::raw::c_uint = 1;
+pub const BPF_A: ::std::os::raw::c_uint = 16;
+pub const BPF_TAX: ::std::os::raw::c_uint = 0;
+pub const BPF_TXA: ::std::os::raw::c_uint = 128;
+pub const BPF_MEMWORDS: ::std::os::raw::c_uint = 16;
+pub const SKF_AD_OFF: ::std::os::raw::c_int = -4096;
+pub const SKF_AD_PROTOCOL: ::std::os::raw::c_uint = 0;
+pub const SKF_AD_PKTTYPE: ::std::os::raw::c_uint = 4;
+pub const SKF_AD_IFINDEX: ::std::os::raw::c_uint = 8;
+pub const SKF_AD_NLATTR: ::std::os::raw::c_uint = 12;
+pub const SKF_AD_NLATTR_NEST: ::std::os::raw::c_uint = 16;
+pub const SKF_AD_MARK: ::std::os::raw::c_uint = 20;
+pub const SKF_AD_QUEUE: ::std::os::raw::c_uint = 24;
+pub const SKF_AD_HATYPE: ::std::os::raw::c_uint = 28;
+pub const SKF_AD_RXHASH: ::std::os::raw::c_uint = 32;
+pub const SKF_AD_CPU: ::std::os::raw::c_uint = 36;
+pub const SKF_AD_ALU_XOR_X: ::std::os::raw::c_uint = 40;
+pub const SKF_AD_VLAN_TAG: ::std::os::raw::c_uint = 44;
+pub const SKF_AD_VLAN_TAG_PRESENT: ::std::os::raw::c_uint = 48;
+pub const SKF_AD_PAY_OFFSET: ::std::os::raw::c_uint = 52;
+pub const SKF_AD_RANDOM: ::std::os::raw::c_uint = 56;
+pub const SKF_AD_VLAN_TPID: ::std::os::raw::c_uint = 60;
+pub const SKF_AD_MAX: ::std::os::raw::c_uint = 64;
+pub const SKF_NET_OFF: ::std::os::raw::c_int = -1048576;
+pub const SKF_LL_OFF: ::std::os::raw::c_int = -2097152;
+pub const BPF_NET_OFF: ::std::os::raw::c_int = -1048576;
+pub const BPF_LL_OFF: ::std::os::raw::c_int = -2097152;
+pub const TUN_READQ_SIZE: ::std::os::raw::c_uint = 500;
+pub const TUN_TYPE_MASK: ::std::os::raw::c_uint = 15;
+pub const IFF_TUN: ::std::os::raw::c_uint = 1;
+pub const IFF_TAP: ::std::os::raw::c_uint = 2;
+pub const IFF_NO_PI: ::std::os::raw::c_uint = 4096;
+pub const IFF_ONE_QUEUE: ::std::os::raw::c_uint = 8192;
+pub const IFF_VNET_HDR: ::std::os::raw::c_uint = 16384;
+pub const IFF_TUN_EXCL: ::std::os::raw::c_uint = 32768;
+pub const IFF_MULTI_QUEUE: ::std::os::raw::c_uint = 256;
+pub const IFF_ATTACH_QUEUE: ::std::os::raw::c_uint = 512;
+pub const IFF_DETACH_QUEUE: ::std::os::raw::c_uint = 1024;
+pub const IFF_PERSIST: ::std::os::raw::c_uint = 2048;
+pub const IFF_NOFILTER: ::std::os::raw::c_uint = 4096;
+pub const TUN_TX_TIMESTAMP: ::std::os::raw::c_uint = 1;
+pub const TUN_F_CSUM: ::std::os::raw::c_uint = 1;
+pub const TUN_F_TSO4: ::std::os::raw::c_uint = 2;
+pub const TUN_F_TSO6: ::std::os::raw::c_uint = 4;
+pub const TUN_F_TSO_ECN: ::std::os::raw::c_uint = 8;
+pub const TUN_F_UFO: ::std::os::raw::c_uint = 16;
+pub const TUN_PKT_STRIP: ::std::os::raw::c_uint = 1;
+pub const TUN_FLT_ALLMULTI: ::std::os::raw::c_uint = 1;
+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, Default, 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, Default, 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;
+#[repr(C, packed)]
+#[derive(Debug, Default, 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)]
+#[derive(Debug, Default, Copy)]
+pub struct sock_filter {
+    pub code: __u16,
+    pub jt: __u8,
+    pub jf: __u8,
+    pub k: __u32,
+}
+#[test]
+fn bindgen_test_layout_sock_filter() {
+    assert_eq!(::std::mem::size_of::<sock_filter>() , 8usize , concat ! (
+               "Size of: " , stringify ! ( sock_filter ) ));
+    assert_eq! (::std::mem::align_of::<sock_filter>() , 4usize , concat ! (
+                "Alignment of " , stringify ! ( sock_filter ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sock_filter ) ) . code as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( sock_filter ) , "::" ,
+                stringify ! ( code ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sock_filter ) ) . jt as * const _ as
+                usize } , 2usize , concat ! (
+                "Alignment of field: " , stringify ! ( sock_filter ) , "::" ,
+                stringify ! ( jt ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sock_filter ) ) . jf as * const _ as
+                usize } , 3usize , concat ! (
+                "Alignment of field: " , stringify ! ( sock_filter ) , "::" ,
+                stringify ! ( jf ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sock_filter ) ) . k as * const _ as usize
+                } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( sock_filter ) , "::" ,
+                stringify ! ( k ) ));
+}
+impl Clone for sock_filter {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Copy)]
+pub struct sock_fprog {
+    pub len: ::std::os::raw::c_ushort,
+    pub filter: *mut sock_filter,
+}
+#[test]
+fn bindgen_test_layout_sock_fprog() {
+    assert_eq!(::std::mem::size_of::<sock_fprog>() , 16usize , concat ! (
+               "Size of: " , stringify ! ( sock_fprog ) ));
+    assert_eq! (::std::mem::align_of::<sock_fprog>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( sock_fprog ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sock_fprog ) ) . len as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( sock_fprog ) , "::" ,
+                stringify ! ( len ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sock_fprog ) ) . filter as * const _ as
+                usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( sock_fprog ) , "::" ,
+                stringify ! ( filter ) ));
+}
+impl Clone for sock_fprog {
+    fn clone(&self) -> Self { *self }
+}
+impl Default for sock_fprog {
+    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct tun_pi {
+    pub flags: __u16,
+    pub proto: __be16,
+}
+#[test]
+fn bindgen_test_layout_tun_pi() {
+    assert_eq!(::std::mem::size_of::<tun_pi>() , 4usize , concat ! (
+               "Size of: " , stringify ! ( tun_pi ) ));
+    assert_eq! (::std::mem::align_of::<tun_pi>() , 2usize , concat ! (
+                "Alignment of " , stringify ! ( tun_pi ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const tun_pi ) ) . flags as * const _ as usize
+                } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( tun_pi ) , "::" ,
+                stringify ! ( flags ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const tun_pi ) ) . proto as * const _ as usize
+                } , 2usize , concat ! (
+                "Alignment of field: " , stringify ! ( tun_pi ) , "::" ,
+                stringify ! ( proto ) ));
+}
+impl Clone for tun_pi {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct tun_filter {
+    pub flags: __u16,
+    pub count: __u16,
+    pub addr: __IncompleteArrayField<[__u8; 6usize]>,
+}
+#[test]
+fn bindgen_test_layout_tun_filter() {
+    assert_eq!(::std::mem::size_of::<tun_filter>() , 4usize , concat ! (
+               "Size of: " , stringify ! ( tun_filter ) ));
+    assert_eq! (::std::mem::align_of::<tun_filter>() , 2usize , concat ! (
+                "Alignment of " , stringify ! ( tun_filter ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const tun_filter ) ) . flags as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( tun_filter ) , "::" ,
+                stringify ! ( flags ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const tun_filter ) ) . count as * const _ as
+                usize } , 2usize , concat ! (
+                "Alignment of field: " , stringify ! ( tun_filter ) , "::" ,
+                stringify ! ( count ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const tun_filter ) ) . addr as * const _ as
+                usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( tun_filter ) , "::" ,
+                stringify ! ( addr ) ));
+}
+impl Clone for tun_filter {
+    fn clone(&self) -> Self { *self }
+}
diff --git a/net_sys/src/iff.rs b/net_sys/src/iff.rs
new file mode 100644
index 0000000..21feced
--- /dev/null
+++ b/net_sys/src/iff.rs
@@ -0,0 +1,2217 @@
+/* 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> { }
+#[repr(C)]
+pub struct __BindgenUnionField<T>(::std::marker::PhantomData<T>);
+impl <T> __BindgenUnionField<T> {
+    #[inline]
+    pub fn new() -> Self { __BindgenUnionField(::std::marker::PhantomData) }
+    #[inline]
+    pub unsafe fn as_ref(&self) -> &T { ::std::mem::transmute(self) }
+    #[inline]
+    pub unsafe fn as_mut(&mut self) -> &mut T { ::std::mem::transmute(self) }
+}
+impl <T> ::std::default::Default for __BindgenUnionField<T> {
+    #[inline]
+    fn default() -> Self { Self::new() }
+}
+impl <T> ::std::clone::Clone for __BindgenUnionField<T> {
+    #[inline]
+    fn clone(&self) -> Self { Self::new() }
+}
+impl <T> ::std::marker::Copy for __BindgenUnionField<T> { }
+impl <T> ::std::fmt::Debug for __BindgenUnionField<T> {
+    fn fmt(&self, fmt: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
+        fmt.write_str("__BindgenUnionField")
+    }
+}
+pub const __UAPI_DEF_IN_ADDR: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IN_IPPROTO: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IN_PKTINFO: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IP_MREQ: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_SOCKADDR_IN: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IN_CLASS: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IN6_ADDR: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IN6_ADDR_ALT: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_SOCKADDR_IN6: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IPV6_MREQ: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IPPROTO_V6: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IPV6_OPTIONS: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IN6_PKTINFO: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IP6_MTUINFO: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_XATTR: ::std::os::raw::c_uint = 1;
+pub const __BITS_PER_LONG: ::std::os::raw::c_uint = 64;
+pub const __FD_SETSIZE: ::std::os::raw::c_uint = 1024;
+pub const _K_SS_MAXSIZE: ::std::os::raw::c_uint = 128;
+pub const _SYS_SOCKET_H: ::std::os::raw::c_uint = 1;
+pub const _FEATURES_H: ::std::os::raw::c_uint = 1;
+pub const _DEFAULT_SOURCE: ::std::os::raw::c_uint = 1;
+pub const __USE_ISOC11: ::std::os::raw::c_uint = 1;
+pub const __USE_ISOC99: ::std::os::raw::c_uint = 1;
+pub const __USE_ISOC95: ::std::os::raw::c_uint = 1;
+pub const __USE_POSIX_IMPLICITLY: ::std::os::raw::c_uint = 1;
+pub const _POSIX_SOURCE: ::std::os::raw::c_uint = 1;
+pub const _POSIX_C_SOURCE: ::std::os::raw::c_uint = 200809;
+pub const __USE_POSIX: ::std::os::raw::c_uint = 1;
+pub const __USE_POSIX2: ::std::os::raw::c_uint = 1;
+pub const __USE_POSIX199309: ::std::os::raw::c_uint = 1;
+pub const __USE_POSIX199506: ::std::os::raw::c_uint = 1;
+pub const __USE_XOPEN2K: ::std::os::raw::c_uint = 1;
+pub const __USE_XOPEN2K8: ::std::os::raw::c_uint = 1;
+pub const _ATFILE_SOURCE: ::std::os::raw::c_uint = 1;
+pub const __USE_MISC: ::std::os::raw::c_uint = 1;
+pub const __USE_ATFILE: ::std::os::raw::c_uint = 1;
+pub const __USE_FORTIFY_LEVEL: ::std::os::raw::c_uint = 0;
+pub const _STDC_PREDEF_H: ::std::os::raw::c_uint = 1;
+pub const __STDC_IEC_559__: ::std::os::raw::c_uint = 1;
+pub const __STDC_IEC_559_COMPLEX__: ::std::os::raw::c_uint = 1;
+pub const __STDC_ISO_10646__: ::std::os::raw::c_uint = 201505;
+pub const __STDC_NO_THREADS__: ::std::os::raw::c_uint = 1;
+pub const __GNU_LIBRARY__: ::std::os::raw::c_uint = 6;
+pub const __GLIBC__: ::std::os::raw::c_uint = 2;
+pub const __GLIBC_MINOR__: ::std::os::raw::c_uint = 23;
+pub const _SYS_CDEFS_H: ::std::os::raw::c_uint = 1;
+pub const __WORDSIZE: ::std::os::raw::c_uint = 64;
+pub const __WORDSIZE_TIME64_COMPAT32: ::std::os::raw::c_uint = 1;
+pub const __SYSCALL_WORDSIZE: ::std::os::raw::c_uint = 64;
+pub const _SYS_UIO_H: ::std::os::raw::c_uint = 1;
+pub const _SYS_TYPES_H: ::std::os::raw::c_uint = 1;
+pub const _BITS_TYPES_H: ::std::os::raw::c_uint = 1;
+pub const _BITS_TYPESIZES_H: ::std::os::raw::c_uint = 1;
+pub const __OFF_T_MATCHES_OFF64_T: ::std::os::raw::c_uint = 1;
+pub const __INO_T_MATCHES_INO64_T: ::std::os::raw::c_uint = 1;
+pub const __clock_t_defined: ::std::os::raw::c_uint = 1;
+pub const __time_t_defined: ::std::os::raw::c_uint = 1;
+pub const __clockid_t_defined: ::std::os::raw::c_uint = 1;
+pub const __timer_t_defined: ::std::os::raw::c_uint = 1;
+pub const __BIT_TYPES_DEFINED__: ::std::os::raw::c_uint = 1;
+pub const _ENDIAN_H: ::std::os::raw::c_uint = 1;
+pub const __LITTLE_ENDIAN: ::std::os::raw::c_uint = 1234;
+pub const __BIG_ENDIAN: ::std::os::raw::c_uint = 4321;
+pub const __PDP_ENDIAN: ::std::os::raw::c_uint = 3412;
+pub const __BYTE_ORDER: ::std::os::raw::c_uint = 1234;
+pub const __FLOAT_WORD_ORDER: ::std::os::raw::c_uint = 1234;
+pub const LITTLE_ENDIAN: ::std::os::raw::c_uint = 1234;
+pub const BIG_ENDIAN: ::std::os::raw::c_uint = 4321;
+pub const PDP_ENDIAN: ::std::os::raw::c_uint = 3412;
+pub const BYTE_ORDER: ::std::os::raw::c_uint = 1234;
+pub const _BITS_BYTESWAP_H: ::std::os::raw::c_uint = 1;
+pub const _SYS_SELECT_H: ::std::os::raw::c_uint = 1;
+pub const __FD_ZERO_STOS: &'static [u8; 6usize] = b"stosq\x00";
+pub const _SIGSET_H_types: ::std::os::raw::c_uint = 1;
+pub const __timespec_defined: ::std::os::raw::c_uint = 1;
+pub const _STRUCT_TIMEVAL: ::std::os::raw::c_uint = 1;
+pub const FD_SETSIZE: ::std::os::raw::c_uint = 1024;
+pub const _SYS_SYSMACROS_H: ::std::os::raw::c_uint = 1;
+pub const _BITS_PTHREADTYPES_H: ::std::os::raw::c_uint = 1;
+pub const __SIZEOF_PTHREAD_ATTR_T: ::std::os::raw::c_uint = 56;
+pub const __SIZEOF_PTHREAD_MUTEX_T: ::std::os::raw::c_uint = 40;
+pub const __SIZEOF_PTHREAD_MUTEXATTR_T: ::std::os::raw::c_uint = 4;
+pub const __SIZEOF_PTHREAD_COND_T: ::std::os::raw::c_uint = 48;
+pub const __SIZEOF_PTHREAD_CONDATTR_T: ::std::os::raw::c_uint = 4;
+pub const __SIZEOF_PTHREAD_RWLOCK_T: ::std::os::raw::c_uint = 56;
+pub const __SIZEOF_PTHREAD_RWLOCKATTR_T: ::std::os::raw::c_uint = 8;
+pub const __SIZEOF_PTHREAD_BARRIER_T: ::std::os::raw::c_uint = 32;
+pub const __SIZEOF_PTHREAD_BARRIERATTR_T: ::std::os::raw::c_uint = 4;
+pub const __have_pthread_attr_t: ::std::os::raw::c_uint = 1;
+pub const __PTHREAD_MUTEX_HAVE_PREV: ::std::os::raw::c_uint = 1;
+pub const __PTHREAD_RWLOCK_INT_FLAGS_SHARED: ::std::os::raw::c_uint = 1;
+pub const _BITS_UIO_H: ::std::os::raw::c_uint = 1;
+pub const UIO_MAXIOV: ::std::os::raw::c_uint = 1024;
+pub const PF_UNSPEC: ::std::os::raw::c_uint = 0;
+pub const PF_LOCAL: ::std::os::raw::c_uint = 1;
+pub const PF_UNIX: ::std::os::raw::c_uint = 1;
+pub const PF_FILE: ::std::os::raw::c_uint = 1;
+pub const PF_INET: ::std::os::raw::c_uint = 2;
+pub const PF_AX25: ::std::os::raw::c_uint = 3;
+pub const PF_IPX: ::std::os::raw::c_uint = 4;
+pub const PF_APPLETALK: ::std::os::raw::c_uint = 5;
+pub const PF_NETROM: ::std::os::raw::c_uint = 6;
+pub const PF_BRIDGE: ::std::os::raw::c_uint = 7;
+pub const PF_ATMPVC: ::std::os::raw::c_uint = 8;
+pub const PF_X25: ::std::os::raw::c_uint = 9;
+pub const PF_INET6: ::std::os::raw::c_uint = 10;
+pub const PF_ROSE: ::std::os::raw::c_uint = 11;
+pub const PF_DECnet: ::std::os::raw::c_uint = 12;
+pub const PF_NETBEUI: ::std::os::raw::c_uint = 13;
+pub const PF_SECURITY: ::std::os::raw::c_uint = 14;
+pub const PF_KEY: ::std::os::raw::c_uint = 15;
+pub const PF_NETLINK: ::std::os::raw::c_uint = 16;
+pub const PF_ROUTE: ::std::os::raw::c_uint = 16;
+pub const PF_PACKET: ::std::os::raw::c_uint = 17;
+pub const PF_ASH: ::std::os::raw::c_uint = 18;
+pub const PF_ECONET: ::std::os::raw::c_uint = 19;
+pub const PF_ATMSVC: ::std::os::raw::c_uint = 20;
+pub const PF_RDS: ::std::os::raw::c_uint = 21;
+pub const PF_SNA: ::std::os::raw::c_uint = 22;
+pub const PF_IRDA: ::std::os::raw::c_uint = 23;
+pub const PF_PPPOX: ::std::os::raw::c_uint = 24;
+pub const PF_WANPIPE: ::std::os::raw::c_uint = 25;
+pub const PF_LLC: ::std::os::raw::c_uint = 26;
+pub const PF_IB: ::std::os::raw::c_uint = 27;
+pub const PF_MPLS: ::std::os::raw::c_uint = 28;
+pub const PF_CAN: ::std::os::raw::c_uint = 29;
+pub const PF_TIPC: ::std::os::raw::c_uint = 30;
+pub const PF_BLUETOOTH: ::std::os::raw::c_uint = 31;
+pub const PF_IUCV: ::std::os::raw::c_uint = 32;
+pub const PF_RXRPC: ::std::os::raw::c_uint = 33;
+pub const PF_ISDN: ::std::os::raw::c_uint = 34;
+pub const PF_PHONET: ::std::os::raw::c_uint = 35;
+pub const PF_IEEE802154: ::std::os::raw::c_uint = 36;
+pub const PF_CAIF: ::std::os::raw::c_uint = 37;
+pub const PF_ALG: ::std::os::raw::c_uint = 38;
+pub const PF_NFC: ::std::os::raw::c_uint = 39;
+pub const PF_VSOCK: ::std::os::raw::c_uint = 40;
+pub const PF_MAX: ::std::os::raw::c_uint = 41;
+pub const AF_UNSPEC: ::std::os::raw::c_uint = 0;
+pub const AF_LOCAL: ::std::os::raw::c_uint = 1;
+pub const AF_UNIX: ::std::os::raw::c_uint = 1;
+pub const AF_FILE: ::std::os::raw::c_uint = 1;
+pub const AF_INET: ::std::os::raw::c_uint = 2;
+pub const AF_AX25: ::std::os::raw::c_uint = 3;
+pub const AF_IPX: ::std::os::raw::c_uint = 4;
+pub const AF_APPLETALK: ::std::os::raw::c_uint = 5;
+pub const AF_NETROM: ::std::os::raw::c_uint = 6;
+pub const AF_BRIDGE: ::std::os::raw::c_uint = 7;
+pub const AF_ATMPVC: ::std::os::raw::c_uint = 8;
+pub const AF_X25: ::std::os::raw::c_uint = 9;
+pub const AF_INET6: ::std::os::raw::c_uint = 10;
+pub const AF_ROSE: ::std::os::raw::c_uint = 11;
+pub const AF_DECnet: ::std::os::raw::c_uint = 12;
+pub const AF_NETBEUI: ::std::os::raw::c_uint = 13;
+pub const AF_SECURITY: ::std::os::raw::c_uint = 14;
+pub const AF_KEY: ::std::os::raw::c_uint = 15;
+pub const AF_NETLINK: ::std::os::raw::c_uint = 16;
+pub const AF_ROUTE: ::std::os::raw::c_uint = 16;
+pub const AF_PACKET: ::std::os::raw::c_uint = 17;
+pub const AF_ASH: ::std::os::raw::c_uint = 18;
+pub const AF_ECONET: ::std::os::raw::c_uint = 19;
+pub const AF_ATMSVC: ::std::os::raw::c_uint = 20;
+pub const AF_RDS: ::std::os::raw::c_uint = 21;
+pub const AF_SNA: ::std::os::raw::c_uint = 22;
+pub const AF_IRDA: ::std::os::raw::c_uint = 23;
+pub const AF_PPPOX: ::std::os::raw::c_uint = 24;
+pub const AF_WANPIPE: ::std::os::raw::c_uint = 25;
+pub const AF_LLC: ::std::os::raw::c_uint = 26;
+pub const AF_IB: ::std::os::raw::c_uint = 27;
+pub const AF_MPLS: ::std::os::raw::c_uint = 28;
+pub const AF_CAN: ::std::os::raw::c_uint = 29;
+pub const AF_TIPC: ::std::os::raw::c_uint = 30;
+pub const AF_BLUETOOTH: ::std::os::raw::c_uint = 31;
+pub const AF_IUCV: ::std::os::raw::c_uint = 32;
+pub const AF_RXRPC: ::std::os::raw::c_uint = 33;
+pub const AF_ISDN: ::std::os::raw::c_uint = 34;
+pub const AF_PHONET: ::std::os::raw::c_uint = 35;
+pub const AF_IEEE802154: ::std::os::raw::c_uint = 36;
+pub const AF_CAIF: ::std::os::raw::c_uint = 37;
+pub const AF_ALG: ::std::os::raw::c_uint = 38;
+pub const AF_NFC: ::std::os::raw::c_uint = 39;
+pub const AF_VSOCK: ::std::os::raw::c_uint = 40;
+pub const AF_MAX: ::std::os::raw::c_uint = 41;
+pub const SOL_RAW: ::std::os::raw::c_uint = 255;
+pub const SOL_DECNET: ::std::os::raw::c_uint = 261;
+pub const SOL_X25: ::std::os::raw::c_uint = 262;
+pub const SOL_PACKET: ::std::os::raw::c_uint = 263;
+pub const SOL_ATM: ::std::os::raw::c_uint = 264;
+pub const SOL_AAL: ::std::os::raw::c_uint = 265;
+pub const SOL_IRDA: ::std::os::raw::c_uint = 266;
+pub const SOMAXCONN: ::std::os::raw::c_uint = 128;
+pub const _BITS_SOCKADDR_H: ::std::os::raw::c_uint = 1;
+pub const _SS_SIZE: ::std::os::raw::c_uint = 128;
+pub const FIOSETOWN: ::std::os::raw::c_uint = 35073;
+pub const SIOCSPGRP: ::std::os::raw::c_uint = 35074;
+pub const FIOGETOWN: ::std::os::raw::c_uint = 35075;
+pub const SIOCGPGRP: ::std::os::raw::c_uint = 35076;
+pub const SIOCATMARK: ::std::os::raw::c_uint = 35077;
+pub const SIOCGSTAMP: ::std::os::raw::c_uint = 35078;
+pub const SIOCGSTAMPNS: ::std::os::raw::c_uint = 35079;
+pub const SOL_SOCKET: ::std::os::raw::c_uint = 1;
+pub const SO_DEBUG: ::std::os::raw::c_uint = 1;
+pub const SO_REUSEADDR: ::std::os::raw::c_uint = 2;
+pub const SO_TYPE: ::std::os::raw::c_uint = 3;
+pub const SO_ERROR: ::std::os::raw::c_uint = 4;
+pub const SO_DONTROUTE: ::std::os::raw::c_uint = 5;
+pub const SO_BROADCAST: ::std::os::raw::c_uint = 6;
+pub const SO_SNDBUF: ::std::os::raw::c_uint = 7;
+pub const SO_RCVBUF: ::std::os::raw::c_uint = 8;
+pub const SO_SNDBUFFORCE: ::std::os::raw::c_uint = 32;
+pub const SO_RCVBUFFORCE: ::std::os::raw::c_uint = 33;
+pub const SO_KEEPALIVE: ::std::os::raw::c_uint = 9;
+pub const SO_OOBINLINE: ::std::os::raw::c_uint = 10;
+pub const SO_NO_CHECK: ::std::os::raw::c_uint = 11;
+pub const SO_PRIORITY: ::std::os::raw::c_uint = 12;
+pub const SO_LINGER: ::std::os::raw::c_uint = 13;
+pub const SO_BSDCOMPAT: ::std::os::raw::c_uint = 14;
+pub const SO_REUSEPORT: ::std::os::raw::c_uint = 15;
+pub const SO_PASSCRED: ::std::os::raw::c_uint = 16;
+pub const SO_PEERCRED: ::std::os::raw::c_uint = 17;
+pub const SO_RCVLOWAT: ::std::os::raw::c_uint = 18;
+pub const SO_SNDLOWAT: ::std::os::raw::c_uint = 19;
+pub const SO_RCVTIMEO: ::std::os::raw::c_uint = 20;
+pub const SO_SNDTIMEO: ::std::os::raw::c_uint = 21;
+pub const SO_SECURITY_AUTHENTICATION: ::std::os::raw::c_uint = 22;
+pub const SO_SECURITY_ENCRYPTION_TRANSPORT: ::std::os::raw::c_uint = 23;
+pub const SO_SECURITY_ENCRYPTION_NETWORK: ::std::os::raw::c_uint = 24;
+pub const SO_BINDTODEVICE: ::std::os::raw::c_uint = 25;
+pub const SO_ATTACH_FILTER: ::std::os::raw::c_uint = 26;
+pub const SO_DETACH_FILTER: ::std::os::raw::c_uint = 27;
+pub const SO_GET_FILTER: ::std::os::raw::c_uint = 26;
+pub const SO_PEERNAME: ::std::os::raw::c_uint = 28;
+pub const SO_TIMESTAMP: ::std::os::raw::c_uint = 29;
+pub const SCM_TIMESTAMP: ::std::os::raw::c_uint = 29;
+pub const SO_ACCEPTCONN: ::std::os::raw::c_uint = 30;
+pub const SO_PEERSEC: ::std::os::raw::c_uint = 31;
+pub const SO_PASSSEC: ::std::os::raw::c_uint = 34;
+pub const SO_TIMESTAMPNS: ::std::os::raw::c_uint = 35;
+pub const SCM_TIMESTAMPNS: ::std::os::raw::c_uint = 35;
+pub const SO_MARK: ::std::os::raw::c_uint = 36;
+pub const SO_TIMESTAMPING: ::std::os::raw::c_uint = 37;
+pub const SCM_TIMESTAMPING: ::std::os::raw::c_uint = 37;
+pub const SO_PROTOCOL: ::std::os::raw::c_uint = 38;
+pub const SO_DOMAIN: ::std::os::raw::c_uint = 39;
+pub const SO_RXQ_OVFL: ::std::os::raw::c_uint = 40;
+pub const SO_WIFI_STATUS: ::std::os::raw::c_uint = 41;
+pub const SCM_WIFI_STATUS: ::std::os::raw::c_uint = 41;
+pub const SO_PEEK_OFF: ::std::os::raw::c_uint = 42;
+pub const SO_NOFCS: ::std::os::raw::c_uint = 43;
+pub const SO_LOCK_FILTER: ::std::os::raw::c_uint = 44;
+pub const SO_SELECT_ERR_QUEUE: ::std::os::raw::c_uint = 45;
+pub const SO_BUSY_POLL: ::std::os::raw::c_uint = 46;
+pub const SO_MAX_PACING_RATE: ::std::os::raw::c_uint = 47;
+pub const SO_BPF_EXTENSIONS: ::std::os::raw::c_uint = 48;
+pub const SO_INCOMING_CPU: ::std::os::raw::c_uint = 49;
+pub const SO_ATTACH_BPF: ::std::os::raw::c_uint = 50;
+pub const SO_DETACH_BPF: ::std::os::raw::c_uint = 27;
+pub const IFNAMSIZ: ::std::os::raw::c_uint = 16;
+pub const IFALIASZ: ::std::os::raw::c_uint = 256;
+pub const GENERIC_HDLC_VERSION: ::std::os::raw::c_uint = 4;
+pub const CLOCK_DEFAULT: ::std::os::raw::c_uint = 0;
+pub const CLOCK_EXT: ::std::os::raw::c_uint = 1;
+pub const CLOCK_INT: ::std::os::raw::c_uint = 2;
+pub const CLOCK_TXINT: ::std::os::raw::c_uint = 3;
+pub const CLOCK_TXFROMRX: ::std::os::raw::c_uint = 4;
+pub const ENCODING_DEFAULT: ::std::os::raw::c_uint = 0;
+pub const ENCODING_NRZ: ::std::os::raw::c_uint = 1;
+pub const ENCODING_NRZI: ::std::os::raw::c_uint = 2;
+pub const ENCODING_FM_MARK: ::std::os::raw::c_uint = 3;
+pub const ENCODING_FM_SPACE: ::std::os::raw::c_uint = 4;
+pub const ENCODING_MANCHESTER: ::std::os::raw::c_uint = 5;
+pub const PARITY_DEFAULT: ::std::os::raw::c_uint = 0;
+pub const PARITY_NONE: ::std::os::raw::c_uint = 1;
+pub const PARITY_CRC16_PR0: ::std::os::raw::c_uint = 2;
+pub const PARITY_CRC16_PR1: ::std::os::raw::c_uint = 3;
+pub const PARITY_CRC16_PR0_CCITT: ::std::os::raw::c_uint = 4;
+pub const PARITY_CRC16_PR1_CCITT: ::std::os::raw::c_uint = 5;
+pub const PARITY_CRC32_PR0_CCITT: ::std::os::raw::c_uint = 6;
+pub const PARITY_CRC32_PR1_CCITT: ::std::os::raw::c_uint = 7;
+pub const LMI_DEFAULT: ::std::os::raw::c_uint = 0;
+pub const LMI_NONE: ::std::os::raw::c_uint = 1;
+pub const LMI_ANSI: ::std::os::raw::c_uint = 2;
+pub const LMI_CCITT: ::std::os::raw::c_uint = 3;
+pub const LMI_CISCO: ::std::os::raw::c_uint = 4;
+pub const IF_GET_IFACE: ::std::os::raw::c_uint = 1;
+pub const IF_GET_PROTO: ::std::os::raw::c_uint = 2;
+pub const IF_IFACE_V35: ::std::os::raw::c_uint = 4096;
+pub const IF_IFACE_V24: ::std::os::raw::c_uint = 4097;
+pub const IF_IFACE_X21: ::std::os::raw::c_uint = 4098;
+pub const IF_IFACE_T1: ::std::os::raw::c_uint = 4099;
+pub const IF_IFACE_E1: ::std::os::raw::c_uint = 4100;
+pub const IF_IFACE_SYNC_SERIAL: ::std::os::raw::c_uint = 4101;
+pub const IF_IFACE_X21D: ::std::os::raw::c_uint = 4102;
+pub const IF_PROTO_HDLC: ::std::os::raw::c_uint = 8192;
+pub const IF_PROTO_PPP: ::std::os::raw::c_uint = 8193;
+pub const IF_PROTO_CISCO: ::std::os::raw::c_uint = 8194;
+pub const IF_PROTO_FR: ::std::os::raw::c_uint = 8195;
+pub const IF_PROTO_FR_ADD_PVC: ::std::os::raw::c_uint = 8196;
+pub const IF_PROTO_FR_DEL_PVC: ::std::os::raw::c_uint = 8197;
+pub const IF_PROTO_X25: ::std::os::raw::c_uint = 8198;
+pub const IF_PROTO_HDLC_ETH: ::std::os::raw::c_uint = 8199;
+pub const IF_PROTO_FR_ADD_ETH_PVC: ::std::os::raw::c_uint = 8200;
+pub const IF_PROTO_FR_DEL_ETH_PVC: ::std::os::raw::c_uint = 8201;
+pub const IF_PROTO_FR_PVC: ::std::os::raw::c_uint = 8202;
+pub const IF_PROTO_FR_ETH_PVC: ::std::os::raw::c_uint = 8203;
+pub const IF_PROTO_RAW: ::std::os::raw::c_uint = 8204;
+pub const IFHWADDRLEN: ::std::os::raw::c_uint = 6;
+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, Default, 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, Default, 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 __kernel_sa_family_t = ::std::os::raw::c_ushort;
+#[repr(C)]
+pub struct __kernel_sockaddr_storage {
+    pub ss_family: __kernel_sa_family_t,
+    pub __data: [::std::os::raw::c_char; 126usize],
+    pub __bindgen_align: [u64; 0usize],
+}
+#[test]
+fn bindgen_test_layout___kernel_sockaddr_storage() {
+    assert_eq!(::std::mem::size_of::<__kernel_sockaddr_storage>() , 128usize ,
+               concat ! (
+               "Size of: " , stringify ! ( __kernel_sockaddr_storage ) ));
+    assert_eq! (::std::mem::align_of::<__kernel_sockaddr_storage>() , 8usize ,
+                concat ! (
+                "Alignment of " , stringify ! ( __kernel_sockaddr_storage )
+                ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const __kernel_sockaddr_storage ) ) . ss_family
+                as * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                __kernel_sockaddr_storage ) , "::" , stringify ! ( ss_family )
+                ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const __kernel_sockaddr_storage ) ) . __data as
+                * const _ as usize } , 2usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                __kernel_sockaddr_storage ) , "::" , stringify ! ( __data )
+                ));
+}
+impl Default for __kernel_sockaddr_storage {
+    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
+}
+pub type __u_char = ::std::os::raw::c_uchar;
+pub type __u_short = ::std::os::raw::c_ushort;
+pub type __u_int = ::std::os::raw::c_uint;
+pub type __u_long = ::std::os::raw::c_ulong;
+pub type __int8_t = ::std::os::raw::c_schar;
+pub type __uint8_t = ::std::os::raw::c_uchar;
+pub type __int16_t = ::std::os::raw::c_short;
+pub type __uint16_t = ::std::os::raw::c_ushort;
+pub type __int32_t = ::std::os::raw::c_int;
+pub type __uint32_t = ::std::os::raw::c_uint;
+pub type __int64_t = ::std::os::raw::c_long;
+pub type __uint64_t = ::std::os::raw::c_ulong;
+pub type __quad_t = ::std::os::raw::c_long;
+pub type __u_quad_t = ::std::os::raw::c_ulong;
+pub type __dev_t = ::std::os::raw::c_ulong;
+pub type __uid_t = ::std::os::raw::c_uint;
+pub type __gid_t = ::std::os::raw::c_uint;
+pub type __ino_t = ::std::os::raw::c_ulong;
+pub type __ino64_t = ::std::os::raw::c_ulong;
+pub type __mode_t = ::std::os::raw::c_uint;
+pub type __nlink_t = ::std::os::raw::c_ulong;
+pub type __off_t = ::std::os::raw::c_long;
+pub type __off64_t = ::std::os::raw::c_long;
+pub type __pid_t = ::std::os::raw::c_int;
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct __fsid_t {
+    pub __val: [::std::os::raw::c_int; 2usize],
+}
+#[test]
+fn bindgen_test_layout___fsid_t() {
+    assert_eq!(::std::mem::size_of::<__fsid_t>() , 8usize , concat ! (
+               "Size of: " , stringify ! ( __fsid_t ) ));
+    assert_eq! (::std::mem::align_of::<__fsid_t>() , 4usize , concat ! (
+                "Alignment of " , stringify ! ( __fsid_t ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const __fsid_t ) ) . __val as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( __fsid_t ) , "::" ,
+                stringify ! ( __val ) ));
+}
+impl Clone for __fsid_t {
+    fn clone(&self) -> Self { *self }
+}
+pub type __clock_t = ::std::os::raw::c_long;
+pub type __rlim_t = ::std::os::raw::c_ulong;
+pub type __rlim64_t = ::std::os::raw::c_ulong;
+pub type __id_t = ::std::os::raw::c_uint;
+pub type __time_t = ::std::os::raw::c_long;
+pub type __useconds_t = ::std::os::raw::c_uint;
+pub type __suseconds_t = ::std::os::raw::c_long;
+pub type __daddr_t = ::std::os::raw::c_int;
+pub type __key_t = ::std::os::raw::c_int;
+pub type __clockid_t = ::std::os::raw::c_int;
+pub type __timer_t = *mut ::std::os::raw::c_void;
+pub type __blksize_t = ::std::os::raw::c_long;
+pub type __blkcnt_t = ::std::os::raw::c_long;
+pub type __blkcnt64_t = ::std::os::raw::c_long;
+pub type __fsblkcnt_t = ::std::os::raw::c_ulong;
+pub type __fsblkcnt64_t = ::std::os::raw::c_ulong;
+pub type __fsfilcnt_t = ::std::os::raw::c_ulong;
+pub type __fsfilcnt64_t = ::std::os::raw::c_ulong;
+pub type __fsword_t = ::std::os::raw::c_long;
+pub type __ssize_t = ::std::os::raw::c_long;
+pub type __syscall_slong_t = ::std::os::raw::c_long;
+pub type __syscall_ulong_t = ::std::os::raw::c_ulong;
+pub type __loff_t = __off64_t;
+pub type __qaddr_t = *mut __quad_t;
+pub type __caddr_t = *mut ::std::os::raw::c_char;
+pub type __intptr_t = ::std::os::raw::c_long;
+pub type __socklen_t = ::std::os::raw::c_uint;
+pub type u_char = __u_char;
+pub type u_short = __u_short;
+pub type u_int = __u_int;
+pub type u_long = __u_long;
+pub type quad_t = __quad_t;
+pub type u_quad_t = __u_quad_t;
+pub type fsid_t = __fsid_t;
+pub type loff_t = __loff_t;
+pub type ino_t = __ino_t;
+pub type dev_t = __dev_t;
+pub type gid_t = __gid_t;
+pub type mode_t = __mode_t;
+pub type nlink_t = __nlink_t;
+pub type uid_t = __uid_t;
+pub type off_t = __off_t;
+pub type pid_t = __pid_t;
+pub type id_t = __id_t;
+pub type daddr_t = __daddr_t;
+pub type caddr_t = __caddr_t;
+pub type key_t = __key_t;
+pub type clock_t = __clock_t;
+pub type time_t = __time_t;
+pub type clockid_t = __clockid_t;
+pub type timer_t = __timer_t;
+pub type ulong = ::std::os::raw::c_ulong;
+pub type ushort = ::std::os::raw::c_ushort;
+pub type uint = ::std::os::raw::c_uint;
+pub type u_int8_t = ::std::os::raw::c_uchar;
+pub type u_int16_t = ::std::os::raw::c_ushort;
+pub type u_int32_t = ::std::os::raw::c_uint;
+pub type u_int64_t = ::std::os::raw::c_ulong;
+pub type register_t = ::std::os::raw::c_long;
+pub type __sig_atomic_t = ::std::os::raw::c_int;
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct __sigset_t {
+    pub __val: [::std::os::raw::c_ulong; 16usize],
+}
+#[test]
+fn bindgen_test_layout___sigset_t() {
+    assert_eq!(::std::mem::size_of::<__sigset_t>() , 128usize , concat ! (
+               "Size of: " , stringify ! ( __sigset_t ) ));
+    assert_eq! (::std::mem::align_of::<__sigset_t>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( __sigset_t ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const __sigset_t ) ) . __val as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( __sigset_t ) , "::" ,
+                stringify ! ( __val ) ));
+}
+impl Clone for __sigset_t {
+    fn clone(&self) -> Self { *self }
+}
+pub type sigset_t = __sigset_t;
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct timespec {
+    pub tv_sec: __time_t,
+    pub tv_nsec: __syscall_slong_t,
+}
+#[test]
+fn bindgen_test_layout_timespec() {
+    assert_eq!(::std::mem::size_of::<timespec>() , 16usize , concat ! (
+               "Size of: " , stringify ! ( timespec ) ));
+    assert_eq! (::std::mem::align_of::<timespec>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( timespec ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const timespec ) ) . tv_sec as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( timespec ) , "::" ,
+                stringify ! ( tv_sec ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const timespec ) ) . tv_nsec as * const _ as
+                usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( timespec ) , "::" ,
+                stringify ! ( tv_nsec ) ));
+}
+impl Clone for timespec {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct timeval {
+    pub tv_sec: __time_t,
+    pub tv_usec: __suseconds_t,
+}
+#[test]
+fn bindgen_test_layout_timeval() {
+    assert_eq!(::std::mem::size_of::<timeval>() , 16usize , concat ! (
+               "Size of: " , stringify ! ( timeval ) ));
+    assert_eq! (::std::mem::align_of::<timeval>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( timeval ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const timeval ) ) . tv_sec as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( timeval ) , "::" ,
+                stringify ! ( tv_sec ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const timeval ) ) . tv_usec as * const _ as
+                usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( timeval ) , "::" ,
+                stringify ! ( tv_usec ) ));
+}
+impl Clone for timeval {
+    fn clone(&self) -> Self { *self }
+}
+pub type suseconds_t = __suseconds_t;
+pub type __fd_mask = ::std::os::raw::c_long;
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct fd_set {
+    pub __fds_bits: [__fd_mask; 16usize],
+}
+#[test]
+fn bindgen_test_layout_fd_set() {
+    assert_eq!(::std::mem::size_of::<fd_set>() , 128usize , concat ! (
+               "Size of: " , stringify ! ( fd_set ) ));
+    assert_eq! (::std::mem::align_of::<fd_set>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( fd_set ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const fd_set ) ) . __fds_bits as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( fd_set ) , "::" ,
+                stringify ! ( __fds_bits ) ));
+}
+impl Clone for fd_set {
+    fn clone(&self) -> Self { *self }
+}
+pub type fd_mask = __fd_mask;
+extern "C" {
+    pub fn select(__nfds: ::std::os::raw::c_int, __readfds: *mut fd_set,
+                  __writefds: *mut fd_set, __exceptfds: *mut fd_set,
+                  __timeout: *mut timeval) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn pselect(__nfds: ::std::os::raw::c_int, __readfds: *mut fd_set,
+                   __writefds: *mut fd_set, __exceptfds: *mut fd_set,
+                   __timeout: *const timespec, __sigmask: *const __sigset_t)
+     -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn gnu_dev_major(__dev: ::std::os::raw::c_ulonglong)
+     -> ::std::os::raw::c_uint;
+}
+extern "C" {
+    pub fn gnu_dev_minor(__dev: ::std::os::raw::c_ulonglong)
+     -> ::std::os::raw::c_uint;
+}
+extern "C" {
+    pub fn gnu_dev_makedev(__major: ::std::os::raw::c_uint,
+                           __minor: ::std::os::raw::c_uint)
+     -> ::std::os::raw::c_ulonglong;
+}
+pub type blksize_t = __blksize_t;
+pub type blkcnt_t = __blkcnt_t;
+pub type fsblkcnt_t = __fsblkcnt_t;
+pub type fsfilcnt_t = __fsfilcnt_t;
+pub type pthread_t = ::std::os::raw::c_ulong;
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct pthread_attr_t {
+    pub __size: __BindgenUnionField<[::std::os::raw::c_char; 56usize]>,
+    pub __align: __BindgenUnionField<::std::os::raw::c_long>,
+    pub bindgen_union_field: [u64; 7usize],
+}
+#[test]
+fn bindgen_test_layout_pthread_attr_t() {
+    assert_eq!(::std::mem::size_of::<pthread_attr_t>() , 56usize , concat ! (
+               "Size of: " , stringify ! ( pthread_attr_t ) ));
+    assert_eq! (::std::mem::align_of::<pthread_attr_t>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( pthread_attr_t ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_attr_t ) ) . __size as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_attr_t ) , "::"
+                , stringify ! ( __size ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_attr_t ) ) . __align as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_attr_t ) , "::"
+                , stringify ! ( __align ) ));
+}
+impl Clone for pthread_attr_t {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Copy)]
+pub struct __pthread_internal_list {
+    pub __prev: *mut __pthread_internal_list,
+    pub __next: *mut __pthread_internal_list,
+}
+#[test]
+fn bindgen_test_layout___pthread_internal_list() {
+    assert_eq!(::std::mem::size_of::<__pthread_internal_list>() , 16usize ,
+               concat ! (
+               "Size of: " , stringify ! ( __pthread_internal_list ) ));
+    assert_eq! (::std::mem::align_of::<__pthread_internal_list>() , 8usize ,
+                concat ! (
+                "Alignment of " , stringify ! ( __pthread_internal_list ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const __pthread_internal_list ) ) . __prev as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( __pthread_internal_list
+                ) , "::" , stringify ! ( __prev ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const __pthread_internal_list ) ) . __next as *
+                const _ as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( __pthread_internal_list
+                ) , "::" , stringify ! ( __next ) ));
+}
+impl Clone for __pthread_internal_list {
+    fn clone(&self) -> Self { *self }
+}
+impl Default for __pthread_internal_list {
+    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
+}
+pub type __pthread_list_t = __pthread_internal_list;
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct pthread_mutex_t {
+    pub __data: __BindgenUnionField<pthread_mutex_t___pthread_mutex_s>,
+    pub __size: __BindgenUnionField<[::std::os::raw::c_char; 40usize]>,
+    pub __align: __BindgenUnionField<::std::os::raw::c_long>,
+    pub bindgen_union_field: [u64; 5usize],
+}
+#[repr(C)]
+#[derive(Debug, Copy)]
+pub struct pthread_mutex_t___pthread_mutex_s {
+    pub __lock: ::std::os::raw::c_int,
+    pub __count: ::std::os::raw::c_uint,
+    pub __owner: ::std::os::raw::c_int,
+    pub __nusers: ::std::os::raw::c_uint,
+    pub __kind: ::std::os::raw::c_int,
+    pub __spins: ::std::os::raw::c_short,
+    pub __elision: ::std::os::raw::c_short,
+    pub __list: __pthread_list_t,
+}
+#[test]
+fn bindgen_test_layout_pthread_mutex_t___pthread_mutex_s() {
+    assert_eq!(::std::mem::size_of::<pthread_mutex_t___pthread_mutex_s>() ,
+               40usize , concat ! (
+               "Size of: " , stringify ! ( pthread_mutex_t___pthread_mutex_s )
+               ));
+    assert_eq! (::std::mem::align_of::<pthread_mutex_t___pthread_mutex_s>() ,
+                8usize , concat ! (
+                "Alignment of " , stringify ! (
+                pthread_mutex_t___pthread_mutex_s ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_mutex_t___pthread_mutex_s ) ) .
+                __lock as * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_mutex_t___pthread_mutex_s ) , "::" , stringify ! (
+                __lock ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_mutex_t___pthread_mutex_s ) ) .
+                __count as * const _ as usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_mutex_t___pthread_mutex_s ) , "::" , stringify ! (
+                __count ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_mutex_t___pthread_mutex_s ) ) .
+                __owner as * const _ as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_mutex_t___pthread_mutex_s ) , "::" , stringify ! (
+                __owner ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_mutex_t___pthread_mutex_s ) ) .
+                __nusers as * const _ as usize } , 12usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_mutex_t___pthread_mutex_s ) , "::" , stringify ! (
+                __nusers ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_mutex_t___pthread_mutex_s ) ) .
+                __kind as * const _ as usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_mutex_t___pthread_mutex_s ) , "::" , stringify ! (
+                __kind ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_mutex_t___pthread_mutex_s ) ) .
+                __spins as * const _ as usize } , 20usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_mutex_t___pthread_mutex_s ) , "::" , stringify ! (
+                __spins ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_mutex_t___pthread_mutex_s ) ) .
+                __elision as * const _ as usize } , 22usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_mutex_t___pthread_mutex_s ) , "::" , stringify ! (
+                __elision ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_mutex_t___pthread_mutex_s ) ) .
+                __list as * const _ as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_mutex_t___pthread_mutex_s ) , "::" , stringify ! (
+                __list ) ));
+}
+impl Clone for pthread_mutex_t___pthread_mutex_s {
+    fn clone(&self) -> Self { *self }
+}
+impl Default for pthread_mutex_t___pthread_mutex_s {
+    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
+}
+#[test]
+fn bindgen_test_layout_pthread_mutex_t() {
+    assert_eq!(::std::mem::size_of::<pthread_mutex_t>() , 40usize , concat ! (
+               "Size of: " , stringify ! ( pthread_mutex_t ) ));
+    assert_eq! (::std::mem::align_of::<pthread_mutex_t>() , 8usize , concat !
+                ( "Alignment of " , stringify ! ( pthread_mutex_t ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_mutex_t ) ) . __data as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_mutex_t ) ,
+                "::" , stringify ! ( __data ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_mutex_t ) ) . __size as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_mutex_t ) ,
+                "::" , stringify ! ( __size ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_mutex_t ) ) . __align as * const
+                _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_mutex_t ) ,
+                "::" , stringify ! ( __align ) ));
+}
+impl Clone for pthread_mutex_t {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct pthread_mutexattr_t {
+    pub __size: __BindgenUnionField<[::std::os::raw::c_char; 4usize]>,
+    pub __align: __BindgenUnionField<::std::os::raw::c_int>,
+    pub bindgen_union_field: u32,
+}
+#[test]
+fn bindgen_test_layout_pthread_mutexattr_t() {
+    assert_eq!(::std::mem::size_of::<pthread_mutexattr_t>() , 4usize , concat
+               ! ( "Size of: " , stringify ! ( pthread_mutexattr_t ) ));
+    assert_eq! (::std::mem::align_of::<pthread_mutexattr_t>() , 4usize ,
+                concat ! (
+                "Alignment of " , stringify ! ( pthread_mutexattr_t ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_mutexattr_t ) ) . __size as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_mutexattr_t ) ,
+                "::" , stringify ! ( __size ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_mutexattr_t ) ) . __align as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_mutexattr_t ) ,
+                "::" , stringify ! ( __align ) ));
+}
+impl Clone for pthread_mutexattr_t {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct pthread_cond_t {
+    pub __data: __BindgenUnionField<pthread_cond_t__bindgen_ty_1>,
+    pub __size: __BindgenUnionField<[::std::os::raw::c_char; 48usize]>,
+    pub __align: __BindgenUnionField<::std::os::raw::c_longlong>,
+    pub bindgen_union_field: [u64; 6usize],
+}
+#[repr(C)]
+#[derive(Debug, Copy)]
+pub struct pthread_cond_t__bindgen_ty_1 {
+    pub __lock: ::std::os::raw::c_int,
+    pub __futex: ::std::os::raw::c_uint,
+    pub __total_seq: ::std::os::raw::c_ulonglong,
+    pub __wakeup_seq: ::std::os::raw::c_ulonglong,
+    pub __woken_seq: ::std::os::raw::c_ulonglong,
+    pub __mutex: *mut ::std::os::raw::c_void,
+    pub __nwaiters: ::std::os::raw::c_uint,
+    pub __broadcast_seq: ::std::os::raw::c_uint,
+}
+#[test]
+fn bindgen_test_layout_pthread_cond_t__bindgen_ty_1() {
+    assert_eq!(::std::mem::size_of::<pthread_cond_t__bindgen_ty_1>() , 48usize
+               , concat ! (
+               "Size of: " , stringify ! ( pthread_cond_t__bindgen_ty_1 ) ));
+    assert_eq! (::std::mem::align_of::<pthread_cond_t__bindgen_ty_1>() ,
+                8usize , concat ! (
+                "Alignment of " , stringify ! ( pthread_cond_t__bindgen_ty_1 )
+                ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_cond_t__bindgen_ty_1 ) ) . __lock
+                as * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_cond_t__bindgen_ty_1 ) , "::" , stringify ! ( __lock )
+                ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_cond_t__bindgen_ty_1 ) ) .
+                __futex as * const _ as usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_cond_t__bindgen_ty_1 ) , "::" , stringify ! ( __futex
+                ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_cond_t__bindgen_ty_1 ) ) .
+                __total_seq as * const _ as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_cond_t__bindgen_ty_1 ) , "::" , stringify ! (
+                __total_seq ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_cond_t__bindgen_ty_1 ) ) .
+                __wakeup_seq as * const _ as usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_cond_t__bindgen_ty_1 ) , "::" , stringify ! (
+                __wakeup_seq ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_cond_t__bindgen_ty_1 ) ) .
+                __woken_seq as * const _ as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_cond_t__bindgen_ty_1 ) , "::" , stringify ! (
+                __woken_seq ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_cond_t__bindgen_ty_1 ) ) .
+                __mutex as * const _ as usize } , 32usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_cond_t__bindgen_ty_1 ) , "::" , stringify ! ( __mutex
+                ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_cond_t__bindgen_ty_1 ) ) .
+                __nwaiters as * const _ as usize } , 40usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_cond_t__bindgen_ty_1 ) , "::" , stringify ! (
+                __nwaiters ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_cond_t__bindgen_ty_1 ) ) .
+                __broadcast_seq as * const _ as usize } , 44usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_cond_t__bindgen_ty_1 ) , "::" , stringify ! (
+                __broadcast_seq ) ));
+}
+impl Clone for pthread_cond_t__bindgen_ty_1 {
+    fn clone(&self) -> Self { *self }
+}
+impl Default for pthread_cond_t__bindgen_ty_1 {
+    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
+}
+#[test]
+fn bindgen_test_layout_pthread_cond_t() {
+    assert_eq!(::std::mem::size_of::<pthread_cond_t>() , 48usize , concat ! (
+               "Size of: " , stringify ! ( pthread_cond_t ) ));
+    assert_eq! (::std::mem::align_of::<pthread_cond_t>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( pthread_cond_t ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_cond_t ) ) . __data as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_cond_t ) , "::"
+                , stringify ! ( __data ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_cond_t ) ) . __size as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_cond_t ) , "::"
+                , stringify ! ( __size ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_cond_t ) ) . __align as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_cond_t ) , "::"
+                , stringify ! ( __align ) ));
+}
+impl Clone for pthread_cond_t {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct pthread_condattr_t {
+    pub __size: __BindgenUnionField<[::std::os::raw::c_char; 4usize]>,
+    pub __align: __BindgenUnionField<::std::os::raw::c_int>,
+    pub bindgen_union_field: u32,
+}
+#[test]
+fn bindgen_test_layout_pthread_condattr_t() {
+    assert_eq!(::std::mem::size_of::<pthread_condattr_t>() , 4usize , concat !
+               ( "Size of: " , stringify ! ( pthread_condattr_t ) ));
+    assert_eq! (::std::mem::align_of::<pthread_condattr_t>() , 4usize , concat
+                ! ( "Alignment of " , stringify ! ( pthread_condattr_t ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_condattr_t ) ) . __size as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_condattr_t ) ,
+                "::" , stringify ! ( __size ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_condattr_t ) ) . __align as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_condattr_t ) ,
+                "::" , stringify ! ( __align ) ));
+}
+impl Clone for pthread_condattr_t {
+    fn clone(&self) -> Self { *self }
+}
+pub type pthread_key_t = ::std::os::raw::c_uint;
+pub type pthread_once_t = ::std::os::raw::c_int;
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct pthread_rwlock_t {
+    pub __data: __BindgenUnionField<pthread_rwlock_t__bindgen_ty_1>,
+    pub __size: __BindgenUnionField<[::std::os::raw::c_char; 56usize]>,
+    pub __align: __BindgenUnionField<::std::os::raw::c_long>,
+    pub bindgen_union_field: [u64; 7usize],
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct pthread_rwlock_t__bindgen_ty_1 {
+    pub __lock: ::std::os::raw::c_int,
+    pub __nr_readers: ::std::os::raw::c_uint,
+    pub __readers_wakeup: ::std::os::raw::c_uint,
+    pub __writer_wakeup: ::std::os::raw::c_uint,
+    pub __nr_readers_queued: ::std::os::raw::c_uint,
+    pub __nr_writers_queued: ::std::os::raw::c_uint,
+    pub __writer: ::std::os::raw::c_int,
+    pub __shared: ::std::os::raw::c_int,
+    pub __rwelision: ::std::os::raw::c_schar,
+    pub __pad1: [::std::os::raw::c_uchar; 7usize],
+    pub __pad2: ::std::os::raw::c_ulong,
+    pub __flags: ::std::os::raw::c_uint,
+}
+#[test]
+fn bindgen_test_layout_pthread_rwlock_t__bindgen_ty_1() {
+    assert_eq!(::std::mem::size_of::<pthread_rwlock_t__bindgen_ty_1>() ,
+               56usize , concat ! (
+               "Size of: " , stringify ! ( pthread_rwlock_t__bindgen_ty_1 )
+               ));
+    assert_eq! (::std::mem::align_of::<pthread_rwlock_t__bindgen_ty_1>() ,
+                8usize , concat ! (
+                "Alignment of " , stringify ! ( pthread_rwlock_t__bindgen_ty_1
+                ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlock_t__bindgen_ty_1 ) ) .
+                __lock as * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_rwlock_t__bindgen_ty_1 ) , "::" , stringify ! ( __lock
+                ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlock_t__bindgen_ty_1 ) ) .
+                __nr_readers as * const _ as usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_rwlock_t__bindgen_ty_1 ) , "::" , stringify ! (
+                __nr_readers ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlock_t__bindgen_ty_1 ) ) .
+                __readers_wakeup as * const _ as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_rwlock_t__bindgen_ty_1 ) , "::" , stringify ! (
+                __readers_wakeup ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlock_t__bindgen_ty_1 ) ) .
+                __writer_wakeup as * const _ as usize } , 12usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_rwlock_t__bindgen_ty_1 ) , "::" , stringify ! (
+                __writer_wakeup ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlock_t__bindgen_ty_1 ) ) .
+                __nr_readers_queued as * const _ as usize } , 16usize , concat
+                ! (
+                "Alignment of field: " , stringify ! (
+                pthread_rwlock_t__bindgen_ty_1 ) , "::" , stringify ! (
+                __nr_readers_queued ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlock_t__bindgen_ty_1 ) ) .
+                __nr_writers_queued as * const _ as usize } , 20usize , concat
+                ! (
+                "Alignment of field: " , stringify ! (
+                pthread_rwlock_t__bindgen_ty_1 ) , "::" , stringify ! (
+                __nr_writers_queued ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlock_t__bindgen_ty_1 ) ) .
+                __writer as * const _ as usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_rwlock_t__bindgen_ty_1 ) , "::" , stringify ! (
+                __writer ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlock_t__bindgen_ty_1 ) ) .
+                __shared as * const _ as usize } , 28usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_rwlock_t__bindgen_ty_1 ) , "::" , stringify ! (
+                __shared ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlock_t__bindgen_ty_1 ) ) .
+                __rwelision as * const _ as usize } , 32usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_rwlock_t__bindgen_ty_1 ) , "::" , stringify ! (
+                __rwelision ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlock_t__bindgen_ty_1 ) ) .
+                __pad1 as * const _ as usize } , 33usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_rwlock_t__bindgen_ty_1 ) , "::" , stringify ! ( __pad1
+                ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlock_t__bindgen_ty_1 ) ) .
+                __pad2 as * const _ as usize } , 40usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_rwlock_t__bindgen_ty_1 ) , "::" , stringify ! ( __pad2
+                ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlock_t__bindgen_ty_1 ) ) .
+                __flags as * const _ as usize } , 48usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                pthread_rwlock_t__bindgen_ty_1 ) , "::" , stringify ! (
+                __flags ) ));
+}
+impl Clone for pthread_rwlock_t__bindgen_ty_1 {
+    fn clone(&self) -> Self { *self }
+}
+#[test]
+fn bindgen_test_layout_pthread_rwlock_t() {
+    assert_eq!(::std::mem::size_of::<pthread_rwlock_t>() , 56usize , concat !
+               ( "Size of: " , stringify ! ( pthread_rwlock_t ) ));
+    assert_eq! (::std::mem::align_of::<pthread_rwlock_t>() , 8usize , concat !
+                ( "Alignment of " , stringify ! ( pthread_rwlock_t ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlock_t ) ) . __data as * const
+                _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_rwlock_t ) ,
+                "::" , stringify ! ( __data ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlock_t ) ) . __size as * const
+                _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_rwlock_t ) ,
+                "::" , stringify ! ( __size ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlock_t ) ) . __align as * const
+                _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_rwlock_t ) ,
+                "::" , stringify ! ( __align ) ));
+}
+impl Clone for pthread_rwlock_t {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct pthread_rwlockattr_t {
+    pub __size: __BindgenUnionField<[::std::os::raw::c_char; 8usize]>,
+    pub __align: __BindgenUnionField<::std::os::raw::c_long>,
+    pub bindgen_union_field: u64,
+}
+#[test]
+fn bindgen_test_layout_pthread_rwlockattr_t() {
+    assert_eq!(::std::mem::size_of::<pthread_rwlockattr_t>() , 8usize , concat
+               ! ( "Size of: " , stringify ! ( pthread_rwlockattr_t ) ));
+    assert_eq! (::std::mem::align_of::<pthread_rwlockattr_t>() , 8usize ,
+                concat ! (
+                "Alignment of " , stringify ! ( pthread_rwlockattr_t ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlockattr_t ) ) . __size as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_rwlockattr_t )
+                , "::" , stringify ! ( __size ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_rwlockattr_t ) ) . __align as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_rwlockattr_t )
+                , "::" , stringify ! ( __align ) ));
+}
+impl Clone for pthread_rwlockattr_t {
+    fn clone(&self) -> Self { *self }
+}
+pub type pthread_spinlock_t = ::std::os::raw::c_int;
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct pthread_barrier_t {
+    pub __size: __BindgenUnionField<[::std::os::raw::c_char; 32usize]>,
+    pub __align: __BindgenUnionField<::std::os::raw::c_long>,
+    pub bindgen_union_field: [u64; 4usize],
+}
+#[test]
+fn bindgen_test_layout_pthread_barrier_t() {
+    assert_eq!(::std::mem::size_of::<pthread_barrier_t>() , 32usize , concat !
+               ( "Size of: " , stringify ! ( pthread_barrier_t ) ));
+    assert_eq! (::std::mem::align_of::<pthread_barrier_t>() , 8usize , concat
+                ! ( "Alignment of " , stringify ! ( pthread_barrier_t ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_barrier_t ) ) . __size as * const
+                _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_barrier_t ) ,
+                "::" , stringify ! ( __size ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_barrier_t ) ) . __align as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_barrier_t ) ,
+                "::" , stringify ! ( __align ) ));
+}
+impl Clone for pthread_barrier_t {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct pthread_barrierattr_t {
+    pub __size: __BindgenUnionField<[::std::os::raw::c_char; 4usize]>,
+    pub __align: __BindgenUnionField<::std::os::raw::c_int>,
+    pub bindgen_union_field: u32,
+}
+#[test]
+fn bindgen_test_layout_pthread_barrierattr_t() {
+    assert_eq!(::std::mem::size_of::<pthread_barrierattr_t>() , 4usize ,
+               concat ! ( "Size of: " , stringify ! ( pthread_barrierattr_t )
+               ));
+    assert_eq! (::std::mem::align_of::<pthread_barrierattr_t>() , 4usize ,
+                concat ! (
+                "Alignment of " , stringify ! ( pthread_barrierattr_t ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_barrierattr_t ) ) . __size as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_barrierattr_t )
+                , "::" , stringify ! ( __size ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const pthread_barrierattr_t ) ) . __align as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( pthread_barrierattr_t )
+                , "::" , stringify ! ( __align ) ));
+}
+impl Clone for pthread_barrierattr_t {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Copy)]
+pub struct iovec {
+    pub iov_base: *mut ::std::os::raw::c_void,
+    pub iov_len: usize,
+}
+#[test]
+fn bindgen_test_layout_iovec() {
+    assert_eq!(::std::mem::size_of::<iovec>() , 16usize , concat ! (
+               "Size of: " , stringify ! ( iovec ) ));
+    assert_eq! (::std::mem::align_of::<iovec>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( iovec ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const iovec ) ) . iov_base as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( iovec ) , "::" ,
+                stringify ! ( iov_base ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const iovec ) ) . iov_len as * const _ as usize
+                } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( iovec ) , "::" ,
+                stringify ! ( iov_len ) ));
+}
+impl Clone for iovec {
+    fn clone(&self) -> Self { *self }
+}
+impl Default for iovec {
+    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
+}
+extern "C" {
+    pub fn readv(__fd: ::std::os::raw::c_int, __iovec: *const iovec,
+                 __count: ::std::os::raw::c_int) -> isize;
+}
+extern "C" {
+    pub fn writev(__fd: ::std::os::raw::c_int, __iovec: *const iovec,
+                  __count: ::std::os::raw::c_int) -> isize;
+}
+extern "C" {
+    pub fn preadv(__fd: ::std::os::raw::c_int, __iovec: *const iovec,
+                  __count: ::std::os::raw::c_int, __offset: __off_t) -> isize;
+}
+extern "C" {
+    pub fn pwritev(__fd: ::std::os::raw::c_int, __iovec: *const iovec,
+                   __count: ::std::os::raw::c_int, __offset: __off_t)
+     -> isize;
+}
+pub type socklen_t = __socklen_t;
+pub const __socket_type_SOCK_STREAM: __socket_type = 1;
+pub const __socket_type_SOCK_DGRAM: __socket_type = 2;
+pub const __socket_type_SOCK_RAW: __socket_type = 3;
+pub const __socket_type_SOCK_RDM: __socket_type = 4;
+pub const __socket_type_SOCK_SEQPACKET: __socket_type = 5;
+pub const __socket_type_SOCK_DCCP: __socket_type = 6;
+pub const __socket_type_SOCK_PACKET: __socket_type = 10;
+pub const __socket_type_SOCK_CLOEXEC: __socket_type = 524288;
+pub const __socket_type_SOCK_NONBLOCK: __socket_type = 2048;
+pub type __socket_type = ::std::os::raw::c_uint;
+pub type sa_family_t = ::std::os::raw::c_ushort;
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct sockaddr {
+    pub sa_family: sa_family_t,
+    pub sa_data: [::std::os::raw::c_char; 14usize],
+}
+#[test]
+fn bindgen_test_layout_sockaddr() {
+    assert_eq!(::std::mem::size_of::<sockaddr>() , 16usize , concat ! (
+               "Size of: " , stringify ! ( sockaddr ) ));
+    assert_eq! (::std::mem::align_of::<sockaddr>() , 2usize , concat ! (
+                "Alignment of " , stringify ! ( sockaddr ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sockaddr ) ) . sa_family as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( sockaddr ) , "::" ,
+                stringify ! ( sa_family ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sockaddr ) ) . sa_data as * const _ as
+                usize } , 2usize , concat ! (
+                "Alignment of field: " , stringify ! ( sockaddr ) , "::" ,
+                stringify ! ( sa_data ) ));
+}
+impl Clone for sockaddr {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+pub struct sockaddr_storage {
+    pub ss_family: sa_family_t,
+    pub __ss_padding: [::std::os::raw::c_char; 118usize],
+    pub __ss_align: ::std::os::raw::c_ulong,
+}
+#[test]
+fn bindgen_test_layout_sockaddr_storage() {
+    assert_eq!(::std::mem::size_of::<sockaddr_storage>() , 128usize , concat !
+               ( "Size of: " , stringify ! ( sockaddr_storage ) ));
+    assert_eq! (::std::mem::align_of::<sockaddr_storage>() , 8usize , concat !
+                ( "Alignment of " , stringify ! ( sockaddr_storage ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sockaddr_storage ) ) . ss_family as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( sockaddr_storage ) ,
+                "::" , stringify ! ( ss_family ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sockaddr_storage ) ) . __ss_padding as *
+                const _ as usize } , 2usize , concat ! (
+                "Alignment of field: " , stringify ! ( sockaddr_storage ) ,
+                "::" , stringify ! ( __ss_padding ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sockaddr_storage ) ) . __ss_align as *
+                const _ as usize } , 120usize , concat ! (
+                "Alignment of field: " , stringify ! ( sockaddr_storage ) ,
+                "::" , stringify ! ( __ss_align ) ));
+}
+impl Default for sockaddr_storage {
+    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
+}
+pub const MSG_OOB: _bindgen_ty_1 = 1;
+pub const MSG_PEEK: _bindgen_ty_1 = 2;
+pub const MSG_DONTROUTE: _bindgen_ty_1 = 4;
+pub const MSG_CTRUNC: _bindgen_ty_1 = 8;
+pub const MSG_PROXY: _bindgen_ty_1 = 16;
+pub const MSG_TRUNC: _bindgen_ty_1 = 32;
+pub const MSG_DONTWAIT: _bindgen_ty_1 = 64;
+pub const MSG_EOR: _bindgen_ty_1 = 128;
+pub const MSG_WAITALL: _bindgen_ty_1 = 256;
+pub const MSG_FIN: _bindgen_ty_1 = 512;
+pub const MSG_SYN: _bindgen_ty_1 = 1024;
+pub const MSG_CONFIRM: _bindgen_ty_1 = 2048;
+pub const MSG_RST: _bindgen_ty_1 = 4096;
+pub const MSG_ERRQUEUE: _bindgen_ty_1 = 8192;
+pub const MSG_NOSIGNAL: _bindgen_ty_1 = 16384;
+pub const MSG_MORE: _bindgen_ty_1 = 32768;
+pub const MSG_WAITFORONE: _bindgen_ty_1 = 65536;
+pub const MSG_FASTOPEN: _bindgen_ty_1 = 536870912;
+pub const MSG_CMSG_CLOEXEC: _bindgen_ty_1 = 1073741824;
+pub type _bindgen_ty_1 = ::std::os::raw::c_uint;
+#[repr(C)]
+#[derive(Debug, Copy)]
+pub struct msghdr {
+    pub msg_name: *mut ::std::os::raw::c_void,
+    pub msg_namelen: socklen_t,
+    pub msg_iov: *mut iovec,
+    pub msg_iovlen: usize,
+    pub msg_control: *mut ::std::os::raw::c_void,
+    pub msg_controllen: usize,
+    pub msg_flags: ::std::os::raw::c_int,
+}
+#[test]
+fn bindgen_test_layout_msghdr() {
+    assert_eq!(::std::mem::size_of::<msghdr>() , 56usize , concat ! (
+               "Size of: " , stringify ! ( msghdr ) ));
+    assert_eq! (::std::mem::align_of::<msghdr>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( msghdr ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const msghdr ) ) . msg_name as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( msghdr ) , "::" ,
+                stringify ! ( msg_name ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const msghdr ) ) . msg_namelen as * const _ as
+                usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( msghdr ) , "::" ,
+                stringify ! ( msg_namelen ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const msghdr ) ) . msg_iov as * const _ as
+                usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( msghdr ) , "::" ,
+                stringify ! ( msg_iov ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const msghdr ) ) . msg_iovlen as * const _ as
+                usize } , 24usize , concat ! (
+                "Alignment of field: " , stringify ! ( msghdr ) , "::" ,
+                stringify ! ( msg_iovlen ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const msghdr ) ) . msg_control as * const _ as
+                usize } , 32usize , concat ! (
+                "Alignment of field: " , stringify ! ( msghdr ) , "::" ,
+                stringify ! ( msg_control ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const msghdr ) ) . msg_controllen as * const _
+                as usize } , 40usize , concat ! (
+                "Alignment of field: " , stringify ! ( msghdr ) , "::" ,
+                stringify ! ( msg_controllen ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const msghdr ) ) . msg_flags as * const _ as
+                usize } , 48usize , concat ! (
+                "Alignment of field: " , stringify ! ( msghdr ) , "::" ,
+                stringify ! ( msg_flags ) ));
+}
+impl Clone for msghdr {
+    fn clone(&self) -> Self { *self }
+}
+impl Default for msghdr {
+    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct cmsghdr {
+    pub cmsg_len: usize,
+    pub cmsg_level: ::std::os::raw::c_int,
+    pub cmsg_type: ::std::os::raw::c_int,
+    pub __cmsg_data: __IncompleteArrayField<::std::os::raw::c_uchar>,
+}
+#[test]
+fn bindgen_test_layout_cmsghdr() {
+    assert_eq!(::std::mem::size_of::<cmsghdr>() , 16usize , concat ! (
+               "Size of: " , stringify ! ( cmsghdr ) ));
+    assert_eq! (::std::mem::align_of::<cmsghdr>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( cmsghdr ) ));
+}
+impl Clone for cmsghdr {
+    fn clone(&self) -> Self { *self }
+}
+extern "C" {
+    pub fn __cmsg_nxthdr(__mhdr: *mut msghdr, __cmsg: *mut cmsghdr)
+     -> *mut cmsghdr;
+}
+pub const SCM_RIGHTS: _bindgen_ty_2 = 1;
+pub type _bindgen_ty_2 = ::std::os::raw::c_uint;
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct linger {
+    pub l_onoff: ::std::os::raw::c_int,
+    pub l_linger: ::std::os::raw::c_int,
+}
+#[test]
+fn bindgen_test_layout_linger() {
+    assert_eq!(::std::mem::size_of::<linger>() , 8usize , concat ! (
+               "Size of: " , stringify ! ( linger ) ));
+    assert_eq! (::std::mem::align_of::<linger>() , 4usize , concat ! (
+                "Alignment of " , stringify ! ( linger ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const linger ) ) . l_onoff as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( linger ) , "::" ,
+                stringify ! ( l_onoff ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const linger ) ) . l_linger as * const _ as
+                usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( linger ) , "::" ,
+                stringify ! ( l_linger ) ));
+}
+impl Clone for linger {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct osockaddr {
+    pub sa_family: ::std::os::raw::c_ushort,
+    pub sa_data: [::std::os::raw::c_uchar; 14usize],
+}
+#[test]
+fn bindgen_test_layout_osockaddr() {
+    assert_eq!(::std::mem::size_of::<osockaddr>() , 16usize , concat ! (
+               "Size of: " , stringify ! ( osockaddr ) ));
+    assert_eq! (::std::mem::align_of::<osockaddr>() , 2usize , concat ! (
+                "Alignment of " , stringify ! ( osockaddr ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const osockaddr ) ) . sa_family as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( osockaddr ) , "::" ,
+                stringify ! ( sa_family ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const osockaddr ) ) . sa_data as * const _ as
+                usize } , 2usize , concat ! (
+                "Alignment of field: " , stringify ! ( osockaddr ) , "::" ,
+                stringify ! ( sa_data ) ));
+}
+impl Clone for osockaddr {
+    fn clone(&self) -> Self { *self }
+}
+pub const SHUT_RD: _bindgen_ty_3 = 0;
+pub const SHUT_WR: _bindgen_ty_3 = 1;
+pub const SHUT_RDWR: _bindgen_ty_3 = 2;
+pub type _bindgen_ty_3 = ::std::os::raw::c_uint;
+extern "C" {
+    pub fn socket(__domain: ::std::os::raw::c_int,
+                  __type: ::std::os::raw::c_int,
+                  __protocol: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn socketpair(__domain: ::std::os::raw::c_int,
+                      __type: ::std::os::raw::c_int,
+                      __protocol: ::std::os::raw::c_int,
+                      __fds: *mut ::std::os::raw::c_int)
+     -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn bind(__fd: ::std::os::raw::c_int, __addr: *const sockaddr,
+                __len: socklen_t) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn getsockname(__fd: ::std::os::raw::c_int, __addr: *mut sockaddr,
+                       __len: *mut socklen_t) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn connect(__fd: ::std::os::raw::c_int, __addr: *const sockaddr,
+                   __len: socklen_t) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn getpeername(__fd: ::std::os::raw::c_int, __addr: *mut sockaddr,
+                       __len: *mut socklen_t) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn send(__fd: ::std::os::raw::c_int,
+                __buf: *const ::std::os::raw::c_void, __n: usize,
+                __flags: ::std::os::raw::c_int) -> isize;
+}
+extern "C" {
+    pub fn recv(__fd: ::std::os::raw::c_int,
+                __buf: *mut ::std::os::raw::c_void, __n: usize,
+                __flags: ::std::os::raw::c_int) -> isize;
+}
+extern "C" {
+    pub fn sendto(__fd: ::std::os::raw::c_int,
+                  __buf: *const ::std::os::raw::c_void, __n: usize,
+                  __flags: ::std::os::raw::c_int, __addr: *const sockaddr,
+                  __addr_len: socklen_t) -> isize;
+}
+extern "C" {
+    pub fn recvfrom(__fd: ::std::os::raw::c_int,
+                    __buf: *mut ::std::os::raw::c_void, __n: usize,
+                    __flags: ::std::os::raw::c_int, __addr: *mut sockaddr,
+                    __addr_len: *mut socklen_t) -> isize;
+}
+extern "C" {
+    pub fn sendmsg(__fd: ::std::os::raw::c_int, __message: *const msghdr,
+                   __flags: ::std::os::raw::c_int) -> isize;
+}
+extern "C" {
+    pub fn recvmsg(__fd: ::std::os::raw::c_int, __message: *mut msghdr,
+                   __flags: ::std::os::raw::c_int) -> isize;
+}
+extern "C" {
+    pub fn getsockopt(__fd: ::std::os::raw::c_int,
+                      __level: ::std::os::raw::c_int,
+                      __optname: ::std::os::raw::c_int,
+                      __optval: *mut ::std::os::raw::c_void,
+                      __optlen: *mut socklen_t) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn setsockopt(__fd: ::std::os::raw::c_int,
+                      __level: ::std::os::raw::c_int,
+                      __optname: ::std::os::raw::c_int,
+                      __optval: *const ::std::os::raw::c_void,
+                      __optlen: socklen_t) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn listen(__fd: ::std::os::raw::c_int, __n: ::std::os::raw::c_int)
+     -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn accept(__fd: ::std::os::raw::c_int, __addr: *mut sockaddr,
+                  __addr_len: *mut socklen_t) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn shutdown(__fd: ::std::os::raw::c_int, __how: ::std::os::raw::c_int)
+     -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn sockatmark(__fd: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn isfdtype(__fd: ::std::os::raw::c_int,
+                    __fdtype: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct sync_serial_settings {
+    pub clock_rate: ::std::os::raw::c_uint,
+    pub clock_type: ::std::os::raw::c_uint,
+    pub loopback: ::std::os::raw::c_ushort,
+}
+#[test]
+fn bindgen_test_layout_sync_serial_settings() {
+    assert_eq!(::std::mem::size_of::<sync_serial_settings>() , 12usize ,
+               concat ! ( "Size of: " , stringify ! ( sync_serial_settings )
+               ));
+    assert_eq! (::std::mem::align_of::<sync_serial_settings>() , 4usize ,
+                concat ! (
+                "Alignment of " , stringify ! ( sync_serial_settings ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sync_serial_settings ) ) . clock_rate as
+                * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( sync_serial_settings )
+                , "::" , stringify ! ( clock_rate ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sync_serial_settings ) ) . clock_type as
+                * const _ as usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( sync_serial_settings )
+                , "::" , stringify ! ( clock_type ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sync_serial_settings ) ) . loopback as *
+                const _ as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( sync_serial_settings )
+                , "::" , stringify ! ( loopback ) ));
+}
+impl Clone for sync_serial_settings {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct te1_settings {
+    pub clock_rate: ::std::os::raw::c_uint,
+    pub clock_type: ::std::os::raw::c_uint,
+    pub loopback: ::std::os::raw::c_ushort,
+    pub slot_map: ::std::os::raw::c_uint,
+}
+#[test]
+fn bindgen_test_layout_te1_settings() {
+    assert_eq!(::std::mem::size_of::<te1_settings>() , 16usize , concat ! (
+               "Size of: " , stringify ! ( te1_settings ) ));
+    assert_eq! (::std::mem::align_of::<te1_settings>() , 4usize , concat ! (
+                "Alignment of " , stringify ! ( te1_settings ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const te1_settings ) ) . clock_rate as * const
+                _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( te1_settings ) , "::" ,
+                stringify ! ( clock_rate ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const te1_settings ) ) . clock_type as * const
+                _ as usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( te1_settings ) , "::" ,
+                stringify ! ( clock_type ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const te1_settings ) ) . loopback as * const _
+                as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( te1_settings ) , "::" ,
+                stringify ! ( loopback ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const te1_settings ) ) . slot_map as * const _
+                as usize } , 12usize , concat ! (
+                "Alignment of field: " , stringify ! ( te1_settings ) , "::" ,
+                stringify ! ( slot_map ) ));
+}
+impl Clone for te1_settings {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct raw_hdlc_proto {
+    pub encoding: ::std::os::raw::c_ushort,
+    pub parity: ::std::os::raw::c_ushort,
+}
+#[test]
+fn bindgen_test_layout_raw_hdlc_proto() {
+    assert_eq!(::std::mem::size_of::<raw_hdlc_proto>() , 4usize , concat ! (
+               "Size of: " , stringify ! ( raw_hdlc_proto ) ));
+    assert_eq! (::std::mem::align_of::<raw_hdlc_proto>() , 2usize , concat ! (
+                "Alignment of " , stringify ! ( raw_hdlc_proto ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const raw_hdlc_proto ) ) . encoding as * const
+                _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( raw_hdlc_proto ) , "::"
+                , stringify ! ( encoding ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const raw_hdlc_proto ) ) . parity as * const _
+                as usize } , 2usize , concat ! (
+                "Alignment of field: " , stringify ! ( raw_hdlc_proto ) , "::"
+                , stringify ! ( parity ) ));
+}
+impl Clone for raw_hdlc_proto {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct fr_proto {
+    pub t391: ::std::os::raw::c_uint,
+    pub t392: ::std::os::raw::c_uint,
+    pub n391: ::std::os::raw::c_uint,
+    pub n392: ::std::os::raw::c_uint,
+    pub n393: ::std::os::raw::c_uint,
+    pub lmi: ::std::os::raw::c_ushort,
+    pub dce: ::std::os::raw::c_ushort,
+}
+#[test]
+fn bindgen_test_layout_fr_proto() {
+    assert_eq!(::std::mem::size_of::<fr_proto>() , 24usize , concat ! (
+               "Size of: " , stringify ! ( fr_proto ) ));
+    assert_eq! (::std::mem::align_of::<fr_proto>() , 4usize , concat ! (
+                "Alignment of " , stringify ! ( fr_proto ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const fr_proto ) ) . t391 as * const _ as usize
+                } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( fr_proto ) , "::" ,
+                stringify ! ( t391 ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const fr_proto ) ) . t392 as * const _ as usize
+                } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( fr_proto ) , "::" ,
+                stringify ! ( t392 ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const fr_proto ) ) . n391 as * const _ as usize
+                } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( fr_proto ) , "::" ,
+                stringify ! ( n391 ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const fr_proto ) ) . n392 as * const _ as usize
+                } , 12usize , concat ! (
+                "Alignment of field: " , stringify ! ( fr_proto ) , "::" ,
+                stringify ! ( n392 ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const fr_proto ) ) . n393 as * const _ as usize
+                } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( fr_proto ) , "::" ,
+                stringify ! ( n393 ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const fr_proto ) ) . lmi as * const _ as usize
+                } , 20usize , concat ! (
+                "Alignment of field: " , stringify ! ( fr_proto ) , "::" ,
+                stringify ! ( lmi ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const fr_proto ) ) . dce as * const _ as usize
+                } , 22usize , concat ! (
+                "Alignment of field: " , stringify ! ( fr_proto ) , "::" ,
+                stringify ! ( dce ) ));
+}
+impl Clone for fr_proto {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct fr_proto_pvc {
+    pub dlci: ::std::os::raw::c_uint,
+}
+#[test]
+fn bindgen_test_layout_fr_proto_pvc() {
+    assert_eq!(::std::mem::size_of::<fr_proto_pvc>() , 4usize , concat ! (
+               "Size of: " , stringify ! ( fr_proto_pvc ) ));
+    assert_eq! (::std::mem::align_of::<fr_proto_pvc>() , 4usize , concat ! (
+                "Alignment of " , stringify ! ( fr_proto_pvc ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const fr_proto_pvc ) ) . dlci as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( fr_proto_pvc ) , "::" ,
+                stringify ! ( dlci ) ));
+}
+impl Clone for fr_proto_pvc {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct fr_proto_pvc_info {
+    pub dlci: ::std::os::raw::c_uint,
+    pub master: [::std::os::raw::c_char; 16usize],
+}
+#[test]
+fn bindgen_test_layout_fr_proto_pvc_info() {
+    assert_eq!(::std::mem::size_of::<fr_proto_pvc_info>() , 20usize , concat !
+               ( "Size of: " , stringify ! ( fr_proto_pvc_info ) ));
+    assert_eq! (::std::mem::align_of::<fr_proto_pvc_info>() , 4usize , concat
+                ! ( "Alignment of " , stringify ! ( fr_proto_pvc_info ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const fr_proto_pvc_info ) ) . dlci as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( fr_proto_pvc_info ) ,
+                "::" , stringify ! ( dlci ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const fr_proto_pvc_info ) ) . master as * const
+                _ as usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( fr_proto_pvc_info ) ,
+                "::" , stringify ! ( master ) ));
+}
+impl Clone for fr_proto_pvc_info {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct cisco_proto {
+    pub interval: ::std::os::raw::c_uint,
+    pub timeout: ::std::os::raw::c_uint,
+}
+#[test]
+fn bindgen_test_layout_cisco_proto() {
+    assert_eq!(::std::mem::size_of::<cisco_proto>() , 8usize , concat ! (
+               "Size of: " , stringify ! ( cisco_proto ) ));
+    assert_eq! (::std::mem::align_of::<cisco_proto>() , 4usize , concat ! (
+                "Alignment of " , stringify ! ( cisco_proto ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const cisco_proto ) ) . interval as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( cisco_proto ) , "::" ,
+                stringify ! ( interval ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const cisco_proto ) ) . timeout as * const _ as
+                usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( cisco_proto ) , "::" ,
+                stringify ! ( timeout ) ));
+}
+impl Clone for cisco_proto {
+    fn clone(&self) -> Self { *self }
+}
+pub const net_device_flags_IFF_UP: net_device_flags = 1;
+pub const net_device_flags_IFF_BROADCAST: net_device_flags = 2;
+pub const net_device_flags_IFF_DEBUG: net_device_flags = 4;
+pub const net_device_flags_IFF_LOOPBACK: net_device_flags = 8;
+pub const net_device_flags_IFF_POINTOPOINT: net_device_flags = 16;
+pub const net_device_flags_IFF_NOTRAILERS: net_device_flags = 32;
+pub const net_device_flags_IFF_RUNNING: net_device_flags = 64;
+pub const net_device_flags_IFF_NOARP: net_device_flags = 128;
+pub const net_device_flags_IFF_PROMISC: net_device_flags = 256;
+pub const net_device_flags_IFF_ALLMULTI: net_device_flags = 512;
+pub const net_device_flags_IFF_MASTER: net_device_flags = 1024;
+pub const net_device_flags_IFF_SLAVE: net_device_flags = 2048;
+pub const net_device_flags_IFF_MULTICAST: net_device_flags = 4096;
+pub const net_device_flags_IFF_PORTSEL: net_device_flags = 8192;
+pub const net_device_flags_IFF_AUTOMEDIA: net_device_flags = 16384;
+pub const net_device_flags_IFF_DYNAMIC: net_device_flags = 32768;
+/**
+ * enum net_device_flags - &struct net_device flags
+ *
+ * These are the &struct net_device flags, they can be set by drivers, the
+ * kernel and some can be triggered by userspace. Userspace can query and
+ * set these flags using userspace utilities but there is also a sysfs
+ * entry available for all dev flags which can be queried and set. These flags
+ * are shared for all types of net_devices. The sysfs entries are available
+ * via /sys/class/net/<dev>/flags. Flags which can be toggled through sysfs
+ * are annotated below, note that only a few flags can be toggled and some
+ * other flags are always preserved from the original net_device flags
+ * even if you try to set them via sysfs. Flags which are always preserved
+ * are kept under the flag grouping @IFF_VOLATILE. Flags which are __volatile__
+ * are annotated below as such.
+ *
+ * You should have a pretty good reason to be extending these flags.
+ *
+ * @IFF_UP: interface is up. Can be toggled through sysfs.
+ * @IFF_BROADCAST: broadcast address valid. Volatile.
+ * @IFF_DEBUG: turn on debugging. Can be toggled through sysfs.
+ * @IFF_LOOPBACK: is a loopback net. Volatile.
+ * @IFF_POINTOPOINT: interface is has p-p link. Volatile.
+ * @IFF_NOTRAILERS: avoid use of trailers. Can be toggled through sysfs.
+ *	Volatile.
+ * @IFF_RUNNING: interface RFC2863 OPER_UP. Volatile.
+ * @IFF_NOARP: no ARP protocol. Can be toggled through sysfs. Volatile.
+ * @IFF_PROMISC: receive all packets. Can be toggled through sysfs.
+ * @IFF_ALLMULTI: receive all multicast packets. Can be toggled through
+ *	sysfs.
+ * @IFF_MASTER: master of a load balancer. Volatile.
+ * @IFF_SLAVE: slave of a load balancer. Volatile.
+ * @IFF_MULTICAST: Supports multicast. Can be toggled through sysfs.
+ * @IFF_PORTSEL: can set media type. Can be toggled through sysfs.
+ * @IFF_AUTOMEDIA: auto media select active. Can be toggled through sysfs.
+ * @IFF_DYNAMIC: dialup device with changing addresses. Can be toggled
+ *	through sysfs.
+ * @IFF_LOWER_UP: driver signals L1 up. Volatile.
+ * @IFF_DORMANT: driver signals dormant. Volatile.
+ * @IFF_ECHO: echo sent packets. Volatile.
+ */
+pub type net_device_flags = ::std::os::raw::c_uint;
+pub const IF_OPER_UNKNOWN: _bindgen_ty_4 = 0;
+pub const IF_OPER_NOTPRESENT: _bindgen_ty_4 = 1;
+pub const IF_OPER_DOWN: _bindgen_ty_4 = 2;
+pub const IF_OPER_LOWERLAYERDOWN: _bindgen_ty_4 = 3;
+pub const IF_OPER_TESTING: _bindgen_ty_4 = 4;
+pub const IF_OPER_DORMANT: _bindgen_ty_4 = 5;
+pub const IF_OPER_UP: _bindgen_ty_4 = 6;
+pub type _bindgen_ty_4 = ::std::os::raw::c_uint;
+pub const IF_LINK_MODE_DEFAULT: _bindgen_ty_5 = 0;
+pub const IF_LINK_MODE_DORMANT: _bindgen_ty_5 = 1;
+pub type _bindgen_ty_5 = ::std::os::raw::c_uint;
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct ifmap {
+    pub mem_start: ::std::os::raw::c_ulong,
+    pub mem_end: ::std::os::raw::c_ulong,
+    pub base_addr: ::std::os::raw::c_ushort,
+    pub irq: ::std::os::raw::c_uchar,
+    pub dma: ::std::os::raw::c_uchar,
+    pub port: ::std::os::raw::c_uchar,
+}
+#[test]
+fn bindgen_test_layout_ifmap() {
+    assert_eq!(::std::mem::size_of::<ifmap>() , 24usize , concat ! (
+               "Size of: " , stringify ! ( ifmap ) ));
+    assert_eq! (::std::mem::align_of::<ifmap>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( ifmap ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifmap ) ) . mem_start as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifmap ) , "::" ,
+                stringify ! ( mem_start ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifmap ) ) . mem_end as * const _ as usize
+                } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifmap ) , "::" ,
+                stringify ! ( mem_end ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifmap ) ) . base_addr as * const _ as
+                usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifmap ) , "::" ,
+                stringify ! ( base_addr ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifmap ) ) . irq as * const _ as usize } ,
+                18usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifmap ) , "::" ,
+                stringify ! ( irq ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifmap ) ) . dma as * const _ as usize } ,
+                19usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifmap ) , "::" ,
+                stringify ! ( dma ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifmap ) ) . port as * const _ as usize }
+                , 20usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifmap ) , "::" ,
+                stringify ! ( port ) ));
+}
+impl Clone for ifmap {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct if_settings {
+    pub type_: ::std::os::raw::c_uint,
+    pub size: ::std::os::raw::c_uint,
+    pub ifs_ifsu: if_settings__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct if_settings__bindgen_ty_1 {
+    pub raw_hdlc: __BindgenUnionField<*mut raw_hdlc_proto>,
+    pub cisco: __BindgenUnionField<*mut cisco_proto>,
+    pub fr: __BindgenUnionField<*mut fr_proto>,
+    pub fr_pvc: __BindgenUnionField<*mut fr_proto_pvc>,
+    pub fr_pvc_info: __BindgenUnionField<*mut fr_proto_pvc_info>,
+    pub sync: __BindgenUnionField<*mut sync_serial_settings>,
+    pub te1: __BindgenUnionField<*mut te1_settings>,
+    pub bindgen_union_field: u64,
+}
+#[test]
+fn bindgen_test_layout_if_settings__bindgen_ty_1() {
+    assert_eq!(::std::mem::size_of::<if_settings__bindgen_ty_1>() , 8usize ,
+               concat ! (
+               "Size of: " , stringify ! ( if_settings__bindgen_ty_1 ) ));
+    assert_eq! (::std::mem::align_of::<if_settings__bindgen_ty_1>() , 8usize ,
+                concat ! (
+                "Alignment of " , stringify ! ( if_settings__bindgen_ty_1 )
+                ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const if_settings__bindgen_ty_1 ) ) . raw_hdlc
+                as * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                if_settings__bindgen_ty_1 ) , "::" , stringify ! ( raw_hdlc )
+                ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const if_settings__bindgen_ty_1 ) ) . cisco as
+                * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                if_settings__bindgen_ty_1 ) , "::" , stringify ! ( cisco ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const if_settings__bindgen_ty_1 ) ) . fr as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                if_settings__bindgen_ty_1 ) , "::" , stringify ! ( fr ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const if_settings__bindgen_ty_1 ) ) . fr_pvc as
+                * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                if_settings__bindgen_ty_1 ) , "::" , stringify ! ( fr_pvc )
+                ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const if_settings__bindgen_ty_1 ) ) .
+                fr_pvc_info as * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                if_settings__bindgen_ty_1 ) , "::" , stringify ! ( fr_pvc_info
+                ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const if_settings__bindgen_ty_1 ) ) . sync as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                if_settings__bindgen_ty_1 ) , "::" , stringify ! ( sync ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const if_settings__bindgen_ty_1 ) ) . te1 as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                if_settings__bindgen_ty_1 ) , "::" , stringify ! ( te1 ) ));
+}
+impl Clone for if_settings__bindgen_ty_1 {
+    fn clone(&self) -> Self { *self }
+}
+#[test]
+fn bindgen_test_layout_if_settings() {
+    assert_eq!(::std::mem::size_of::<if_settings>() , 16usize , concat ! (
+               "Size of: " , stringify ! ( if_settings ) ));
+    assert_eq! (::std::mem::align_of::<if_settings>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( if_settings ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const if_settings ) ) . type_ as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( if_settings ) , "::" ,
+                stringify ! ( type_ ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const if_settings ) ) . size as * const _ as
+                usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( if_settings ) , "::" ,
+                stringify ! ( size ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const if_settings ) ) . ifs_ifsu as * const _
+                as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( if_settings ) , "::" ,
+                stringify ! ( ifs_ifsu ) ));
+}
+impl Clone for if_settings {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct ifreq {
+    pub ifr_ifrn: ifreq__bindgen_ty_1,
+    pub ifr_ifru: ifreq__bindgen_ty_2,
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct ifreq__bindgen_ty_1 {
+    pub ifrn_name: __BindgenUnionField<[::std::os::raw::c_uchar; 16usize]>,
+    pub bindgen_union_field: [u8; 16usize],
+}
+#[test]
+fn bindgen_test_layout_ifreq__bindgen_ty_1() {
+    assert_eq!(::std::mem::size_of::<ifreq__bindgen_ty_1>() , 16usize , concat
+               ! ( "Size of: " , stringify ! ( ifreq__bindgen_ty_1 ) ));
+    assert_eq! (::std::mem::align_of::<ifreq__bindgen_ty_1>() , 1usize ,
+                concat ! (
+                "Alignment of " , stringify ! ( ifreq__bindgen_ty_1 ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifreq__bindgen_ty_1 ) ) . ifrn_name as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifreq__bindgen_ty_1 ) ,
+                "::" , stringify ! ( ifrn_name ) ));
+}
+impl Clone for ifreq__bindgen_ty_1 {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct ifreq__bindgen_ty_2 {
+    pub ifru_addr: __BindgenUnionField<sockaddr>,
+    pub ifru_dstaddr: __BindgenUnionField<sockaddr>,
+    pub ifru_broadaddr: __BindgenUnionField<sockaddr>,
+    pub ifru_netmask: __BindgenUnionField<sockaddr>,
+    pub ifru_hwaddr: __BindgenUnionField<sockaddr>,
+    pub ifru_flags: __BindgenUnionField<::std::os::raw::c_short>,
+    pub ifru_ivalue: __BindgenUnionField<::std::os::raw::c_int>,
+    pub ifru_mtu: __BindgenUnionField<::std::os::raw::c_int>,
+    pub ifru_map: __BindgenUnionField<ifmap>,
+    pub ifru_slave: __BindgenUnionField<[::std::os::raw::c_char; 16usize]>,
+    pub ifru_newname: __BindgenUnionField<[::std::os::raw::c_char; 16usize]>,
+    pub ifru_data: __BindgenUnionField<*mut ::std::os::raw::c_void>,
+    pub ifru_settings: __BindgenUnionField<if_settings>,
+    pub bindgen_union_field: [u64; 3usize],
+}
+#[test]
+fn bindgen_test_layout_ifreq__bindgen_ty_2() {
+    assert_eq!(::std::mem::size_of::<ifreq__bindgen_ty_2>() , 24usize , concat
+               ! ( "Size of: " , stringify ! ( ifreq__bindgen_ty_2 ) ));
+    assert_eq! (::std::mem::align_of::<ifreq__bindgen_ty_2>() , 8usize ,
+                concat ! (
+                "Alignment of " , stringify ! ( ifreq__bindgen_ty_2 ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifreq__bindgen_ty_2 ) ) . ifru_addr as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifreq__bindgen_ty_2 ) ,
+                "::" , stringify ! ( ifru_addr ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifreq__bindgen_ty_2 ) ) . ifru_dstaddr as
+                * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifreq__bindgen_ty_2 ) ,
+                "::" , stringify ! ( ifru_dstaddr ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifreq__bindgen_ty_2 ) ) . ifru_broadaddr
+                as * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifreq__bindgen_ty_2 ) ,
+                "::" , stringify ! ( ifru_broadaddr ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifreq__bindgen_ty_2 ) ) . ifru_netmask as
+                * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifreq__bindgen_ty_2 ) ,
+                "::" , stringify ! ( ifru_netmask ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifreq__bindgen_ty_2 ) ) . ifru_hwaddr as
+                * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifreq__bindgen_ty_2 ) ,
+                "::" , stringify ! ( ifru_hwaddr ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifreq__bindgen_ty_2 ) ) . ifru_flags as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifreq__bindgen_ty_2 ) ,
+                "::" , stringify ! ( ifru_flags ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifreq__bindgen_ty_2 ) ) . ifru_ivalue as
+                * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifreq__bindgen_ty_2 ) ,
+                "::" , stringify ! ( ifru_ivalue ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifreq__bindgen_ty_2 ) ) . ifru_mtu as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifreq__bindgen_ty_2 ) ,
+                "::" , stringify ! ( ifru_mtu ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifreq__bindgen_ty_2 ) ) . ifru_map as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifreq__bindgen_ty_2 ) ,
+                "::" , stringify ! ( ifru_map ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifreq__bindgen_ty_2 ) ) . ifru_slave as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifreq__bindgen_ty_2 ) ,
+                "::" , stringify ! ( ifru_slave ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifreq__bindgen_ty_2 ) ) . ifru_newname as
+                * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifreq__bindgen_ty_2 ) ,
+                "::" , stringify ! ( ifru_newname ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifreq__bindgen_ty_2 ) ) . ifru_data as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifreq__bindgen_ty_2 ) ,
+                "::" , stringify ! ( ifru_data ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifreq__bindgen_ty_2 ) ) . ifru_settings
+                as * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifreq__bindgen_ty_2 ) ,
+                "::" , stringify ! ( ifru_settings ) ));
+}
+impl Clone for ifreq__bindgen_ty_2 {
+    fn clone(&self) -> Self { *self }
+}
+#[test]
+fn bindgen_test_layout_ifreq() {
+    assert_eq!(::std::mem::size_of::<ifreq>() , 40usize , concat ! (
+               "Size of: " , stringify ! ( ifreq ) ));
+    assert_eq! (::std::mem::align_of::<ifreq>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( ifreq ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifreq ) ) . ifr_ifrn as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifreq ) , "::" ,
+                stringify ! ( ifr_ifrn ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ifreq ) ) . ifr_ifru as * const _ as
+                usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( ifreq ) , "::" ,
+                stringify ! ( ifr_ifru ) ));
+}
+impl Clone for ifreq {
+    fn clone(&self) -> Self { *self }
+}
diff --git a/net_sys/src/inn.rs b/net_sys/src/inn.rs
new file mode 100644
index 0000000..0f84b16
--- /dev/null
+++ b/net_sys/src/inn.rs
@@ -0,0 +1,565 @@
+/* automatically generated by rust-bindgen */
+
+pub const __BITS_PER_LONG: ::std::os::raw::c_uint = 64;
+pub const __FD_SETSIZE: ::std::os::raw::c_uint = 1024;
+pub const __UAPI_DEF_IN_ADDR: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IN_IPPROTO: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IN_PKTINFO: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IP_MREQ: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_SOCKADDR_IN: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IN_CLASS: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IN6_ADDR: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IN6_ADDR_ALT: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_SOCKADDR_IN6: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IPV6_MREQ: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IPPROTO_V6: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IPV6_OPTIONS: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IN6_PKTINFO: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_IP6_MTUINFO: ::std::os::raw::c_uint = 1;
+pub const __UAPI_DEF_XATTR: ::std::os::raw::c_uint = 1;
+pub const _K_SS_MAXSIZE: ::std::os::raw::c_uint = 128;
+pub const IP_TOS: ::std::os::raw::c_uint = 1;
+pub const IP_TTL: ::std::os::raw::c_uint = 2;
+pub const IP_HDRINCL: ::std::os::raw::c_uint = 3;
+pub const IP_OPTIONS: ::std::os::raw::c_uint = 4;
+pub const IP_ROUTER_ALERT: ::std::os::raw::c_uint = 5;
+pub const IP_RECVOPTS: ::std::os::raw::c_uint = 6;
+pub const IP_RETOPTS: ::std::os::raw::c_uint = 7;
+pub const IP_PKTINFO: ::std::os::raw::c_uint = 8;
+pub const IP_PKTOPTIONS: ::std::os::raw::c_uint = 9;
+pub const IP_MTU_DISCOVER: ::std::os::raw::c_uint = 10;
+pub const IP_RECVERR: ::std::os::raw::c_uint = 11;
+pub const IP_RECVTTL: ::std::os::raw::c_uint = 12;
+pub const IP_RECVTOS: ::std::os::raw::c_uint = 13;
+pub const IP_MTU: ::std::os::raw::c_uint = 14;
+pub const IP_FREEBIND: ::std::os::raw::c_uint = 15;
+pub const IP_IPSEC_POLICY: ::std::os::raw::c_uint = 16;
+pub const IP_XFRM_POLICY: ::std::os::raw::c_uint = 17;
+pub const IP_PASSSEC: ::std::os::raw::c_uint = 18;
+pub const IP_TRANSPARENT: ::std::os::raw::c_uint = 19;
+pub const IP_RECVRETOPTS: ::std::os::raw::c_uint = 7;
+pub const IP_ORIGDSTADDR: ::std::os::raw::c_uint = 20;
+pub const IP_RECVORIGDSTADDR: ::std::os::raw::c_uint = 20;
+pub const IP_MINTTL: ::std::os::raw::c_uint = 21;
+pub const IP_NODEFRAG: ::std::os::raw::c_uint = 22;
+pub const IP_CHECKSUM: ::std::os::raw::c_uint = 23;
+pub const IP_BIND_ADDRESS_NO_PORT: ::std::os::raw::c_uint = 24;
+pub const IP_RECVFRAGSIZE: ::std::os::raw::c_uint = 25;
+pub const IP_PMTUDISC_DONT: ::std::os::raw::c_uint = 0;
+pub const IP_PMTUDISC_WANT: ::std::os::raw::c_uint = 1;
+pub const IP_PMTUDISC_DO: ::std::os::raw::c_uint = 2;
+pub const IP_PMTUDISC_PROBE: ::std::os::raw::c_uint = 3;
+pub const IP_PMTUDISC_INTERFACE: ::std::os::raw::c_uint = 4;
+pub const IP_PMTUDISC_OMIT: ::std::os::raw::c_uint = 5;
+pub const IP_MULTICAST_IF: ::std::os::raw::c_uint = 32;
+pub const IP_MULTICAST_TTL: ::std::os::raw::c_uint = 33;
+pub const IP_MULTICAST_LOOP: ::std::os::raw::c_uint = 34;
+pub const IP_ADD_MEMBERSHIP: ::std::os::raw::c_uint = 35;
+pub const IP_DROP_MEMBERSHIP: ::std::os::raw::c_uint = 36;
+pub const IP_UNBLOCK_SOURCE: ::std::os::raw::c_uint = 37;
+pub const IP_BLOCK_SOURCE: ::std::os::raw::c_uint = 38;
+pub const IP_ADD_SOURCE_MEMBERSHIP: ::std::os::raw::c_uint = 39;
+pub const IP_DROP_SOURCE_MEMBERSHIP: ::std::os::raw::c_uint = 40;
+pub const IP_MSFILTER: ::std::os::raw::c_uint = 41;
+pub const MCAST_JOIN_GROUP: ::std::os::raw::c_uint = 42;
+pub const MCAST_BLOCK_SOURCE: ::std::os::raw::c_uint = 43;
+pub const MCAST_UNBLOCK_SOURCE: ::std::os::raw::c_uint = 44;
+pub const MCAST_LEAVE_GROUP: ::std::os::raw::c_uint = 45;
+pub const MCAST_JOIN_SOURCE_GROUP: ::std::os::raw::c_uint = 46;
+pub const MCAST_LEAVE_SOURCE_GROUP: ::std::os::raw::c_uint = 47;
+pub const MCAST_MSFILTER: ::std::os::raw::c_uint = 48;
+pub const IP_MULTICAST_ALL: ::std::os::raw::c_uint = 49;
+pub const IP_UNICAST_IF: ::std::os::raw::c_uint = 50;
+pub const MCAST_EXCLUDE: ::std::os::raw::c_uint = 0;
+pub const MCAST_INCLUDE: ::std::os::raw::c_uint = 1;
+pub const IP_DEFAULT_MULTICAST_TTL: ::std::os::raw::c_uint = 1;
+pub const IP_DEFAULT_MULTICAST_LOOP: ::std::os::raw::c_uint = 1;
+pub const __SOCK_SIZE__: ::std::os::raw::c_uint = 16;
+pub const IN_CLASSA_NET: ::std::os::raw::c_uint = 4278190080;
+pub const IN_CLASSA_NSHIFT: ::std::os::raw::c_uint = 24;
+pub const IN_CLASSA_HOST: ::std::os::raw::c_uint = 16777215;
+pub const IN_CLASSA_MAX: ::std::os::raw::c_uint = 128;
+pub const IN_CLASSB_NET: ::std::os::raw::c_uint = 4294901760;
+pub const IN_CLASSB_NSHIFT: ::std::os::raw::c_uint = 16;
+pub const IN_CLASSB_HOST: ::std::os::raw::c_uint = 65535;
+pub const IN_CLASSB_MAX: ::std::os::raw::c_uint = 65536;
+pub const IN_CLASSC_NET: ::std::os::raw::c_uint = 4294967040;
+pub const IN_CLASSC_NSHIFT: ::std::os::raw::c_uint = 8;
+pub const IN_CLASSC_HOST: ::std::os::raw::c_uint = 255;
+pub const IN_MULTICAST_NET: ::std::os::raw::c_uint = 4026531840;
+pub const IN_LOOPBACKNET: ::std::os::raw::c_uint = 127;
+pub const INADDR_LOOPBACK: ::std::os::raw::c_uint = 2130706433;
+pub const INADDR_UNSPEC_GROUP: ::std::os::raw::c_uint = 3758096384;
+pub const INADDR_ALLHOSTS_GROUP: ::std::os::raw::c_uint = 3758096385;
+pub const INADDR_ALLRTRS_GROUP: ::std::os::raw::c_uint = 3758096386;
+pub const INADDR_MAX_LOCAL_GROUP: ::std::os::raw::c_uint = 3758096639;
+pub const __LITTLE_ENDIAN: ::std::os::raw::c_uint = 1234;
+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, Default, 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, Default, 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 __kernel_sa_family_t = ::std::os::raw::c_ushort;
+#[repr(C)]
+pub struct __kernel_sockaddr_storage {
+    pub ss_family: __kernel_sa_family_t,
+    pub __data: [::std::os::raw::c_char; 126usize],
+    pub __bindgen_align: [u64; 0usize],
+}
+#[test]
+fn bindgen_test_layout___kernel_sockaddr_storage() {
+    assert_eq!(::std::mem::size_of::<__kernel_sockaddr_storage>() , 128usize ,
+               concat ! (
+               "Size of: " , stringify ! ( __kernel_sockaddr_storage ) ));
+    assert_eq! (::std::mem::align_of::<__kernel_sockaddr_storage>() , 8usize ,
+                concat ! (
+                "Alignment of " , stringify ! ( __kernel_sockaddr_storage )
+                ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const __kernel_sockaddr_storage ) ) . ss_family
+                as * const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                __kernel_sockaddr_storage ) , "::" , stringify ! ( ss_family )
+                ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const __kernel_sockaddr_storage ) ) . __data as
+                * const _ as usize } , 2usize , concat ! (
+                "Alignment of field: " , stringify ! (
+                __kernel_sockaddr_storage ) , "::" , stringify ! ( __data )
+                ));
+}
+impl Default for __kernel_sockaddr_storage {
+    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
+}
+pub const IPPROTO_IP: _bindgen_ty_1 = 0;
+pub const IPPROTO_ICMP: _bindgen_ty_1 = 1;
+pub const IPPROTO_IGMP: _bindgen_ty_1 = 2;
+pub const IPPROTO_IPIP: _bindgen_ty_1 = 4;
+pub const IPPROTO_TCP: _bindgen_ty_1 = 6;
+pub const IPPROTO_EGP: _bindgen_ty_1 = 8;
+pub const IPPROTO_PUP: _bindgen_ty_1 = 12;
+pub const IPPROTO_UDP: _bindgen_ty_1 = 17;
+pub const IPPROTO_IDP: _bindgen_ty_1 = 22;
+pub const IPPROTO_TP: _bindgen_ty_1 = 29;
+pub const IPPROTO_DCCP: _bindgen_ty_1 = 33;
+pub const IPPROTO_IPV6: _bindgen_ty_1 = 41;
+pub const IPPROTO_RSVP: _bindgen_ty_1 = 46;
+pub const IPPROTO_GRE: _bindgen_ty_1 = 47;
+pub const IPPROTO_ESP: _bindgen_ty_1 = 50;
+pub const IPPROTO_AH: _bindgen_ty_1 = 51;
+pub const IPPROTO_MTP: _bindgen_ty_1 = 92;
+pub const IPPROTO_BEETPH: _bindgen_ty_1 = 94;
+pub const IPPROTO_ENCAP: _bindgen_ty_1 = 98;
+pub const IPPROTO_PIM: _bindgen_ty_1 = 103;
+pub const IPPROTO_COMP: _bindgen_ty_1 = 108;
+pub const IPPROTO_SCTP: _bindgen_ty_1 = 132;
+pub const IPPROTO_UDPLITE: _bindgen_ty_1 = 136;
+pub const IPPROTO_MPLS: _bindgen_ty_1 = 137;
+pub const IPPROTO_RAW: _bindgen_ty_1 = 255;
+pub const IPPROTO_MAX: _bindgen_ty_1 = 256;
+pub type _bindgen_ty_1 = ::std::os::raw::c_uint;
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct in_addr {
+    pub s_addr: __be32,
+}
+#[test]
+fn bindgen_test_layout_in_addr() {
+    assert_eq!(::std::mem::size_of::<in_addr>() , 4usize , concat ! (
+               "Size of: " , stringify ! ( in_addr ) ));
+    assert_eq! (::std::mem::align_of::<in_addr>() , 4usize , concat ! (
+                "Alignment of " , stringify ! ( in_addr ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const in_addr ) ) . s_addr as * const _ as
+                usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( in_addr ) , "::" ,
+                stringify ! ( s_addr ) ));
+}
+impl Clone for in_addr {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct ip_mreq {
+    pub imr_multiaddr: in_addr,
+    pub imr_interface: in_addr,
+}
+#[test]
+fn bindgen_test_layout_ip_mreq() {
+    assert_eq!(::std::mem::size_of::<ip_mreq>() , 8usize , concat ! (
+               "Size of: " , stringify ! ( ip_mreq ) ));
+    assert_eq! (::std::mem::align_of::<ip_mreq>() , 4usize , concat ! (
+                "Alignment of " , stringify ! ( ip_mreq ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ip_mreq ) ) . imr_multiaddr as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ip_mreq ) , "::" ,
+                stringify ! ( imr_multiaddr ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ip_mreq ) ) . imr_interface as * const _
+                as usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( ip_mreq ) , "::" ,
+                stringify ! ( imr_interface ) ));
+}
+impl Clone for ip_mreq {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct ip_mreqn {
+    pub imr_multiaddr: in_addr,
+    pub imr_address: in_addr,
+    pub imr_ifindex: ::std::os::raw::c_int,
+}
+#[test]
+fn bindgen_test_layout_ip_mreqn() {
+    assert_eq!(::std::mem::size_of::<ip_mreqn>() , 12usize , concat ! (
+               "Size of: " , stringify ! ( ip_mreqn ) ));
+    assert_eq! (::std::mem::align_of::<ip_mreqn>() , 4usize , concat ! (
+                "Alignment of " , stringify ! ( ip_mreqn ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ip_mreqn ) ) . imr_multiaddr as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ip_mreqn ) , "::" ,
+                stringify ! ( imr_multiaddr ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ip_mreqn ) ) . imr_address as * const _
+                as usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( ip_mreqn ) , "::" ,
+                stringify ! ( imr_address ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ip_mreqn ) ) . imr_ifindex as * const _
+                as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( ip_mreqn ) , "::" ,
+                stringify ! ( imr_ifindex ) ));
+}
+impl Clone for ip_mreqn {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct ip_mreq_source {
+    pub imr_multiaddr: __be32,
+    pub imr_interface: __be32,
+    pub imr_sourceaddr: __be32,
+}
+#[test]
+fn bindgen_test_layout_ip_mreq_source() {
+    assert_eq!(::std::mem::size_of::<ip_mreq_source>() , 12usize , concat ! (
+               "Size of: " , stringify ! ( ip_mreq_source ) ));
+    assert_eq! (::std::mem::align_of::<ip_mreq_source>() , 4usize , concat ! (
+                "Alignment of " , stringify ! ( ip_mreq_source ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ip_mreq_source ) ) . imr_multiaddr as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ip_mreq_source ) , "::"
+                , stringify ! ( imr_multiaddr ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ip_mreq_source ) ) . imr_interface as *
+                const _ as usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( ip_mreq_source ) , "::"
+                , stringify ! ( imr_interface ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ip_mreq_source ) ) . imr_sourceaddr as *
+                const _ as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( ip_mreq_source ) , "::"
+                , stringify ! ( imr_sourceaddr ) ));
+}
+impl Clone for ip_mreq_source {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct ip_msfilter {
+    pub imsf_multiaddr: __be32,
+    pub imsf_interface: __be32,
+    pub imsf_fmode: __u32,
+    pub imsf_numsrc: __u32,
+    pub imsf_slist: [__be32; 1usize],
+}
+#[test]
+fn bindgen_test_layout_ip_msfilter() {
+    assert_eq!(::std::mem::size_of::<ip_msfilter>() , 20usize , concat ! (
+               "Size of: " , stringify ! ( ip_msfilter ) ));
+    assert_eq! (::std::mem::align_of::<ip_msfilter>() , 4usize , concat ! (
+                "Alignment of " , stringify ! ( ip_msfilter ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ip_msfilter ) ) . imsf_multiaddr as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( ip_msfilter ) , "::" ,
+                stringify ! ( imsf_multiaddr ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ip_msfilter ) ) . imsf_interface as *
+                const _ as usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( ip_msfilter ) , "::" ,
+                stringify ! ( imsf_interface ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ip_msfilter ) ) . imsf_fmode as * const _
+                as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( ip_msfilter ) , "::" ,
+                stringify ! ( imsf_fmode ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ip_msfilter ) ) . imsf_numsrc as * const
+                _ as usize } , 12usize , concat ! (
+                "Alignment of field: " , stringify ! ( ip_msfilter ) , "::" ,
+                stringify ! ( imsf_numsrc ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const ip_msfilter ) ) . imsf_slist as * const _
+                as usize } , 16usize , concat ! (
+                "Alignment of field: " , stringify ! ( ip_msfilter ) , "::" ,
+                stringify ! ( imsf_slist ) ));
+}
+impl Clone for ip_msfilter {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+pub struct group_req {
+    pub gr_interface: __u32,
+    pub gr_group: __kernel_sockaddr_storage,
+}
+#[test]
+fn bindgen_test_layout_group_req() {
+    assert_eq!(::std::mem::size_of::<group_req>() , 136usize , concat ! (
+               "Size of: " , stringify ! ( group_req ) ));
+    assert_eq! (::std::mem::align_of::<group_req>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( group_req ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const group_req ) ) . gr_interface as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( group_req ) , "::" ,
+                stringify ! ( gr_interface ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const group_req ) ) . gr_group as * const _ as
+                usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( group_req ) , "::" ,
+                stringify ! ( gr_group ) ));
+}
+impl Default for group_req {
+    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
+}
+#[repr(C)]
+pub struct group_source_req {
+    pub gsr_interface: __u32,
+    pub gsr_group: __kernel_sockaddr_storage,
+    pub gsr_source: __kernel_sockaddr_storage,
+}
+#[test]
+fn bindgen_test_layout_group_source_req() {
+    assert_eq!(::std::mem::size_of::<group_source_req>() , 264usize , concat !
+               ( "Size of: " , stringify ! ( group_source_req ) ));
+    assert_eq! (::std::mem::align_of::<group_source_req>() , 8usize , concat !
+                ( "Alignment of " , stringify ! ( group_source_req ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const group_source_req ) ) . gsr_interface as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( group_source_req ) ,
+                "::" , stringify ! ( gsr_interface ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const group_source_req ) ) . gsr_group as *
+                const _ as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( group_source_req ) ,
+                "::" , stringify ! ( gsr_group ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const group_source_req ) ) . gsr_source as *
+                const _ as usize } , 136usize , concat ! (
+                "Alignment of field: " , stringify ! ( group_source_req ) ,
+                "::" , stringify ! ( gsr_source ) ));
+}
+impl Default for group_source_req {
+    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
+}
+#[repr(C)]
+pub struct group_filter {
+    pub gf_interface: __u32,
+    pub gf_group: __kernel_sockaddr_storage,
+    pub gf_fmode: __u32,
+    pub gf_numsrc: __u32,
+    pub gf_slist: [__kernel_sockaddr_storage; 1usize],
+}
+#[test]
+fn bindgen_test_layout_group_filter() {
+    assert_eq!(::std::mem::size_of::<group_filter>() , 272usize , concat ! (
+               "Size of: " , stringify ! ( group_filter ) ));
+    assert_eq! (::std::mem::align_of::<group_filter>() , 8usize , concat ! (
+                "Alignment of " , stringify ! ( group_filter ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const group_filter ) ) . gf_interface as *
+                const _ as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( group_filter ) , "::" ,
+                stringify ! ( gf_interface ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const group_filter ) ) . gf_group as * const _
+                as usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( group_filter ) , "::" ,
+                stringify ! ( gf_group ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const group_filter ) ) . gf_fmode as * const _
+                as usize } , 136usize , concat ! (
+                "Alignment of field: " , stringify ! ( group_filter ) , "::" ,
+                stringify ! ( gf_fmode ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const group_filter ) ) . gf_numsrc as * const _
+                as usize } , 140usize , concat ! (
+                "Alignment of field: " , stringify ! ( group_filter ) , "::" ,
+                stringify ! ( gf_numsrc ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const group_filter ) ) . gf_slist as * const _
+                as usize } , 144usize , concat ! (
+                "Alignment of field: " , stringify ! ( group_filter ) , "::" ,
+                stringify ! ( gf_slist ) ));
+}
+impl Default for group_filter {
+    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct in_pktinfo {
+    pub ipi_ifindex: ::std::os::raw::c_int,
+    pub ipi_spec_dst: in_addr,
+    pub ipi_addr: in_addr,
+}
+#[test]
+fn bindgen_test_layout_in_pktinfo() {
+    assert_eq!(::std::mem::size_of::<in_pktinfo>() , 12usize , concat ! (
+               "Size of: " , stringify ! ( in_pktinfo ) ));
+    assert_eq! (::std::mem::align_of::<in_pktinfo>() , 4usize , concat ! (
+                "Alignment of " , stringify ! ( in_pktinfo ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const in_pktinfo ) ) . ipi_ifindex as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( in_pktinfo ) , "::" ,
+                stringify ! ( ipi_ifindex ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const in_pktinfo ) ) . ipi_spec_dst as * const
+                _ as usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( in_pktinfo ) , "::" ,
+                stringify ! ( ipi_spec_dst ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const in_pktinfo ) ) . ipi_addr as * const _ as
+                usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( in_pktinfo ) , "::" ,
+                stringify ! ( ipi_addr ) ));
+}
+impl Clone for in_pktinfo {
+    fn clone(&self) -> Self { *self }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy)]
+pub struct sockaddr_in {
+    pub sin_family: __kernel_sa_family_t,
+    pub sin_port: __be16,
+    pub sin_addr: in_addr,
+    pub __pad: [::std::os::raw::c_uchar; 8usize],
+}
+#[test]
+fn bindgen_test_layout_sockaddr_in() {
+    assert_eq!(::std::mem::size_of::<sockaddr_in>() , 16usize , concat ! (
+               "Size of: " , stringify ! ( sockaddr_in ) ));
+    assert_eq! (::std::mem::align_of::<sockaddr_in>() , 4usize , concat ! (
+                "Alignment of " , stringify ! ( sockaddr_in ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sockaddr_in ) ) . sin_family as * const _
+                as usize } , 0usize , concat ! (
+                "Alignment of field: " , stringify ! ( sockaddr_in ) , "::" ,
+                stringify ! ( sin_family ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sockaddr_in ) ) . sin_port as * const _
+                as usize } , 2usize , concat ! (
+                "Alignment of field: " , stringify ! ( sockaddr_in ) , "::" ,
+                stringify ! ( sin_port ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sockaddr_in ) ) . sin_addr as * const _
+                as usize } , 4usize , concat ! (
+                "Alignment of field: " , stringify ! ( sockaddr_in ) , "::" ,
+                stringify ! ( sin_addr ) ));
+    assert_eq! (unsafe {
+                & ( * ( 0 as * const sockaddr_in ) ) . __pad as * const _ as
+                usize } , 8usize , concat ! (
+                "Alignment of field: " , stringify ! ( sockaddr_in ) , "::" ,
+                stringify ! ( __pad ) ));
+}
+impl Clone for sockaddr_in {
+    fn clone(&self) -> Self { *self }
+}
diff --git a/net_sys/src/lib.rs b/net_sys/src/lib.rs
new file mode 100644
index 0000000..05a29f4
--- /dev/null
+++ b/net_sys/src/lib.rs
@@ -0,0 +1,60 @@
+// Copyright TUNTAP, 2017 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#![allow(non_upper_case_globals)]
+#![allow(non_camel_case_types)]
+#![allow(non_snake_case)]
+
+#[macro_use]
+extern crate sys_util;
+
+// generated with bindgen /usr/include/linux/if.h --no-unstable-rust
+// --constified-enum '*' --with-derive-default -- -D __UAPI_DEF_IF_IFNAMSIZ -D
+// __UAPI_DEF_IF_NET_DEVICE_FLAGS -D __UAPI_DEF_IF_IFREQ -D __UAPI_DEF_IF_IFMAP
+// Name is "iff" to avoid conflicting with "if" keyword.
+// Generated against Linux 4.11 to include fix "uapi: fix linux/if.h userspace
+// compilation errors".
+// Manual fixup of ifrn_name to be of type c_uchar instead of c_char.
+pub mod iff;
+// generated with bindgen /usr/include/linux/if_tun.h --no-unstable-rust
+// --constified-enum '*' --with-derive-default
+pub mod if_tun;
+// generated with bindgen /usr/include/linux/in.h --no-unstable-rust
+// --constified-enum '*' --with-derive-default
+// Name is "inn" to avoid conflicting with "in" keyword.
+pub mod inn;
+// generated with bindgen /usr/include/linux/sockios.h --no-unstable-rust
+// --constified-enum '*' --with-derive-default
+pub mod sockios;
+pub use iff::*;
+pub use if_tun::*;
+pub use inn::*;
+pub use sockios::*;
+
+pub const TUNTAP: ::std::os::raw::c_uint = 84;
+
+ioctl_iow_nr!(TUNSETNOCSUM, TUNTAP, 200, ::std::os::raw::c_int);
+ioctl_iow_nr!(TUNSETDEBUG, TUNTAP, 201, ::std::os::raw::c_int);
+ioctl_iow_nr!(TUNSETIFF, TUNTAP, 202, ::std::os::raw::c_int);
+ioctl_iow_nr!(TUNSETPERSIST, TUNTAP, 203, ::std::os::raw::c_int);
+ioctl_iow_nr!(TUNSETOWNER, TUNTAP, 204, ::std::os::raw::c_int);
+ioctl_iow_nr!(TUNSETLINK, TUNTAP, 205, ::std::os::raw::c_int);
+ioctl_iow_nr!(TUNSETGROUP, TUNTAP, 206, ::std::os::raw::c_int);
+ioctl_ior_nr!(TUNGETFEATURES, TUNTAP, 207, ::std::os::raw::c_uint);
+ioctl_iow_nr!(TUNSETOFFLOAD, TUNTAP, 208, ::std::os::raw::c_uint);
+ioctl_iow_nr!(TUNSETTXFILTER, TUNTAP, 209, ::std::os::raw::c_uint);
+ioctl_ior_nr!(TUNGETIFF, TUNTAP, 210, ::std::os::raw::c_uint);
+ioctl_ior_nr!(TUNGETSNDBUF, TUNTAP, 211, ::std::os::raw::c_int);
+ioctl_iow_nr!(TUNSETSNDBUF, TUNTAP, 212, ::std::os::raw::c_int);
+ioctl_iow_nr!(TUNATTACHFILTER, TUNTAP, 213, sock_fprog);
+ioctl_iow_nr!(TUNDETACHFILTER, TUNTAP, 214, sock_fprog);
+ioctl_ior_nr!(TUNGETVNETHDRSZ, TUNTAP, 215, ::std::os::raw::c_int);
+ioctl_iow_nr!(TUNSETVNETHDRSZ, TUNTAP, 216, ::std::os::raw::c_int);
+ioctl_iow_nr!(TUNSETQUEUE, TUNTAP, 217, ::std::os::raw::c_int);
+ioctl_iow_nr!(TUNSETIFINDEX, TUNTAP, 218, ::std::os::raw::c_uint);
+ioctl_ior_nr!(TUNGETFILTER, TUNTAP, 219, sock_fprog);
+ioctl_iow_nr!(TUNSETVNETLE, TUNTAP, 220, ::std::os::raw::c_int);
+ioctl_ior_nr!(TUNGETVNETLE, TUNTAP, 221, ::std::os::raw::c_int);
+ioctl_iow_nr!(TUNSETVNETBE, TUNTAP, 222, ::std::os::raw::c_int);
+ioctl_ior_nr!(TUNGETVNETBE, TUNTAP, 223, ::std::os::raw::c_int);
diff --git a/net_sys/src/sockios.rs b/net_sys/src/sockios.rs
new file mode 100644
index 0000000..db4718e
--- /dev/null
+++ b/net_sys/src/sockios.rs
@@ -0,0 +1,85 @@
+/* automatically generated by rust-bindgen */
+
+pub const FIOSETOWN: ::std::os::raw::c_uint = 35073;
+pub const SIOCSPGRP: ::std::os::raw::c_uint = 35074;
+pub const FIOGETOWN: ::std::os::raw::c_uint = 35075;
+pub const SIOCGPGRP: ::std::os::raw::c_uint = 35076;
+pub const SIOCATMARK: ::std::os::raw::c_uint = 35077;
+pub const SIOCGSTAMP: ::std::os::raw::c_uint = 35078;
+pub const SIOCGSTAMPNS: ::std::os::raw::c_uint = 35079;
+pub const SOCK_IOC_TYPE: ::std::os::raw::c_uint = 137;
+pub const SIOCADDRT: ::std::os::raw::c_uint = 35083;
+pub const SIOCDELRT: ::std::os::raw::c_uint = 35084;
+pub const SIOCRTMSG: ::std::os::raw::c_uint = 35085;
+pub const SIOCGIFNAME: ::std::os::raw::c_uint = 35088;
+pub const SIOCSIFLINK: ::std::os::raw::c_uint = 35089;
+pub const SIOCGIFCONF: ::std::os::raw::c_uint = 35090;
+pub const SIOCGIFFLAGS: ::std::os::raw::c_uint = 35091;
+pub const SIOCSIFFLAGS: ::std::os::raw::c_uint = 35092;
+pub const SIOCGIFADDR: ::std::os::raw::c_uint = 35093;
+pub const SIOCSIFADDR: ::std::os::raw::c_uint = 35094;
+pub const SIOCGIFDSTADDR: ::std::os::raw::c_uint = 35095;
+pub const SIOCSIFDSTADDR: ::std::os::raw::c_uint = 35096;
+pub const SIOCGIFBRDADDR: ::std::os::raw::c_uint = 35097;
+pub const SIOCSIFBRDADDR: ::std::os::raw::c_uint = 35098;
+pub const SIOCGIFNETMASK: ::std::os::raw::c_uint = 35099;
+pub const SIOCSIFNETMASK: ::std::os::raw::c_uint = 35100;
+pub const SIOCGIFMETRIC: ::std::os::raw::c_uint = 35101;
+pub const SIOCSIFMETRIC: ::std::os::raw::c_uint = 35102;
+pub const SIOCGIFMEM: ::std::os::raw::c_uint = 35103;
+pub const SIOCSIFMEM: ::std::os::raw::c_uint = 35104;
+pub const SIOCGIFMTU: ::std::os::raw::c_uint = 35105;
+pub const SIOCSIFMTU: ::std::os::raw::c_uint = 35106;
+pub const SIOCSIFNAME: ::std::os::raw::c_uint = 35107;
+pub const SIOCSIFHWADDR: ::std::os::raw::c_uint = 35108;
+pub const SIOCGIFENCAP: ::std::os::raw::c_uint = 35109;
+pub const SIOCSIFENCAP: ::std::os::raw::c_uint = 35110;
+pub const SIOCGIFHWADDR: ::std::os::raw::c_uint = 35111;
+pub const SIOCGIFSLAVE: ::std::os::raw::c_uint = 35113;
+pub const SIOCSIFSLAVE: ::std::os::raw::c_uint = 35120;
+pub const SIOCADDMULTI: ::std::os::raw::c_uint = 35121;
+pub const SIOCDELMULTI: ::std::os::raw::c_uint = 35122;
+pub const SIOCGIFINDEX: ::std::os::raw::c_uint = 35123;
+pub const SIOGIFINDEX: ::std::os::raw::c_uint = 35123;
+pub const SIOCSIFPFLAGS: ::std::os::raw::c_uint = 35124;
+pub const SIOCGIFPFLAGS: ::std::os::raw::c_uint = 35125;
+pub const SIOCDIFADDR: ::std::os::raw::c_uint = 35126;
+pub const SIOCSIFHWBROADCAST: ::std::os::raw::c_uint = 35127;
+pub const SIOCGIFCOUNT: ::std::os::raw::c_uint = 35128;
+pub const SIOCGIFBR: ::std::os::raw::c_uint = 35136;
+pub const SIOCSIFBR: ::std::os::raw::c_uint = 35137;
+pub const SIOCGIFTXQLEN: ::std::os::raw::c_uint = 35138;
+pub const SIOCSIFTXQLEN: ::std::os::raw::c_uint = 35139;
+pub const SIOCETHTOOL: ::std::os::raw::c_uint = 35142;
+pub const SIOCGMIIPHY: ::std::os::raw::c_uint = 35143;
+pub const SIOCGMIIREG: ::std::os::raw::c_uint = 35144;
+pub const SIOCSMIIREG: ::std::os::raw::c_uint = 35145;
+pub const SIOCWANDEV: ::std::os::raw::c_uint = 35146;
+pub const SIOCOUTQNSD: ::std::os::raw::c_uint = 35147;
+pub const SIOCGSKNS: ::std::os::raw::c_uint = 35148;
+pub const SIOCDARP: ::std::os::raw::c_uint = 35155;
+pub const SIOCGARP: ::std::os::raw::c_uint = 35156;
+pub const SIOCSARP: ::std::os::raw::c_uint = 35157;
+pub const SIOCDRARP: ::std::os::raw::c_uint = 35168;
+pub const SIOCGRARP: ::std::os::raw::c_uint = 35169;
+pub const SIOCSRARP: ::std::os::raw::c_uint = 35170;
+pub const SIOCGIFMAP: ::std::os::raw::c_uint = 35184;
+pub const SIOCSIFMAP: ::std::os::raw::c_uint = 35185;
+pub const SIOCADDDLCI: ::std::os::raw::c_uint = 35200;
+pub const SIOCDELDLCI: ::std::os::raw::c_uint = 35201;
+pub const SIOCGIFVLAN: ::std::os::raw::c_uint = 35202;
+pub const SIOCSIFVLAN: ::std::os::raw::c_uint = 35203;
+pub const SIOCBONDENSLAVE: ::std::os::raw::c_uint = 35216;
+pub const SIOCBONDRELEASE: ::std::os::raw::c_uint = 35217;
+pub const SIOCBONDSETHWADDR: ::std::os::raw::c_uint = 35218;
+pub const SIOCBONDSLAVEINFOQUERY: ::std::os::raw::c_uint = 35219;
+pub const SIOCBONDINFOQUERY: ::std::os::raw::c_uint = 35220;
+pub const SIOCBONDCHANGEACTIVE: ::std::os::raw::c_uint = 35221;
+pub const SIOCBRADDBR: ::std::os::raw::c_uint = 35232;
+pub const SIOCBRDELBR: ::std::os::raw::c_uint = 35233;
+pub const SIOCBRADDIF: ::std::os::raw::c_uint = 35234;
+pub const SIOCBRDELIF: ::std::os::raw::c_uint = 35235;
+pub const SIOCSHWTSTAMP: ::std::os::raw::c_uint = 35248;
+pub const SIOCGHWTSTAMP: ::std::os::raw::c_uint = 35249;
+pub const SIOCDEVPRIVATE: ::std::os::raw::c_uint = 35312;
+pub const SIOCPROTOPRIVATE: ::std::os::raw::c_uint = 35296;