@@ -5,7 +5,9 @@ use std::collections::HashMap;
55use std:: net:: { Ipv4Addr , Ipv6Addr } ;
66use std:: slice:: from_raw_parts;
77
8- use libc:: { AF_INET , AF_INET6 , sockaddr_in, sockaddr_in6, strlen, AF_LINK , if_nametoindex} ;
8+ use libc:: {
9+ AF_INET , AF_INET6 , AF_LINK , IFF_LOOPBACK , if_nametoindex, sockaddr_in, sockaddr_in6, strlen,
10+ } ;
911
1012use crate :: target:: ffi:: lladdr;
1113use crate :: target:: getifaddrs;
@@ -24,6 +26,8 @@ impl NetworkInterfaceConfig for NetworkInterface {
2426 unsafe { ( * netifa_addr) . sa_family as i32 }
2527 } ;
2628
29+ let internal = netifa. ifa_flags & IFF_LOOPBACK as u32 != 0 ;
30+
2731 let mut network_interface = match netifa_family {
2832 AF_LINK => {
2933 let name = make_netifa_name ( & netifa) ?;
@@ -34,6 +38,7 @@ impl NetworkInterfaceConfig for NetworkInterface {
3438 mac_addr : Some ( mac) ,
3539 addr : Vec :: new ( ) ,
3640 index,
41+ internal,
3742 }
3843 }
3944 AF_INET => {
@@ -44,7 +49,14 @@ impl NetworkInterfaceConfig for NetworkInterface {
4449 let netmask = make_ipv4_netmask ( & netifa) ;
4550 let addr = ipv4_from_in_addr ( & internet_address) ?;
4651 let broadcast = make_ipv4_broadcast_addr ( & netifa) ?;
47- NetworkInterface :: new_afinet ( name. as_str ( ) , addr, netmask, broadcast, index)
52+ NetworkInterface :: new_afinet (
53+ name. as_str ( ) ,
54+ addr,
55+ netmask,
56+ broadcast,
57+ index,
58+ internal,
59+ )
4860 }
4961 AF_INET6 => {
5062 let socket_addr = netifa_addr as * mut sockaddr_in6 ;
@@ -54,7 +66,14 @@ impl NetworkInterfaceConfig for NetworkInterface {
5466 let netmask = make_ipv6_netmask ( & netifa) ;
5567 let addr = ipv6_from_in6_addr ( & internet_address) ?;
5668 let broadcast = make_ipv6_broadcast_addr ( & netifa) ?;
57- NetworkInterface :: new_afinet6 ( name. as_str ( ) , addr, netmask, broadcast, index)
69+ NetworkInterface :: new_afinet6 (
70+ name. as_str ( ) ,
71+ addr,
72+ netmask,
73+ broadcast,
74+ index,
75+ internal,
76+ )
5877 }
5978 _ => continue ,
6079 } ;
0 commit comments