summaryrefslogtreecommitdiff
path: root/src/sys/socket/addr.rs
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2022-05-31 23:57:45 +0000
committerGitHub <noreply@github.com>2022-05-31 23:57:45 +0000
commit5dedbc7850448ae3922ab0a833f3eb971bf7e25f (patch)
treec14534a485cc19b1bfce3d8d6909966625de55aa /src/sys/socket/addr.rs
parentb53dfa87c30e50795df0495343da2308ba202620 (diff)
parent1520d7b316932f86beb32931c4aa86bdbb97e416 (diff)
downloadnix-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.rs27
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"
))]