summaryrefslogtreecommitdiffstats
path: root/src/os/shared.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/os/shared.rs')
-rw-r--r--src/os/shared.rs27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/os/shared.rs b/src/os/shared.rs
index afa7330..d336357 100644
--- a/src/os/shared.rs
+++ b/src/os/shared.rs
@@ -100,15 +100,28 @@ pub fn get_input(
let network_frames = network_interfaces
.iter()
- .map(|iface| get_datalink_channel(iface));
-
- let available_network_frames = network_frames
- .clone()
- .filter_map(Result::ok)
- .collect::<Vec<_>>();
+ .filter(|iface| iface.is_up() && !iface.ips.is_empty())
+ .map(|iface| (iface, get_datalink_channel(iface)));
+
+ let (available_network_frames, network_interfaces) = {
+ let network_frames = network_frames.clone();
+ let mut available_network_frames = Vec::new();
+ let mut available_interfaces: Vec<NetworkInterface> = Vec::new();
+ for (iface, rx) in network_frames.filter_map(|(iface, channel)| {
+ if let Ok(rx) = channel {
+ Some((iface, rx))
+ } else {
+ None
+ }
+ }) {
+ available_interfaces.push(iface.clone());
+ available_network_frames.push(rx);
+ }
+ (available_network_frames, available_interfaces)
+ };
if available_network_frames.is_empty() {
- for iface in network_frames {
+ for (_, iface) in network_frames {
if let Some(iface_error) = iface.err() {
if let ErrorKind::PermissionDenied = iface_error.kind() {
failure::bail!(eperm_message())