@@ -47,31 +47,29 @@ pub async fn setup_test_network() -> Result<()> {
47
47
/// Returns the interface name and IP address of the bridge gateway, which is the (first) bridge
48
48
/// network that the given `guest_ip` belongs to.
49
49
pub ( crate ) fn find_vm_bridge ( guest_ip : & Ipv4Addr ) -> Result < ( String , Ipv4Addr ) > {
50
- for addr in nix:: ifaddrs:: getifaddrs ( )
50
+ let to_sock_addr = |addr : Option < SockaddrStorage > | {
51
+ addr. as_ref ( )
52
+ . and_then ( |addr| addr. as_sockaddr_in ( ) )
53
+ . map ( |addr| * SocketAddrV4 :: from ( * addr) . ip ( ) )
54
+ } ;
55
+
56
+ nix:: ifaddrs:: getifaddrs ( )
51
57
. unwrap ( )
52
58
. filter ( |addr| addr. interface_name . starts_with ( "bridge" ) )
53
- {
54
- let to_sock_addr = |addr : Option < SockaddrStorage > | {
55
- addr. as_ref ( )
56
- . and_then ( |addr| addr. as_sockaddr_in ( ) )
57
- . map ( |addr| * SocketAddrV4 :: from ( * addr) . ip ( ) )
58
- } ;
59
-
60
- if let ( Some ( address) , Some ( netmask) ) =
61
- ( to_sock_addr ( addr. address ) , to_sock_addr ( addr. netmask ) )
62
- {
63
- if let Ok ( ip_v4_network) = ipnetwork:: Ipv4Network :: with_netmask ( address, netmask) {
64
- if ip_v4_network. contains ( * guest_ip) {
65
- return Ok ( ( addr. interface_name . to_owned ( ) , address) ) ;
66
- }
67
- } ;
68
- } ;
69
- }
70
-
71
- // This is probably either due to IP mismatch or Tart not running
72
- Err ( anyhow ! (
73
- "Failed to identify bridge used by tart -- not running?"
74
- ) )
59
+ . filter_map ( |addr| {
60
+ let address = to_sock_addr ( addr. address ) ;
61
+ let netmask = to_sock_addr ( addr. netmask ) ;
62
+ address
63
+ . zip ( netmask)
64
+ . map ( |( address, netmask) | ( addr. interface_name , address, netmask) )
65
+ } )
66
+ . find_map ( |( interface_name, address, netmask) | {
67
+ ipnetwork:: Ipv4Network :: with_netmask ( address, netmask)
68
+ . ok ( )
69
+ . filter ( |ip_v4_network| ip_v4_network. contains ( * guest_ip) )
70
+ . map ( |_| ( interface_name. to_owned ( ) , address) )
71
+ } )
72
+ . ok_or_else ( || anyhow ! ( "Failed to identify bridge used by tart -- not running?" ) )
75
73
}
76
74
77
75
async fn enable_forwarding ( ) -> Result < ( ) > {
0 commit comments