diff --git a/README.md b/README.md index 579dc74..1457f99 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Softnet solves two problems: 2. DHCP exhaustion * macOS built-in DHCP-server allocates a `/24` subnet with 86400 seconds lease time by default, which only allows for ~253 VMs a day (or 1 VM every ~6 minutes) to be spawned without causing a denial-of-service, which is pretty limiting for CI services like Cirrus CI -Each VM gets a separate [`vmnet` network](https://developer.apple.com/documentation/vmnet/vmnet_network_create(_:_:)) with a private `/30` subnet selected to avoid overlap with existing host interface subnets. Softnet reserves an IP-address for the VM's MAC-address, delivers it through its own DHCP-server, and uses the reserved address for packet filtering. +Each VM gets a separate [`vmnet` network](https://developer.apple.com/documentation/vmnet/vmnet_network_create(_:_:)) with a private `/29` subnet selected to avoid overlap with existing host interface subnets. Softnet reserves an IP-address for the VM's MAC-address, delivers it through its own DHCP-server, and uses the reserved address for packet filtering. ### Stateful flow authorization diff --git a/lib/host.rs b/lib/host.rs index a06dce5..57aab90 100644 --- a/lib/host.rs +++ b/lib/host.rs @@ -42,8 +42,8 @@ impl Host { vm_mac: EthernetAddress, enable_isolation: bool, ) -> Result { - // Find an unused /30 subnet for the gateway and VM - let (gateway_ip, vm_ip, subnet) = subnet_finder::find_available_subnet(30)?; + // Find an unused /29 subnet for the gateway and VM + let (gateway_ip, vm_ip, subnet) = subnet_finder::find_available_subnet(29)?; // Create vmnet's network configuration let mut configuration = NetworkConfiguration::new(match vm_net_type { diff --git a/lib/subnet_finder/mod.rs b/lib/subnet_finder/mod.rs index 8aca8ef..008873b 100644 --- a/lib/subnet_finder/mod.rs +++ b/lib/subnet_finder/mod.rs @@ -76,11 +76,11 @@ mod tests { #[serial_test::serial] fn finds_two_usable_addresses() { // Find a subnet on the current host - let (gateway_ip, vm_ip, subnet) = find_available_subnet(30).unwrap(); + let (gateway_ip, vm_ip, subnet) = find_available_subnet(29).unwrap(); - // Check the subnet and its two usable addresses - assert_eq!(subnet.prefix_len(), 30); + // Check the subnet and its first two usable addresses + assert_eq!(subnet.prefix_len(), 29); assert!(subnet.network().is_private()); - assert_eq!(subnet.hosts().collect::>(), [gateway_ip, vm_ip]); + assert_eq!(subnet.hosts().collect::>()[..2], [gateway_ip, vm_ip]); } }