
menu "UML Network Devices"
	depends on NET

# UML virtual driver
config UML_NET
	bool "Virtual network device"
	help
        While the User-Mode port cannot directly talk to any physical
        hardware devices, this choice and the following transport options
        provide one or more virtual network devices through which the UML
        kernels can talk to each other, the host, and with the host's help,
        machines on the outside world.

        For more information, including explanations of the networking and
        sample configurations, see
        <http://user-mode-linux.sourceforge.net/networking.html>.

        If you'd like to be able to enable networking in the User-Mode
        linux environment, say Y; otherwise say N.  Note that you must
        enable at least one of the following transport options to actually
        make use of UML networking.

config UML_NET_ETHERTAP
	bool "Ethertap transport"
	depends on UML_NET
	help
        The Ethertap User-Mode Linux network transport allows a single
        running UML to exchange packets with its host over one of the
        host's Ethertap devices, such as /dev/tap0.  Additional running
        UMLs can use additional Ethertap devices, one per running UML.
        While the UML believes it's on a (multi-device, broadcast) virtual
        Ethernet network, it's in fact communicating over a point-to-point
        link with the host.

        To use this, your host kernel must have support for Ethertap
        devices.  Also, if your host kernel is 2.4.x, it must have 
        CONFIG_NETLINK_DEV configured as Y or M.

        For more information, see
        <http://user-mode-linux.sourceforge.net/networking.html>  That site
        has examples of the UML command line to use to enable Ethertap
        networking.

        If you'd like to set up an IP network with the host and/or the
        outside world, say Y to this, the Daemon Transport and/or the 
        Slip Transport.  You'll need at least one of them, but may choose
        more than one without conflict.  If you don't need UML networking,
        say N.

config UML_NET_TUNTAP
	bool "TUN/TAP transport"
	depends on UML_NET
	help
        The UML TUN/TAP network transport allows a UML instance to exchange
        packets with the host over a TUN/TAP device.  This option will only
        work with a 2.4 host, unless you've applied the TUN/TAP patch to
        your 2.2 host kernel.

        To use this transport, your host kernel must have support for TUN/TAP
        devices, either built-in or as a module.

config UML_NET_SLIP
	bool "SLIP transport"
	depends on UML_NET
	help
        The slip User-Mode Linux network transport allows a running UML to
        network with its host over a point-to-point link.  Unlike Ethertap,
        which can carry any Ethernet frame (and hence even non-IP packets),
        the slip transport can only carry IP packets.

        To use this, your host must support slip devices.

        For more information, see
        <http://user-mode-linux.sourceforge.net/networking.html>.  That site
        has examples of the UML command line to use to enable slip
        networking, and details of a few quirks with it.

        The Ethertap Transport is preferred over slip because of its
        limitations.  If you prefer slip, however, say Y here.  Otherwise
        choose the Multicast transport (to network multiple UMLs on 
        multiple hosts), Ethertap (to network with the host and the
        outside world), and/or the Daemon transport (to network multiple
        UMLs on a single host).  You may choose more than one without
        conflict.  If you don't need UML networking, say N.

config UML_NET_DAEMON
	bool "Daemon transport"
	depends on UML_NET
	help
        This User-Mode Linux network transport allows one or more running
        UMLs on a single host to communicate with each other, but not to
        the host.

        To use this form of networking, you'll need to run the UML
        networking daemon on the host.

        For more information, see
        <http://user-mode-linux.sourceforge.net/networking.html>  That site
        has examples of the UML command line to use to enable Daemon
        networking.

        If you'd like to set up a network with other UMLs on a single host,
        say Y.  If you need a network between UMLs on multiple physical
        hosts, choose the Multicast Transport.  To set up a network with
        the host and/or other IP machines, say Y to the Ethertap or Slip
        transports.  You'll need at least one of them, but may choose
        more than one without conflict.  If you don't need UML networking,
        say N.

config UML_NET_MCAST
	bool "Multicast transport"
	depends on UML_NET
	help
        This Multicast User-Mode Linux network transport allows multiple
        UMLs (even ones running on different host machines!) to talk to
        each other over a virtual ethernet network.  However, it requires
        at least one UML with one of the other transports to act as a
        bridge if any of them need to be able to talk to their hosts or any
        other IP machines.

        To use this, your host kernel(s) must support IP Multicasting.

        For more information, see
        <http://user-mode-linux.sourceforge.net/networking.html>  That site
        has examples of the UML command line to use to enable Multicast
        networking, and notes about the security of this approach.

        If you need UMLs on multiple physical hosts to communicate as if
        they shared an Ethernet network, say Y.  If you need to communicate
        with other IP machines, make sure you select one of the other
        transports (possibly in addition to Multicast; they're not
        exclusive).  If you don't need to network UMLs say N to each of
        the transports.

config UML_NET_PCAP
	bool "pcap transport"
	depends on UML_NET && BROKEN
	help
	The pcap transport makes a pcap packet stream on the host look
	like an ethernet device inside UML.  This is useful for making 
	UML act as a network monitor for the host.  You must have libcap
	installed in order to build the pcap transport into UML.

        For more information, see
        <http://user-mode-linux.sourceforge.net/networking.html>  That site
        has examples of the UML command line to use to enable this option.

	If you intend to use UML as a network monitor for the host, say
	Y here.  Otherwise, say N.

config UML_NET_SLIRP
	bool "SLiRP transport"
	depends on UML_NET
	help
        The SLiRP User-Mode Linux network transport allows a running UML
        to network by invoking a program that can handle SLIP encapsulated
        packets.  This is commonly (but not limited to) the application
        known as SLiRP, a program that can re-socket IP packets back onto
        the host on which it is run.  Only IP packets are supported,
        unlike other network transports that can handle all Ethernet
        frames.  In general, slirp allows the UML the same IP connectivity
        to the outside world that the host user is permitted, and unlike
        other transports, SLiRP works without the need of root level
        privleges, setuid binaries, or SLIP devices on the host.  This
        also means not every type of connection is possible, but most
        situations can be accomodated with carefully crafted slirp
        commands that can be passed along as part of the network device's
        setup string.  The effect of this transport on the UML is similar
        that of a host behind a firewall that masquerades all network
        connections passing through it (but is less secure).
	
        To use this you should first have slirp compiled somewhere
        accessible on the host, and have read its documentation.  If you
        don't need UML networking, say N.
	
        Startup example: "eth0=slirp,FE:FD:01:02:03:04,/usr/local/bin/slirp"

endmenu

