From 14f19f65dc36cd05dcc7ee0afe1d78ef103cf44c Mon Sep 17 00:00:00 2001 From: luozijun Date: Sat, 7 Oct 2017 16:25:25 +0800 Subject: [PATCH 1/2] FIX: src/ffi.rs --- Cargo.toml | 4 ++-- README.md | 25 +++++++++---------------- src/bin/ifaces.rs | 12 ++++++------ src/ffi.rs | 16 ++++++++-------- 4 files changed, 25 insertions(+), 32 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index a2741da..5a8ab2c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,8 +6,8 @@ authors = ["dlevy47 "] license = "mit" [dependencies] -nix = "*" -libc = "*" +nix = "0.9.0" +libc = "0.2.32" [[bin]] path = "src/bin/ifaces.rs" diff --git a/README.md b/README.md index 58ff8eb..f4fbf90 100644 --- a/README.md +++ b/README.md @@ -6,25 +6,18 @@ This library contains functionality to retrieve network interface information on See `src/bin/ifaces.rs` for an example of printing out network interfaces on a machine: -```rust -extern crate "rust-ifaces" as ifaces; - -fn main () { - for iface in - ifaces::Interface::get_all().unwrap() - .into_iter() - .filter(|x| x.kind == ifaces::Kind::Packet) { - println!("{}", iface.name); - } -} +```bash +cargo run --bin ifaces ``` On my machine, this prints out: ``` -$ target/ifaces -lo -eth0 -wlan0 -docker0 +Interface { name: "lo0", kind: Ipv4, addr: Some(V4(127.0.0.1:0)), mask: Some(V4(255.0.0.0:0)), hop: Some(Destination(V4(127.0.0.1:0))) } +Interface { name: "lo0", kind: Ipv6, addr: Some(V6([::]:0)), mask: Some(V6([ff:ff:ff:ff:ff:ff:ff:ff]:0)), hop: Some(Destination(V6([::]:0))) } +Interface { name: "lo0", kind: Ipv6, addr: Some(V6([fe:80::]:0)), mask: Some(V6([ff:ff:ff:ff:ff:ff:ff:ff]:0)), hop: None } +Interface { name: "en0", kind: Ipv6, addr: Some(V6([fe:80::]:0)), mask: Some(V6([ff:ff:ff:ff:ff:ff:ff:ff]:0)), hop: None } +Interface { name: "en0", kind: Ipv4, addr: Some(V4(192.168.0.101:0)), mask: Some(V4(255.255.255.0:0)), hop: Some(Broadcast(V4(192.168.0.255:0))) } +Interface { name: "awdl0", kind: Ipv6, addr: Some(V6([fe:80::]:0)), mask: Some(V6([ff:ff:ff:ff:ff:ff:ff:ff]:0)), hop: None } +Interface { name: "utun0", kind: Ipv6, addr: Some(V6([fe:80::]:0)), mask: Some(V6([ff:ff:ff:ff:ff:ff:ff:ff]:0)), hop: None } ``` diff --git a/src/bin/ifaces.rs b/src/bin/ifaces.rs index 4b8f7e2..f1cc6cd 100644 --- a/src/bin/ifaces.rs +++ b/src/bin/ifaces.rs @@ -2,10 +2,10 @@ extern crate ifaces; #[cfg(not(test))] fn main () { - for iface in - ifaces::Interface::get_all().unwrap() - .into_iter() - .filter(|x| x.kind == ifaces::Kind::Packet) { - println!("{}", iface.name); - } + let ifaces = ifaces::Interface::get_all().unwrap() + .into_iter() + .filter(|x| x.kind != ifaces::Kind::Packet); + for iface in ifaces { + println!("{:?}", iface); + } } diff --git a/src/ffi.rs b/src/ffi.rs index 6af673c..fefd87f 100644 --- a/src/ffi.rs +++ b/src/ffi.rs @@ -86,14 +86,14 @@ pub fn convert_sockaddr (sa: *mut socket::sockaddr) -> Option { let (addr, port) = (sa.sin6_addr.s6_addr, sa.sin6_port); ( IpAddr::V6(net::Ipv6Addr::new( - addr[0], - addr[1], - addr[2], - addr[3], - addr[4], - addr[5], - addr[6], - addr[7], + addr[0] as u16, + addr[1] as u16, + addr[2] as u16, + addr[3] as u16, + addr[4] as u16, + addr[5] as u16, + addr[6] as u16, + addr[7] as u16, )), port ) From 4fe87291718c840407854d70af4de42182b867b8 Mon Sep 17 00:00:00 2001 From: luozijun Date: Sat, 7 Oct 2017 16:35:23 +0800 Subject: [PATCH 2/2] IMP: Remove feature `ip_addr` --- src/ffi.rs | 2 +- src/lib.rs | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/ffi.rs b/src/ffi.rs index fefd87f..5ab6c21 100644 --- a/src/ffi.rs +++ b/src/ffi.rs @@ -7,7 +7,7 @@ use std::net::IpAddr; // nix doesn't have this const pub const AF_PACKET: i32 = 17; -#[allow(dead_code)] +#[allow(dead_code, non_camel_case_types)] #[repr(C)] pub enum SIOCGIFFLAGS { IFF_UP = 0x1, /* Interface is up. */ diff --git a/src/lib.rs b/src/lib.rs index c280355..bb75f68 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,3 @@ -#![feature(ip_addr)] - extern crate libc; extern crate nix;