<html>
  <body>
    <h1>User Mode Linux driver</h1>

    <p>
    The UML driver for libvirt allows use and management of paravirtualized
    guests built for User Mode Linux. UML requires no special support in
    the host kernel, so can be used by any user of any linux system, provided
    they have enough free RAM for their guest's needs, though there are
    certain restrictions on network connectivity unless the adminstrator
    has pre-created TAP devices.
    </p>

    <h2>Connections to UML driver</h2>

    <p>
    The libvirt UML driver follows the QEMU driver in providing two
    types of connection. There is one privileged instance per host,
    which runs as root. This is called the "system" instance, and allows
    full use of all host resources. Then, there is a per-user unprivileged
    "session", instance. This has more restricted capabilities, and may
    require the host administrator to setup certain resources ahead of
    time to allow full integration with the network. Example connection
    URIs are
    </p>

    <pre>
    uml:///session                       (local access to per-user instance)
    uml+unix:///session                  (local access to per-user instance)

    uml:///system                        (local access to system instance)
    uml+unix:///system                   (local access to system instance)
    uml://example.com/system             (remote access, TLS/x509)
    uml+tcp://example.com/system         (remote access, SASl/Kerberos)
    uml+ssh://root@example.com/system    (remote access, SSH tunnelled)
    </pre>

    <h2>Example XML configuration</h2>

    <p>
      User mode Linux driver only supports directly kernel boot at
      this time. A future driver enhancement may allow a paravirt
      bootloader in a similar style to Xen's pygrub. For now though,
      the UML kernel must be stored on the host and referenced
      explicitly in the "os" element. Since UML is a paravirtualized
      technology, the kernel "type" is set to "uml"
    </p>

    <p>
      There is not yet support for networking in the driver, but
      disks can be specified in the usual libvirt manner. The main
      variation is the target device naming scheme "ubd0", and
      bus type of "uml".
    </p>

    <p>
      Once booted the primary console is connected toa PTY, and
      thus accessible with "virsh console" or equivalent tools
    </p>

    <pre>
&lt;domain type='uml'&gt;
  &lt;name&gt;demo&lt;/name&gt;
  &lt;uuid&gt;b4433fc2-a22e-ffb3-0a3d-9c173b395800&lt;/uuid&gt;
  &lt;memory&gt;500000&lt;/memory&gt;
  &lt;currentMemory&gt;500000&lt;/currentMemory&gt;
  &lt;vcpu&gt;1&lt;/vcpu&gt;
  &lt;os&gt;
    &lt;type arch='x86_64'&gt;uml&lt;/type&gt;
    &lt;kernel&gt;/home/berrange/linux-uml-2.6.26-x86_64&lt;/kernel&gt;
  &lt;/os&gt;
  &lt;devices&gt;
    &lt;disk type='file' device='disk'&gt;
      &lt;source file='/home/berrange/FedoraCore6-AMD64-root_fs'/&gt;
      &lt;target dev='ubd0' bus='uml'/&gt;
    &lt;/disk&gt;
    &lt;console type='pty'/&gt;
  &lt;/devices&gt;
&lt;/domain&gt;
    </pre>
  </body>
</html>
