summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSebastian Holmin <sebastian.holmin@mullvad.net>2025-01-08 16:01:40 +0100
committerSebastian Holmin <sebastian.holmin@mullvad.net>2025-01-08 16:01:40 +0100
commitaab384fcffff864308467397b2444080ef24e2f2 (patch)
tree51019ccbc7b536683b100c642034523518f5cf04
parentb23da797007f5f4617b3fa484be2f39ebe67ffc4 (diff)
downloadmullvadvpn-aab384fcffff864308467397b2444080ef24e2f2.tar.xz
mullvadvpn-aab384fcffff864308467397b2444080ef24e2f2.zip
Rewrite in functional style
-rw-r--r--test/test-manager/src/vm/network/macos.rs44
1 files changed, 21 insertions, 23 deletions
diff --git a/test/test-manager/src/vm/network/macos.rs b/test/test-manager/src/vm/network/macos.rs
index 3d8bc0fd2f..fab648c338 100644
--- a/test/test-manager/src/vm/network/macos.rs
+++ b/test/test-manager/src/vm/network/macos.rs
@@ -47,31 +47,29 @@ pub async fn setup_test_network() -> Result<()> {
/// Returns the interface name and IP address of the bridge gateway, which is the (first) bridge
/// network that the given `guest_ip` belongs to.
pub(crate) fn find_vm_bridge(guest_ip: &Ipv4Addr) -> Result<(String, Ipv4Addr)> {
- for addr in nix::ifaddrs::getifaddrs()
+ let to_sock_addr = |addr: Option<SockaddrStorage>| {
+ addr.as_ref()
+ .and_then(|addr| addr.as_sockaddr_in())
+ .map(|addr| *SocketAddrV4::from(*addr).ip())
+ };
+
+ nix::ifaddrs::getifaddrs()
.unwrap()
.filter(|addr| addr.interface_name.starts_with("bridge"))
- {
- let to_sock_addr = |addr: Option<SockaddrStorage>| {
- addr.as_ref()
- .and_then(|addr| addr.as_sockaddr_in())
- .map(|addr| *SocketAddrV4::from(*addr).ip())
- };
-
- if let (Some(address), Some(netmask)) =
- (to_sock_addr(addr.address), to_sock_addr(addr.netmask))
- {
- if let Ok(ip_v4_network) = ipnetwork::Ipv4Network::with_netmask(address, netmask) {
- if ip_v4_network.contains(*guest_ip) {
- return Ok((addr.interface_name.to_owned(), address));
- }
- };
- };
- }
-
- // This is probably either due to IP mismatch or Tart not running
- Err(anyhow!(
- "Failed to identify bridge used by tart -- not running?"
- ))
+ .filter_map(|addr| {
+ let address = to_sock_addr(addr.address);
+ let netmask = to_sock_addr(addr.netmask);
+ address
+ .zip(netmask)
+ .map(|(address, netmask)| (addr.interface_name, address, netmask))
+ })
+ .find_map(|(interface_name, address, netmask)| {
+ ipnetwork::Ipv4Network::with_netmask(address, netmask)
+ .ok()
+ .filter(|ip_v4_network| ip_v4_network.contains(*guest_ip))
+ .map(|_| (interface_name.to_owned(), address))
+ })
+ .ok_or_else(|| anyhow!("Failed to identify bridge used by tart -- not running?"))
}
async fn enable_forwarding() -> Result<()> {