summary refs log tree commit diff
path: root/Documentation/getting-started/creating-vms.adoc
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/getting-started/creating-vms.adoc')
-rw-r--r--Documentation/getting-started/creating-vms.adoc78
1 files changed, 78 insertions, 0 deletions
diff --git a/Documentation/getting-started/creating-vms.adoc b/Documentation/getting-started/creating-vms.adoc
new file mode 100644
index 0000000..725316c
--- /dev/null
+++ b/Documentation/getting-started/creating-vms.adoc
@@ -0,0 +1,78 @@
+= Creating VMs
+:page-parent: Getting Started
+:page-nav_order: 1
+
+// SPDX-FileCopyrightText: 2022 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: GFDL-1.3-no-invariants-or-later OR CC-BY-SA-4.0
+
+== Configuration
+
+Each VM is configured using a directory under svc/data/ on the
+xref:user-partition.adoc[user partition].  The name of the directory
+determines the name of the VM.
+
+The directory can contain the following files:
+
+vmlinux:: An uncompressed Linux kernel image for the VM to boot.
+*Required.*
+
+rootfs.ext4:: A disk image that will be provided to the guest as a
+virtio-blk device.  *Required.*
+
+providers/net:: A directory containing a file named for each VM that
+should provide networking to this VM.  The contents of these files are
+ignored.
+
+=== Example
+
+A configuration directory for a VM called "appvm-lynx" dedicated to
+the https://lynx.invisible-island.net[Lynx] web browser, set up to
+have networking provided by a VM named "netvm" would look like this:
+
+----
+appvm-lynx
+├── providers/
+│   └── net/
+│       └── netvm
+├── rootfs.ext4
+└── vmlinux*
+----
+
+== Devices
+
+The virtual devices described here are always created for Spectrum
+VMs.  It's important for guests to recognize these devices and use
+them in the intended way so that they integrate into the rest of the
+system.
+
+=== Logging
+
+Every VM has a serial console that is connected to the host system's
+logging infrastructure.  The console is write-only -- there will never
+be any input to read from the console.
+
+=== User interface
+
+Every VM has a virtio-console device to use to interact with the user
+of the Spectrum system.
+
+=== Networking
+
+The Spectrum host system can create network connections between VMs.
+These take the form of virtio-net devices.  Guests must support the
+VIRTIO_NET_F_MAC feature.
+
+A guest can distinguish between virtual inter-guest network
+connections and hardware network connections through the MAC address
+of the corresponding network interface: guest network interfaces for
+inter-guest networking have the OUI `0A:B3:EC`.
+
+Connections to *network provider VMs* have the IP address to use
+encoded in the client interface's MAC address.  The client guest
+should configure an IPv4 address in `100.64.0.0/16`, where the final
+two octets of the IP address are the final two octets of the
+interface's MAC address.  For example, an application VM where a
+network interface named `eth0` has the MAC address `0A:B3:EC:00:A5:46`
+should configure `eth0` with the IPv4 address `100.64.165.70` (because
+`A5` in hexadecimal is `165` in decimal, and `46` in hexadecimal is
+`70` in decimal).