From 32226f5d8527fb45321ea045da24a966dca922df Mon Sep 17 00:00:00 2001 From: Gleb Pomykalov <gleb@lancastr.com> Date: Mon, 18 Feb 2019 18:19:29 +0300 Subject: [PATCH] Include if_alg.h. Limit AF_ALG constants to only linux and android. --- libc-test/build.rs | 3 ++ src/unix/notbsd/mod.rs | 84 +++++++++++++++++++++++++++++++++++------- 2 files changed, 74 insertions(+), 13 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index e0bd795b..745cd46c 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -102,6 +102,9 @@ fn do_ctest() { cfg.header("net/route.h"); cfg.header("net/if_arp.h"); } + if linux || android { + cfg.header("linux/if_alg.h"); + } cfg.header("netdb.h"); cfg.header("netinet/in.h"); cfg.header("netinet/ip.h"); diff --git a/src/unix/notbsd/mod.rs b/src/unix/notbsd/mod.rs index 22d4bcb4..9a63b4a7 100644 --- a/src/unix/notbsd/mod.rs +++ b/src/unix/notbsd/mod.rs @@ -209,6 +209,13 @@ s! { pub ar_pln: u8, pub ar_op: u16, } + + #[cfg(any(target_os = "linux", target_os = "android"))] + pub struct af_alg_iv { + pub ivlen: u32, + pub iv: [::c_uchar; 0], + } + } s_no_extra_traits!{ @@ -240,19 +247,6 @@ s_no_extra_traits!{ __ss_pad2: [u8; 128 - 2 * 8], } - pub struct sockaddr_alg { - pub salg_family: sa_family_t, - pub salg_type: [::c_uchar; 14], - pub salg_feat: u32, - pub salg_mask: u32, - pub salg_name: [::c_uchar; 64], - } - - pub struct af_alg_iv { - pub ivlen: u32, - pub iv: [::c_uchar; 0], - } - pub struct utsname { pub sysname: [::c_char; 65], pub nodename: [::c_char; 65], @@ -261,6 +255,16 @@ s_no_extra_traits!{ pub machine: [::c_char; 65], pub domainname: [::c_char; 65] } + + #[cfg(any(target_os = "linux", target_os = "android"))] + pub struct sockaddr_alg { + pub salg_family: sa_family_t, + pub salg_type: [::c_uchar; 14], + pub salg_feat: u32, + pub salg_mask: u32, + pub salg_name: [::c_uchar; 64], + } + } cfg_if! { @@ -324,6 +328,52 @@ cfg_if! { } } + #[cfg(any(target_os = "linux", target_os = "android"))] + impl PartialEq for sockaddr_alg { + fn eq(&self, other: &sockaddr_alg) -> bool { + self.salg_family == other.salg_family + && self + .salg_type + .iter() + .zip(other.salg_type.iter()) + .all(|(a, b)| a == b) + && self.salg_feat == other.salg_feat + && self.salg_mask == other.salg_mask + && self + .salg_name + .iter() + .zip(other.salg_name.iter()) + .all(|(a, b)| a == b) + } + } + + #[cfg(any(target_os = "linux", target_os = "android"))] + impl Eq for sockaddr_alg {} + + #[cfg(any(target_os = "linux", target_os = "android"))] + impl ::fmt::Debug for sockaddr_alg { + fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { + f.debug_struct("sockaddr_alg") + .field("salg_family", &self.salg_family) +// .field("salg_type", &self.salg_type) + .field("salg_feat", &self.salg_feat) + .field("salg_mask", &self.salg_mask) +// .field("salg_name", &self.salg_name) + .finish() + } + } + + #[cfg(any(target_os = "linux", target_os = "android"))] + impl ::hash::Hash for sockaddr_alg { + fn hash<H: ::hash::Hasher>(&self, state: &mut H) { + self.salg_family.hash(state); + self.salg_type.hash(state); + self.salg_feat.hash(state); + self.salg_mask.hash(state); + self.salg_name.hash(state); + } + } + impl PartialEq for utsname { fn eq(&self, other: &utsname) -> bool { self.sysname @@ -670,6 +720,7 @@ pub const SOL_DCCP: ::c_int = 269; pub const SOL_NETLINK: ::c_int = 270; pub const SOL_TIPC: ::c_int = 271; pub const SOL_BLUETOOTH: ::c_int = 274; +#[cfg(any(target_os = "linux", target_os = "android"))] pub const SOL_ALG: ::c_int = 279; pub const AF_UNSPEC: ::c_int = 0; @@ -1142,13 +1193,20 @@ pub const ARPHRD_IEEE802154: u16 = 804; pub const ARPHRD_VOID: u16 = 0xFFFF; pub const ARPHRD_NONE: u16 = 0xFFFE; +#[cfg(any(target_os = "linux", target_os = "android"))] pub const ALG_SET_KEY: ::c_int = 1; +#[cfg(any(target_os = "linux", target_os = "android"))] pub const ALG_SET_IV: ::c_int = 2; +#[cfg(any(target_os = "linux", target_os = "android"))] pub const ALG_SET_OP: ::c_int = 3; +#[cfg(any(target_os = "linux", target_os = "android"))] pub const ALG_SET_AEAD_ASSOCLEN: ::c_int = 4; +#[cfg(any(target_os = "linux", target_os = "android"))] pub const ALG_SET_AEAD_AUTHSIZE: ::c_int = 5; +#[cfg(any(target_os = "linux", target_os = "android"))] pub const ALG_OP_DECRYPT: ::c_int = 0; +#[cfg(any(target_os = "linux", target_os = "android"))] pub const ALG_OP_ENCRYPT: ::c_int = 1; fn CMSG_ALIGN(len: usize) -> usize { -- GitLab