diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2022-05-31 23:57:45 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-31 23:57:45 +0000 |
commit | 5dedbc7850448ae3922ab0a833f3eb971bf7e25f (patch) | |
tree | c14534a485cc19b1bfce3d8d6909966625de55aa /src/sys/socket/addr.rs | |
parent | b53dfa87c30e50795df0495343da2308ba202620 (diff) | |
parent | 1520d7b316932f86beb32931c4aa86bdbb97e416 (diff) | |
download | nix-5dedbc7850448ae3922ab0a833f3eb971bf7e25f.zip |
Merge #1729
1729: Enable SockaddrStorage::{as_link_addr, as_link_addr_mut} on Linux. r=rtzoeller a=asomers
This was an oversight from #1684.
Fixes #1728
Co-authored-by: Alan Somers <asomers@gmail.com>
Diffstat (limited to 'src/sys/socket/addr.rs')
-rw-r--r-- | src/sys/socket/addr.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/sys/socket/addr.rs b/src/sys/socket/addr.rs index 6d38f26c..8de501a4 100644 --- a/src/sys/socket/addr.rs +++ b/src/sys/socket/addr.rs @@ -1514,6 +1514,14 @@ impl SockaddrStorage { accessors!{as_alg_addr, as_alg_addr_mut, AlgAddr, AddressFamily::Alg, libc::sockaddr_alg, alg} + #[cfg(any(target_os = "android", + target_os = "fuchsia", + target_os = "linux"))] + #[cfg(feature = "net")] + accessors!{ + as_link_addr, as_link_addr_mut, LinkAddr, + AddressFamily::Packet, libc::sockaddr_ll, dl} + #[cfg(any(target_os = "dragonfly", target_os = "freebsd", target_os = "ios", @@ -2682,6 +2690,25 @@ mod tests { format!("{}", la); } + #[cfg(all( + any(target_os = "android", + target_os = "fuchsia", + target_os = "linux"), + target_endian = "little" + ))] + #[test] + fn linux_loopback() { + let bytes = [17u8, 0, 0, 0, 1, 0, 0, 0, 4, 3, 0, 6, 1, 2, 3, 4, 5, 6, 0, 0]; + let sa = bytes.as_ptr() as *const libc::sockaddr; + let len = None; + let sock_addr = unsafe { SockaddrStorage::from_raw(sa, len) }.unwrap(); + assert_eq!(sock_addr.family(), Some(AddressFamily::Packet)); + match sock_addr.as_link_addr() { + Some(dl) => assert_eq!(dl.addr(), Some([1, 2, 3, 4, 5, 6])), + None => panic!("Can't unwrap sockaddr storage") + } + } + #[cfg(any(target_os = "ios", target_os = "macos" ))] |