Skip to content

Commit f2416eb

Browse files
repnopjelmer
andauthored
Nix 0.27 (#41)
* Update to nix 0.26 * some clippy fixes * use latest version of `nix` --------- Co-authored-by: Jelmer Vernooij <jelmer@jelmer.uk>
1 parent a32d68d commit f2416eb

File tree

4 files changed

+26
-22
lines changed

4 files changed

+26
-22
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ keywords = ["mac", "address", "network", "interface"]
1414
serde = { version = "1.0.117", features = ["derive"], optional = true }
1515

1616
[target.'cfg(any(target_os = "linux", target_os = "macos", target_os = "freebsd", target_os = "openbsd", target_os = "android"))'.dependencies]
17-
nix = "0.23.1"
17+
nix = { version = "0.27", features = ["net"] }
1818

1919
[target.'cfg(windows)'.dependencies]
2020
winapi = { version = "0.3", features = ["winerror", "ws2def", "iphlpapi"] }

examples/lookup.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ fn main() {
44
#[cfg(any(target_os = "linux", target_os = "macos"))]
55
let name = "eth0";
66

7-
#[cfg(any(target_os = "freebsd"))]
7+
#[cfg(target_os = "freebsd")]
88
let name = "em0";
99

10-
#[cfg(any(target_os = "openbsd"))]
10+
#[cfg(target_os = "openbsd")]
1111
let name = "fxp0";
1212

1313
#[cfg(target_os = "windows")]

src/iter/linux.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::{MacAddress, MacAddressError};
2-
use nix::{ifaddrs, sys::socket::SockAddr};
2+
use nix::ifaddrs;
33

44
/// An iterator over all available MAC addresses on the system.
55
pub struct MacAddressIterator {
@@ -19,11 +19,9 @@ impl MacAddressIterator {
1919
}
2020

2121
fn filter_macs(intf: ifaddrs::InterfaceAddress) -> Option<MacAddress> {
22-
if let SockAddr::Link(link) = intf.address? {
23-
Some(MacAddress::new(link.addr()))
24-
} else {
25-
None
26-
}
22+
intf.address?
23+
.as_link_addr()
24+
.and_then(|link| link.addr().map(MacAddress::new))
2725
}
2826

2927
impl Iterator for MacAddressIterator {

src/linux.rs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#![allow(dead_code)]
22

33
use crate::MacAddressError;
4-
use nix::{ifaddrs::*, sys::socket::SockAddr};
4+
use nix::ifaddrs::*;
55

66
/// Uses the `getifaddrs` call to retrieve a list of network interfaces on the
77
/// host device and returns the first MAC address listed that isn't
@@ -10,15 +10,19 @@ pub fn get_mac(name: Option<&str>) -> Result<Option<[u8; 6]>, MacAddressError> {
1010
let ifiter = getifaddrs()?;
1111

1212
for interface in ifiter {
13-
if let Some(SockAddr::Link(link)) = interface.address {
14-
let bytes = link.addr();
15-
16-
if let Some(name) = name {
17-
if interface.interface_name == name {
18-
return Ok(Some(bytes));
13+
if let Some(iface_address) = interface.address {
14+
if let Some(link) = iface_address.as_link_addr() {
15+
let bytes = link.addr();
16+
17+
if let Some(name) = name {
18+
if interface.interface_name == name {
19+
return Ok(bytes);
20+
}
21+
} else if let Some(bytes) = bytes {
22+
if bytes.iter().any(|&x| x != 0) {
23+
return Ok(Some(bytes));
24+
}
1925
}
20-
} else if bytes.iter().any(|&x| x != 0) {
21-
return Ok(Some(bytes));
2226
}
2327
}
2428
}
@@ -30,11 +34,13 @@ pub fn get_ifname(mac: &[u8; 6]) -> Result<Option<String>, MacAddressError> {
3034
let ifiter = getifaddrs()?;
3135

3236
for interface in ifiter {
33-
if let Some(SockAddr::Link(link)) = interface.address {
34-
let bytes = link.addr();
37+
if let Some(iface_address) = interface.address {
38+
if let Some(link) = iface_address.as_link_addr() {
39+
let bytes = link.addr();
3540

36-
if &bytes == mac {
37-
return Ok(Some(interface.interface_name));
41+
if bytes == Some(*mac) {
42+
return Ok(Some(interface.interface_name));
43+
}
3844
}
3945
}
4046
}

0 commit comments

Comments
 (0)