[libvirt] [PATCH] Expose SLIRP attributes

Laine Stump laine at laine.org
Fri Mar 28 10:16:43 UTC 2014


On 03/28/2014 10:47 AM, Richard W.M. Jones wrote:
> On Fri, Mar 28, 2014 at 10:33:39AM +0200, Laine Stump wrote:
>> Beyond that, a question not with your patch, but with qemu's
>> implemenation - does it always assume that the gateway address is
>> $network.1 ?
> Actually network.2.  The default addresses are:
>
>                            network: 10.0.2.0/24 (ie. mask 255.255.255.0)
>                    default gateway: 10.0.2.2
>                         dns server: 10.0.2.3
>  dhcp start / normal guest address: 10.0.2.15
>
> It _is_ possible to change the gateway address, by specifying the
> (confusingly named) 'host=' parameter.  As you suggested I think this
> could be mapped to a gateway XML attribute, although libguestfs would
> not need to use it.

Ah, good. I didn't see that in the parameters that I found (why is my
first reaction now to do a google search instead of looking at the man
page? What is wrong with me?? :-P).

In that case, I think that the XML should be

  <ip address='guest's IP address' prefix='prefix for network'
      gateway='host IP address according to guest'
      dns='DNS server IP given in DHCP response (and answering requests)'/>

I think that

* address should be mandatory

* prefix should default to the natural prefix for that particular
address (we have a function somewhere in the network conf or driver code
that already does this)

* gateway should default to

      address & ~(0xffffffff<<(32-prefix)) + 1

* dns should default to gateway (I know this doesn't match qemu's
default, but we shouldn't be designing our XML based on qemu's default,
nor should we be assuming that their default will remain unchanged in
the future - we've been burned by that before. Rather, we should make
the defaults as similar to what we do in other parts of libvirt as
possible).

As for the setting of qemu's options:

* qemu's "network" option should be filled in with

      $(gateway & ~(0xffffffff<<(32-prefix)) / $prefix

* qemu's "host" should be filled in with $gateway

* qemu's "dns" should be filled in with $dns

* qemu's "dhcpstart" should be filled in with $address

(do we also want to add a "domain" attribute, which would default to
empty, and be put into qemu's "dnssearch" option?)


When I saw the list of options, I briefly considered that we should
support restricted, but on reading the details it turns out that option
*completely* shuts down network traffic, even to the host, and you need
to add forwarding rules to individually enable what you want. Although
that might be useful in some cases, it is very different from libvirt
networks' "isolated" vs. forward modes, meaning I don't have a clear
idea of a way to make it fit nicely with existing paradigms, so I won't
pursue it for now (or later, unless someone specifically requests it :-)

>
> Rich.
>
> ----------------------------------------------------------------------
>
> Full parameters:
>
>        -netdev user,id=id[,option][,option][,...]
>        -net user[,option][,option][,...]
>            Use the user mode network stack which requires no administrator
>            privilege to run. Valid options are:
>
>            vlan=n
>                Connect user mode stack to VLAN n (n = 0 is the default).
>
>            id=id
>            name=name
>                Assign symbolic name for use in monitor commands.
>
>            net=addr[/mask]
>                Set IP network address the guest will see. Optionally specify
>                the netmask, either in the form a.b.c.d or as number of valid
>                top-most bits. Default is 10.0.2.0/24.
>
>            host=addr
>                Specify the guest-visible address of the host. Default is the
>                2nd IP in the guest network, i.e. x.x.x.2.
>
>            restrict=on|off
>                If this option is enabled, the guest will be isolated, i.e. it
>                will not be able to contact the host and no guest IP packets
>                will be routed over the host to the outside. This option does
>                not affect any explicitly set forwarding rules.
>
>            hostname=name
>                Specifies the client hostname reported by the built-in DHCP
>                server.
>
>            dhcpstart=addr
>                Specify the first of the 16 IPs the built-in DHCP server can
>                assign. Default is the 15th to 31st IP in the guest network,
>                i.e. x.x.x.15 to x.x.x.31.
>
>            dns=addr
>                Specify the guest-visible address of the virtual nameserver.
>                The address must be different from the host address. Default is
>                the 3rd IP in the guest network, i.e. x.x.x.3.
>
>            dnssearch=domain
>                Provides an entry for the domain-search list sent by the built-
>                in DHCP server. More than one domain suffix can be transmitted
>                by specifying this option multiple times. If supported, this
>                will cause the guest to automatically try to append the given
>                domain suffix(es) in case a domain name can not be resolved.
>
>                Example:
>
>                        qemu -net user,dnssearch=mgmt.example.org,dnssearch=example.org [...]
>
>            tftp=dir
>                When using the user mode network stack, activate a built-in
>                TFTP server. The files in dir will be exposed as the root of a
>                TFTP server.  The TFTP client on the guest must be configured
>                in binary mode (use the command "bin" of the Unix TFTP client).
>
>            bootfile=file
>                When using the user mode network stack, broadcast file as the
>                BOOTP filename. In conjunction with tftp, this can be used to
>                network boot a guest from a local directory.
>
>                Example (using pxelinux):
>                        qemu-system-i386 -hda linux.img -boot n -net user,tftp=/path/to/tftp/files,bootfile=/pxelinux.0
>
>            smb=dir[,smbserver=addr]
>                When using the user mode network stack, activate a built-in SMB
>                server so that Windows OSes can access to the host files in dir
>                transparently. The IP address of the SMB server can be set to
>                addr. By default the 4th IP in the guest network is used, i.e.
>                x.x.x.4.
>
>                In the guest Windows OS, the line:
>
>                        10.0.2.4 smbserver
>
>                must be added in the file C:\WINDOWS\LMHOSTS (for windows
>                9x/Me) or C:\WINNT\SYSTEM32\DRIVERS\ETC\LMHOSTS (Windows
>                NT/2000).
>
>                Then dir can be accessed in \\smbserver\qemu.
>
>                Note that a SAMBA server must be installed on the host OS.
>                QEMU was tested successfully with smbd versions from Red Hat 9,
>                Fedora Core 3 and OpenSUSE 11.x.
>




More information about the libvir-list mailing list