Skip to content

Commit 5dedbc7

Browse files
bors[bot]asomers
andauthored
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 <[email protected]>
2 parents b53dfa8 + 1520d7b commit 5dedbc7

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ This project adheres to [Semantic Versioning](https://semver.org/).
3030
(#[1713](https://github.com/nix-rust/nix/pull/1713))
3131

3232
### Fixed
33+
34+
- Enabled `SockaddrStorage::{as_link_addr, as_link_addr_mut}` for Linux-like
35+
operating systems.
36+
(#[1729](https://github.com/nix-rust/nix/pull/1729))
37+
3338
### Removed
3439

3540
- Removed support for resubmitting partially complete `lio_listio` operations.

src/sys/socket/addr.rs

+27
Original file line numberDiff line numberDiff line change
@@ -1514,6 +1514,14 @@ impl SockaddrStorage {
15141514
accessors!{as_alg_addr, as_alg_addr_mut, AlgAddr,
15151515
AddressFamily::Alg, libc::sockaddr_alg, alg}
15161516

1517+
#[cfg(any(target_os = "android",
1518+
target_os = "fuchsia",
1519+
target_os = "linux"))]
1520+
#[cfg(feature = "net")]
1521+
accessors!{
1522+
as_link_addr, as_link_addr_mut, LinkAddr,
1523+
AddressFamily::Packet, libc::sockaddr_ll, dl}
1524+
15171525
#[cfg(any(target_os = "dragonfly",
15181526
target_os = "freebsd",
15191527
target_os = "ios",
@@ -2682,6 +2690,25 @@ mod tests {
26822690
format!("{}", la);
26832691
}
26842692

2693+
#[cfg(all(
2694+
any(target_os = "android",
2695+
target_os = "fuchsia",
2696+
target_os = "linux"),
2697+
target_endian = "little"
2698+
))]
2699+
#[test]
2700+
fn linux_loopback() {
2701+
let bytes = [17u8, 0, 0, 0, 1, 0, 0, 0, 4, 3, 0, 6, 1, 2, 3, 4, 5, 6, 0, 0];
2702+
let sa = bytes.as_ptr() as *const libc::sockaddr;
2703+
let len = None;
2704+
let sock_addr = unsafe { SockaddrStorage::from_raw(sa, len) }.unwrap();
2705+
assert_eq!(sock_addr.family(), Some(AddressFamily::Packet));
2706+
match sock_addr.as_link_addr() {
2707+
Some(dl) => assert_eq!(dl.addr(), Some([1, 2, 3, 4, 5, 6])),
2708+
None => panic!("Can't unwrap sockaddr storage")
2709+
}
2710+
}
2711+
26852712
#[cfg(any(target_os = "ios",
26862713
target_os = "macos"
26872714
))]

0 commit comments

Comments
 (0)