From 46df7b9b63b3342e1d2ab32d17f83e400a5c8007 Mon Sep 17 00:00:00 2001 From: Bruno Tavares Date: Mon, 29 Jun 2020 22:08:52 -0300 Subject: [PATCH] Expose IP_PKTINFO Control Message on Android The commit https://github.com/nix-rust/nix/pull/1222 added the very useful Ipv4PktInfo to allow `sendmsg` to define the origin of the ip. Unfortunattely, it didn't add the struct to Android target devices as well. This commit adds the `target_os = "android"` checks on the same place to allow the compilation to work for the following archs tested: - `cross build --target aarch64-linux-android` - `cross build --target x86_64-linux-android` - `cross build --target armv7-linux-androideabi` --- src/sys/socket/mod.rs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/sys/socket/mod.rs b/src/sys/socket/mod.rs index b972835f89..07f2ae0c8f 100644 --- a/src/sys/socket/mod.rs +++ b/src/sys/socket/mod.rs @@ -724,7 +724,8 @@ pub enum ControlMessage<'a> { /// [`ip(7)`](http://man7.org/linux/man-pages/man7/ip.7.html) man page. #[cfg(any(target_os = "linux", target_os = "macos", - target_os = "netbsd"))] + target_os = "netbsd", + target_os = "android"))] Ipv4PacketInfo(&'a libc::in_pktinfo), /// Configure the sending addressing and interface for v6 @@ -734,7 +735,8 @@ pub enum ControlMessage<'a> { #[cfg(any(target_os = "linux", target_os = "macos", target_os = "netbsd", - target_os = "freebsd"))] + target_os = "freebsd", + target_os = "android"))] Ipv6PacketInfo(&'a libc::in6_pktinfo), } @@ -818,10 +820,11 @@ impl<'a> ControlMessage<'a> { gso_size as *const _ as *const u8 }, #[cfg(any(target_os = "linux", target_os = "macos", - target_os = "netbsd"))] + target_os = "netbsd", target_os = "android"))] ControlMessage::Ipv4PacketInfo(info) => info as *const _ as *const u8, #[cfg(any(target_os = "linux", target_os = "macos", - target_os = "netbsd", target_os = "freebsd"))] + target_os = "netbsd", target_os = "freebsd", + target_os = "android"))] ControlMessage::Ipv6PacketInfo(info) => info as *const _ as *const u8, }; unsafe { @@ -864,10 +867,11 @@ impl<'a> ControlMessage<'a> { mem::size_of_val(gso_size) }, #[cfg(any(target_os = "linux", target_os = "macos", - target_os = "netbsd"))] + target_os = "netbsd", target_os = "android"))] ControlMessage::Ipv4PacketInfo(info) => mem::size_of_val(info), #[cfg(any(target_os = "linux", target_os = "macos", - target_os = "netbsd", target_os = "freebsd"))] + target_os = "netbsd", target_os = "freebsd", + target_os = "android"))] ControlMessage::Ipv6PacketInfo(info) => mem::size_of_val(info), } } @@ -886,10 +890,11 @@ impl<'a> ControlMessage<'a> { #[cfg(target_os = "linux")] ControlMessage::UdpGsoSegments(_) => libc::SOL_UDP, #[cfg(any(target_os = "linux", target_os = "macos", - target_os = "netbsd"))] + target_os = "netbsd", target_os = "android"))] ControlMessage::Ipv4PacketInfo(_) => libc::IPPROTO_IP, #[cfg(any(target_os = "linux", target_os = "macos", - target_os = "netbsd", target_os = "freebsd"))] + target_os = "netbsd", target_os = "freebsd", + target_os = "android"))] ControlMessage::Ipv6PacketInfo(_) => libc::IPPROTO_IPV6, } } @@ -919,10 +924,11 @@ impl<'a> ControlMessage<'a> { libc::UDP_SEGMENT }, #[cfg(any(target_os = "linux", target_os = "macos", - target_os = "netbsd"))] + target_os = "netbsd", target_os = "android"))] ControlMessage::Ipv4PacketInfo(_) => libc::IP_PKTINFO, #[cfg(any(target_os = "linux", target_os = "macos", - target_os = "netbsd", target_os = "freebsd"))] + target_os = "netbsd", target_os = "freebsd", + target_os = "android"))] ControlMessage::Ipv6PacketInfo(_) => libc::IPV6_PKTINFO, } }