diff options
author | Alyssa Ross <hi@alyssa.is> | 2021-11-08 14:31:36 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2021-11-19 19:54:50 +0000 |
commit | 88f2695c791d9d7e3d7f2f1658e7951ce2ea632b (patch) | |
tree | 7d9c19744caa40fbfca7817421b7154c54b10378 /host/appvm-lynx/run | |
download | spectrum-88f2695c791d9d7e3d7f2f1658e7951ce2ea632b.tar spectrum-88f2695c791d9d7e3d7f2f1658e7951ce2ea632b.tar.gz spectrum-88f2695c791d9d7e3d7f2f1658e7951ce2ea632b.tar.bz2 spectrum-88f2695c791d9d7e3d7f2f1658e7951ce2ea632b.tar.lz spectrum-88f2695c791d9d7e3d7f2f1658e7951ce2ea632b.tar.xz spectrum-88f2695c791d9d7e3d7f2f1658e7951ce2ea632b.tar.zst spectrum-88f2695c791d9d7e3d7f2f1658e7951ce2ea632b.zip |
Initial commit
Diffstat (limited to 'host/appvm-lynx/run')
-rw-r--r-- | host/appvm-lynx/run | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/host/appvm-lynx/run b/host/appvm-lynx/run new file mode 100644 index 0000000..3a10dcb --- /dev/null +++ b/host/appvm-lynx/run @@ -0,0 +1,56 @@ +#!/bin/execlineb -P +# SPDX-License-Identifier: EUPL-1.2 +# SPDX-FileCopyrightText: 2020-2021 Alyssa Ross <hi@alyssa.is> + +redirfd -r 0 /dev/null + +getpid -E pid + +# Checking the return value of the bridge creation is important, +# because if it fails due to the bridge already existing that means +# something else could already be using this bridge. +if { ip link add name br${pid} type bridge } +background { ip link set br${pid} up } + +# Create the net VM end, and attach it to the net VM. +# +# TODO: it would be nice if we could have this be non-persistent, so +# it didn't stick around if the network VM was shut down. +background { + # Try to delete the device in case the VM was powered off (as the + # finish script wouldn't have been run in that case.) Since we check + # the return value of ip tuntap add, in the case of a race condition + # between deleting the device and creating it again, we'll just fail + # and try again. + foreground { + redirfd -w 2 /dev/null + ip link delete router${pid} + } + + if { tunctl -t router${pid} } + background { ip link set router${pid} master br${pid} } + background { ip link set router${pid} up } + + backtick -E router_mac { data/pid2mac -v pid=${pid} -v octet4=80 } + curl -Sfso /dev/null + -X PUT + -H "Content-Type: application/json" + -A "" + -d "{\"tap\":\"router${pid}\",\"mac\":\"${router_mac}\"}" + --unix-socket ../netvm/env/cloud-hypervisor.sock + http://localhost/api/v1/vm.add-net +} + +mktuntap -pvBi client${pid} 3 +background { ip link set client${pid} master br${pid} } +background { ip link set client${pid} up } + +backtick -E client_mac { data/pid2mac -v pid=${pid} -v octet4=00 } +redirfd -r 0 /dev/null +cloud-hypervisor + --kernel data/vmlinux + --cmdline "console=ttyS0 root=/dev/vda" + --disk path=data/rootfs.ext4,readonly=on + --net fd=3,mac=${client_mac} + --console off + --serial tty |