The RNL virtualization system at the laboratories uses libvirt to manage the created virtual machines, VDE to create virtual switches which allow the virtual machines to connect with each others, and a special TAP interface connected to an isolated VLAN to allow virtual machines in different workstations to communicate with each other.


libvirt is a special daemon which creates, launches and shuts down virtual machines using QEMU under the hood.

In our system, libvirt is launched in the user session, running in a volatile folder ($XDG_RUNTIME_DIR/rnl-virt-$XDG_SESSION_ID/) which will store the virtual machines’ metadata.

libvirt uses XML files to define virtual machines (called domains). In our system, we use template files in which we fill the blank spaces with the required data to create the XML files used by libvirt. These files are at /var/lib/rnl-virt/vm/templates.

Virtual machine disks

Any kind of disk can be used with the created virtual machines.

We also provide a special command to create a small differential disk. This is a disk which, instead of storing a whole new copy of an original master copy, stores only the changes made to it (see data differencing). This is particularly useful when little disk storage is available. The master disks are stored in /var/lib/rnl-virt/disk/templates.

VDE Switches

VDE provides a special userspace implementation of switches. This allows users to create several virtual switches and create their own network topologies for their virtual machines.


The isolated VLAN is provided to the users through a special TAP interface which is accessible to any user. This way, it is possible to connect either VDE switches or virtual machines directly to the TAP interface, and to provide a connection between virtual machines in different workstations.