summary refs log tree commit diff
path: root/pkgs/os-specific/linux/spectrum
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/os-specific/linux/spectrum')
-rw-r--r--pkgs/os-specific/linux/spectrum/testhost/default.nix25
-rw-r--r--pkgs/os-specific/linux/spectrum/vm/app/default.nix15
-rw-r--r--pkgs/os-specific/linux/spectrum/vm/net/default.nix13
3 files changed, 23 insertions, 30 deletions
diff --git a/pkgs/os-specific/linux/spectrum/testhost/default.nix b/pkgs/os-specific/linux/spectrum/testhost/default.nix
index 21c585f1490..de62f0add67 100644
--- a/pkgs/os-specific/linux/spectrum/testhost/default.nix
+++ b/pkgs/os-specific/linux/spectrum/testhost/default.nix
@@ -45,23 +45,20 @@ let
           if { ip link set br0 up }
 
           # Calculate the MACs for our TAP and the router's TAP.
-          backtick -in router_nic_dec {
-            expr ${toString sys-vms.app.vmID} * 2 + 64 * 256 * 256
-          }
-          backtick -in client_nic_dec {
-            expr ${toString sys-vms.app.vmID} * 2 + 64 * 256 * 256 + 1
-          }
-          multisubstitute {
-            importas -iu router_nic_dec router_nic_dec
-            importas -iu client_nic_dec client_nic_dec
-          }
+          # MAC address format, by octet:
+          #
+          #  0-3  Static OUI for Spectrum
+          #    4  Most significant bit is used to differentiate
+          #       routers from clients.  Other bits are reserved.
+          #  5-6  Last two octets of client's IP (in 100.64.0.0/16).
+          #
           backtick -i router_mac {
-            pipeline { printf %x $router_nic_dec }
-            sed s/^\\(..\\)\\(..\\)\\(..\\)$/0A:B3:EC:\\1:\\2:\\3/
+            pipeline { printf %.4x ${toString sys-vms.app.vmID} }
+            sed s/^\\(..\\)\\(..\\)$/0A:B3:EC:80:\\1:\\2/
           }
           backtick -i client_mac {
-            pipeline { printf %x $client_nic_dec }
-            sed s/^\\(..\\)\\(..\\)\\(..\\)$/0A:B3:EC:\\1:\\2:\\3/
+            pipeline { printf %.4x ${toString sys-vms.app.vmID} }
+            sed s/^\\(..\\)\\(..\\)$/0A:B3:EC:00:\\1:\\2/
           }
           multisubstitute {
             importas -iu router_mac router_mac
diff --git a/pkgs/os-specific/linux/spectrum/vm/app/default.nix b/pkgs/os-specific/linux/spectrum/vm/app/default.nix
index 65dbb51f5e1..f8ff480932c 100644
--- a/pkgs/os-specific/linux/spectrum/vm/app/default.nix
+++ b/pkgs/os-specific/linux/spectrum/vm/app/default.nix
@@ -28,20 +28,15 @@ runCommand "vm-app" rec {
       up = writeText "net-up" ''
         backtick -i LOCAL_IP {
           pipeline { ip -j link show eth0 }
-          pipeline { jq -r ".[0].address | split(\":\") | .[3:6] | \"0x\" + .[]" }
-          xargs printf "100.%d.%d.%d"
+          pipeline { jq -r ".[0].address | split(\":\") | .[4:6] | \"0x\" + .[]" }
+          xargs printf "100.64.%d.%d"
         }
         importas -iu LOCAL_IP LOCAL_IP
 
-        backtick -i REMOTE_IP {
-          jq -jn --arg localip $LOCAL_IP
-            "$localip | split(\".\") | .[3] |= tonumber - 1 | join(\".\")"
-        }
-        importas -iu REMOTE_IP REMOTE_IP
-
-        if { ip address add ''${LOCAL_IP}/31 dev eth0 }
+        if { ip address add ''${LOCAL_IP}/32 dev eth0 }
         if { ip link set eth0 up }
-        ip route add default via $REMOTE_IP
+        if { ip route add 169.254.0.1 dev eth0 }
+        ip route add default via 169.254.0.1 dev eth0
       '';
     };
 
diff --git a/pkgs/os-specific/linux/spectrum/vm/net/default.nix b/pkgs/os-specific/linux/spectrum/vm/net/default.nix
index 1deb7031caf..5921b62fcf7 100644
--- a/pkgs/os-specific/linux/spectrum/vm/net/default.nix
+++ b/pkgs/os-specific/linux/spectrum/vm/net/default.nix
@@ -54,15 +54,16 @@ runCommand "vm-net" rec {
 
               # Our IP is encoded in the NIC-specific portion of the
               # interface's MAC address.
-              backtick -i LOCAL_IP {
+              backtick -i CLIENT_IP {
                 pipeline { ip -j link show $INTERFACE }
-                pipeline { jq -r ".[0].address | split(\":\") | .[3:6] | \"0x\" + .[]" }
-                xargs printf "100.%d.%d.%d"
+                pipeline { jq -r ".[0].address | split(\":\") | .[4:6] | \"0x\" + .[]" }
+                xargs printf "100.64.%d.%d"
               }
-              importas -iu LOCAL_IP LOCAL_IP
+              importas -iu CLIENT_IP CLIENT_IP
 
-              if { ip address add ''${LOCAL_IP}/31 dev $INTERFACE }
-              ip link set $INTERFACE up
+              if { ip address add 169.254.0.1/32 dev $INTERFACE }
+              if { ip link set $INTERFACE up }
+              ip route add $CLIENT_IP dev $INTERFACE
             }
 
             {