[Qemu-devel] [PATCH] qemu-doc: Rework the network options chapter to make "-net" less prominent

Thomas Huth posted 1 patch 6 years, 1 month ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/1520576005-27647-1-git-send-email-thuth@redhat.com
Test checkpatch passed
Test docker-build@min-glib passed
Test docker-mingw@fedora passed
Test docker-quick@centos6 passed
Test ppcbe passed
Test ppcle passed
Test s390x passed
There is a newer version of this series
qemu-options.hx | 210 ++++++++++++++++++++++++++++----------------------------
1 file changed, 105 insertions(+), 105 deletions(-)
[Qemu-devel] [PATCH] qemu-doc: Rework the network options chapter to make "-net" less prominent
Posted by Thomas Huth 6 years, 1 month ago
"-net" is clearly a legacy option. Yet we still use it in almost all
examples in the qemu documentation, and many other spots in the network
chapter. We should make it less prominent that users are not lured into
using it so often anymore. So instead of starting the network chapter with
"-net nic" and documenting "-net <backend>" below "-netdev <backend>"
everywhere, all the "-net" related documentation is now moved to the end
of the chapter. The new "--nic" option is moved to the beginning of the
chapter instead, with a new example that should demonstrate how "--nic"
can be used to shortcut "--device" with "--netdev".
And the examples in this chapter are changed to use the "--device" and
"--netdev" options or "--nic" instead of "-net nic -net <backend>".

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 qemu-options.hx | 210 ++++++++++++++++++++++++++++----------------------------
 1 file changed, 105 insertions(+), 105 deletions(-)

diff --git a/qemu-options.hx b/qemu-options.hx
index 6585058..8ee87ad 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -2045,41 +2045,40 @@ DEF("net", HAS_ARG, QEMU_OPTION_net,
     "                old way to initialize a host network interface\n"
     "                (use the -netdev option if possible instead)\n", QEMU_ARCH_ALL)
 STEXI
-@item -net nic[,vlan=@var{n}][,netdev=@var{nd}][,macaddr=@var{mac}][,model=@var{type}] [,name=@var{name}][,addr=@var{addr}][,vectors=@var{v}]
-@findex -net
-Configure or create an on-board (or machine default) Network Interface Card
-(NIC) and connect it either to VLAN @var{n} (@var{n} = 0 is the default), or
-to the netdev @var{nd}. The NIC is an e1000 by default on the PC
-target. Optionally, the MAC address can be changed to @var{mac}, the
-device address set to @var{addr} (PCI cards only),
-and a @var{name} can be assigned for use in monitor commands.
-Optionally, for PCI cards, you can specify the number @var{v} of MSI-X vectors
-that the card should have; this option currently only affects virtio cards; set
-@var{v} = 0 to disable MSI-X. If no @option{-net} option is specified, a single
-NIC is created.  QEMU can emulate several different models of network card.
-Valid values for @var{type} are
-@code{virtio}, @code{i82551}, @code{i82557b}, @code{i82559er},
-@code{ne2k_pci}, @code{ne2k_isa}, @code{pcnet}, @code{rtl8139},
-@code{e1000}, @code{smc91c111}, @code{lance} and @code{mcf_fec}.
-Not all devices are supported on all targets.  Use @code{-net nic,model=help}
-for a list of available devices for your target.
-
-@item -netdev user,id=@var{id}[,@var{option}][,@var{option}][,...]
-@findex -netdev
-@item -net user[,@var{option}][,@var{option}][,...]
-Use the user mode network stack which requires no administrator
+@item --nic [tap|bridge|user|l2tpv3|vde|netmap|vhost-user|socket][,...][,mac=macaddr][,model=mn]
+
+This option is a shortcut for configuring both, the on-board (default) guest
+NIC hardware and the host network backend in one go. The host backend options
+are the same as with the corresponding @option{--netdev} options below.
+The guest NIC model can be set with @option{model=@var{modelname}}.
+Use @option{model=help} to list the available device types.
+The hardware MAC address can be set with @option{mac=@var{macaddr}}.
+
+The following two example do exactly the same, to show how @option{--nic} can
+be used to shorten the command line length (note that the e1000 is the default
+on i386, so the @option{model=e1000} parameter could even be omitted here, too):
+@example
+qemu-system-i386 --netdev user,id=n1,ipv6=off --device=e1000,netdev=n1,mac=52:54:98:76:54:32
+qemu-system-i386 --nic user,ipv6=off,model=e1000,mac=52:54:98:76:54:32
+@end example
+
+@item --nic none
+Indicate that no network devices should be configured. It is used to override
+the default configuration (default NIC with @option{--net user} backend) which
+is activated if no other networking options are provided.
+
+@item --netdev user,id=@var{id}[,@var{option}][,@var{option}][,...]
+@findex --netdev
+Configure user mode host network backend which requires no administrator
 privilege to run. Valid options are:
 
 @table @option
-@item vlan=@var{n}
-Connect user mode stack to VLAN @var{n} (@var{n} = 0 is the default).
-
 @item id=@var{id}
-@itemx name=@var{name}
 Assign symbolic name for use in monitor commands.
 
-@option{ipv4} and @option{ipv6} specify that either IPv4 or IPv6 must
-be enabled.  If neither is specified both protocols are enabled.
+@item ipv4=on|off and ipv6=on|off
+Specify that either IPv4 or IPv6 must be enabled. If neither is specified
+both protocols are enabled.
 
 @item net=@var{addr}[/@var{mask}]
 Set IP network address the guest will see. Optionally specify the netmask,
@@ -2131,7 +2130,7 @@ can not be resolved.
 
 Example:
 @example
-qemu -net user,dnssearch=mgmt.example.org,dnssearch=example.org [...]
+qemu-system-i386 --nic user,dnssearch=mgmt.example.org,dnssearch=example.org
 @end example
 
 @item tftp=@var{dir}
@@ -2147,7 +2146,8 @@ a guest from a local directory.
 
 Example (using pxelinux):
 @example
-qemu-system-i386 -hda linux.img -boot n -net user,tftp=/path/to/tftp/files,bootfile=/pxelinux.0
+qemu-system-i386 --hda linux.img --boot n --device e1000,netdev=n1 \
+    --netdev user,id=n1,tftp=/path/to/tftp/files,bootfile=/pxelinux.0
 @end example
 
 @item smb=@var{dir}[,smbserver=@var{addr}]
@@ -2166,8 +2166,6 @@ or @file{C:\WINNT\SYSTEM32\DRIVERS\ETC\LMHOSTS} (Windows NT/2000).
 Then @file{@var{dir}} can be accessed in @file{\\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.
 
 @item hostfwd=[tcp|udp]:[@var{hostaddr}]:@var{hostport}-[@var{guestaddr}]:@var{guestport}
 Redirect incoming TCP or UDP connections to the host port @var{hostport} to
@@ -2182,7 +2180,7 @@ screen 0, use the following:
 
 @example
 # on the host
-qemu-system-i386 -net user,hostfwd=tcp:127.0.0.1:6001-:6000 [...]
+qemu-system-i386 --nic user,hostfwd=tcp:127.0.0.1:6001-:6000
 # this host xterm should open in the guest X11 server
 xterm -display :1
 @end example
@@ -2192,7 +2190,7 @@ the guest, use the following:
 
 @example
 # on the host
-qemu-system-i386 -net user,hostfwd=tcp::5555-:23 [...]
+qemu-system-i386 --device e1000,netdev=n1 --netdev user,id=n1,hostfwd=tcp::5555-:23
 telnet localhost 5555
 @end example
 
@@ -2211,7 +2209,7 @@ lifetime, like in the following example:
 @example
 # open 10.10.1.1:4321 on bootup, connect 10.0.2.100:1234 to it whenever
 # the guest accesses it
-qemu -net user,guestfwd=tcp:10.0.2.100:1234-tcp:10.10.1.1:4321 [...]
+qemu-system-i386 --nic user,guestfwd=tcp:10.0.2.100:1234-tcp:10.10.1.1:4321
 @end example
 
 Or you can execute a command on every TCP connection established by the guest,
@@ -2220,7 +2218,8 @@ so that QEMU behaves similar to an inetd process for that virtual server:
 @example
 # call "netcat 10.10.1.1 4321" on every TCP connection to 10.0.2.100:1234
 # and connect the TCP stream to its stdin/stdout
-qemu -net 'user,guestfwd=tcp:10.0.2.100:1234-cmd:netcat 10.10.1.1 4321'
+qemu-system-i386 --device e1000,netdev=n1 \
+  --netdev 'user,id=n1,guestfwd=tcp:10.0.2.100:1234-cmd:netcat 10.10.1.1 4321'
 @end example
 
 @end table
@@ -2230,9 +2229,8 @@ processed and applied to -net user. Mixing them with the new configuration
 syntax gives undefined results. Their use for new applications is discouraged
 as they will be removed from future versions.
 
-@item -netdev tap,id=@var{id}[,fd=@var{h}][,ifname=@var{name}][,script=@var{file}][,downscript=@var{dfile}][,br=@var{bridge}][,helper=@var{helper}]
-@itemx -net tap[,vlan=@var{n}][,name=@var{name}][,fd=@var{h}][,ifname=@var{name}][,script=@var{file}][,downscript=@var{dfile}][,br=@var{bridge}][,helper=@var{helper}]
-Connect the host TAP network interface @var{name} to VLAN @var{n}.
+@item --netdev tap,id=@var{id}[,fd=@var{h}][,ifname=@var{name}][,script=@var{file}][,downscript=@var{dfile}][,br=@var{bridge}][,helper=@var{helper}]
+Configure a host TAP network backend with ID @var{id}.
 
 Use the network script @var{file} to configure it and the network script
 @var{dfile} to deconfigure it. If @var{name} is not provided, the OS
@@ -2253,7 +2251,7 @@ Examples:
 
 @example
 #launch a QEMU instance with the default network script
-qemu-system-i386 linux.img -net nic -net tap
+qemu-system-i386 linux.img --nic tap
 @end example
 
 @example
@@ -2267,12 +2265,11 @@ qemu-system-i386 linux.img \
 @example
 #launch a QEMU instance with the default network helper to
 #connect a TAP device to bridge br0
-qemu-system-i386 linux.img \
-                 -net nic -net tap,"helper=/path/to/qemu-bridge-helper"
+qemu-system-i386 linux.img --device virtio-net-pci,netdev=n1 \
+        --netdev tap,id=n1,"helper=/path/to/qemu-bridge-helper"
 @end example
 
-@item -netdev bridge,id=@var{id}[,br=@var{bridge}][,helper=@var{helper}]
-@itemx -net bridge[,vlan=@var{n}][,name=@var{name}][,br=@var{bridge}][,helper=@var{helper}]
+@item --netdev bridge,id=@var{id}[,br=@var{bridge}][,helper=@var{helper}]
 Connect a host TAP network interface to a host bridge device.
 
 Use the network helper @var{helper} to configure the TAP interface and
@@ -2285,21 +2282,20 @@ Examples:
 @example
 #launch a QEMU instance with the default network helper to
 #connect a TAP device to bridge br0
-qemu-system-i386 linux.img -net bridge -net nic,model=virtio
+qemu-system-i386 linux.img --netdev bridge,id=n1 --device virtio-net,netdev=n1
 @end example
 
 @example
 #launch a QEMU instance with the default network helper to
 #connect a TAP device to bridge qemubr0
-qemu-system-i386 linux.img -net bridge,br=qemubr0 -net nic,model=virtio
+qemu-system-i386 linux.img --netdev bridge,br=qemubr0,id=n1 --device virtio-net,netdev=n1
 @end example
 
-@item -netdev socket,id=@var{id}[,fd=@var{h}][,listen=[@var{host}]:@var{port}][,connect=@var{host}:@var{port}]
-@itemx -net socket[,vlan=@var{n}][,name=@var{name}][,fd=@var{h}] [,listen=[@var{host}]:@var{port}][,connect=@var{host}:@var{port}]
+@item --netdev socket,id=@var{id}[,fd=@var{h}][,listen=[@var{host}]:@var{port}][,connect=@var{host}:@var{port}]
 
-Connect the VLAN @var{n} to a remote VLAN in another QEMU virtual
-machine using a TCP socket connection. If @option{listen} is
-specified, QEMU waits for incoming connections on @var{port}
+This host network backend can be used to connect the guest's network to
+another QEMU virtual machine using a TCP socket connection. If @option{listen}
+is specified, QEMU waits for incoming connections on @var{port}
 (@var{host} is optional). @option{connect} is used to connect to
 another QEMU instance using the @option{listen} option. @option{fd}=@var{h}
 specifies an already opened TCP socket.
@@ -2308,21 +2304,19 @@ Example:
 @example
 # launch a first QEMU instance
 qemu-system-i386 linux.img \
-                 -net nic,macaddr=52:54:00:12:34:56 \
-                 -net socket,listen=:1234
-# connect the VLAN 0 of this instance to the VLAN 0
-# of the first instance
+                 --device e1000,netdev=n1,mac=52:54:00:12:34:56 \
+                 --netdev socket,id=n1,listen=:1234
+# connect the network of this instance to the network of the first instance
 qemu-system-i386 linux.img \
-                 -net nic,macaddr=52:54:00:12:34:57 \
-                 -net socket,connect=127.0.0.1:1234
+                 --device e1000,netdev=n2,mac=52:54:00:12:34:57 \
+                 --netdev socket,id=n2,connect=127.0.0.1:1234
 @end example
 
-@item -netdev socket,id=@var{id}[,fd=@var{h}][,mcast=@var{maddr}:@var{port}[,localaddr=@var{addr}]]
-@itemx -net socket[,vlan=@var{n}][,name=@var{name}][,fd=@var{h}][,mcast=@var{maddr}:@var{port}[,localaddr=@var{addr}]]
+@item --netdev socket,id=@var{id}[,fd=@var{h}][,mcast=@var{maddr}:@var{port}[,localaddr=@var{addr}]]
 
-Create a VLAN @var{n} shared with another QEMU virtual
-machines using a UDP multicast socket, effectively making a bus for
-every QEMU with same multicast address @var{maddr} and @var{port}.
+Configure a socket host network backend to shared the guest's network traffic
+with another QEMU virtual machines using a UDP multicast socket, effectively
+making a bus for every QEMU with same multicast address @var{maddr} and @var{port}.
 NOTES:
 @enumerate
 @item
@@ -2339,25 +2333,24 @@ Example:
 @example
 # launch one QEMU instance
 qemu-system-i386 linux.img \
-                 -net nic,macaddr=52:54:00:12:34:56 \
-                 -net socket,mcast=230.0.0.1:1234
+                 --device e1000,netdev=n1,mac=52:54:00:12:34:56 \
+                 --netdev socket,id=n1,mcast=230.0.0.1:1234
 # launch another QEMU instance on same "bus"
 qemu-system-i386 linux.img \
-                 -net nic,macaddr=52:54:00:12:34:57 \
-                 -net socket,mcast=230.0.0.1:1234
+                 --device e1000,netdev=n2,mac=52:54:00:12:34:57 \
+                 --netdev socket,id=n2,mcast=230.0.0.1:1234
 # launch yet another QEMU instance on same "bus"
 qemu-system-i386 linux.img \
-                 -net nic,macaddr=52:54:00:12:34:58 \
-                 -net socket,mcast=230.0.0.1:1234
+                 --device e1000,netdev=n3,macaddr=52:54:00:12:34:58 \
+                 --netdev socket,id=n3,mcast=230.0.0.1:1234
 @end example
 
 Example (User Mode Linux compat.):
 @example
-# launch QEMU instance (note mcast address selected
-# is UML's default)
+# launch QEMU instance (note mcast address selected is UML's default)
 qemu-system-i386 linux.img \
-                 -net nic,macaddr=52:54:00:12:34:56 \
-                 -net socket,mcast=239.192.168.1:1102
+                 --device e1000,netdev=n1,mac=52:54:00:12:34:56 \
+                 --netdev socket,id=n1,mcast=239.192.168.1:1102
 # launch UML
 /path/to/linux ubd0=/path/to/root_fs eth0=mcast
 @end example
@@ -2365,14 +2358,13 @@ qemu-system-i386 linux.img \
 Example (send packets from host's 1.2.3.4):
 @example
 qemu-system-i386 linux.img \
-                 -net nic,macaddr=52:54:00:12:34:56 \
-                 -net socket,mcast=239.192.168.1:1102,localaddr=1.2.3.4
+                 --device e1000,netdev=n1,mac=52:54:00:12:34:56 \
+                 --netdev socket,id=n1,mcast=239.192.168.1:1102,localaddr=1.2.3.4
 @end example
 
-@item -netdev l2tpv3,id=@var{id},src=@var{srcaddr},dst=@var{dstaddr}[,srcport=@var{srcport}][,dstport=@var{dstport}],txsession=@var{txsession}[,rxsession=@var{rxsession}][,ipv6][,udp][,cookie64][,counter][,pincounter][,txcookie=@var{txcookie}][,rxcookie=@var{rxcookie}][,offset=@var{offset}]
-@itemx -net l2tpv3[,vlan=@var{n}][,name=@var{name}],src=@var{srcaddr},dst=@var{dstaddr}[,srcport=@var{srcport}][,dstport=@var{dstport}],txsession=@var{txsession}[,rxsession=@var{rxsession}][,ipv6][,udp][,cookie64][,counter][,pincounter][,txcookie=@var{txcookie}][,rxcookie=@var{rxcookie}][,offset=@var{offset}]
-Connect VLAN @var{n} to L2TPv3 pseudowire. L2TPv3 (RFC3391) is a popular
-protocol to transport Ethernet (and other Layer 2) data frames between
+@item --netdev l2tpv3,id=@var{id},src=@var{srcaddr},dst=@var{dstaddr}[,srcport=@var{srcport}][,dstport=@var{dstport}],txsession=@var{txsession}[,rxsession=@var{rxsession}][,ipv6][,udp][,cookie64][,counter][,pincounter][,txcookie=@var{txcookie}][,rxcookie=@var{rxcookie}][,offset=@var{offset}]
+Configure a L2TPv3 pseudowire host network backend. L2TPv3 (RFC3391) is a
+popular protocol to transport Ethernet (and other Layer 2) data frames between
 two systems. It is present in routers, firewalls and the Linux kernel
 (from version 3.3 onwards).
 
@@ -2425,14 +2417,13 @@ brctl addif br-lan vmtunnel0
 # on 4.3.2.1
 # launch QEMU instance - if your network has reorder or is very lossy add ,pincounter
 
-qemu-system-i386 linux.img -net nic -net l2tpv3,src=4.2.3.1,dst=1.2.3.4,udp,srcport=16384,dstport=16384,rxsession=0xffffffff,txsession=0xffffffff,counter
-
+qemu-system-i386 linux.img --device e1000,netdev=n1 \
+    --netdev l2tpv3,id=n1,src=4.2.3.1,dst=1.2.3.4,udp,srcport=16384,dstport=16384,rxsession=0xffffffff,txsession=0xffffffff,counter
 
 @end example
 
-@item -netdev vde,id=@var{id}[,sock=@var{socketpath}][,port=@var{n}][,group=@var{groupname}][,mode=@var{octalmode}]
-@itemx -net vde[,vlan=@var{n}][,name=@var{name}][,sock=@var{socketpath}] [,port=@var{n}][,group=@var{groupname}][,mode=@var{octalmode}]
-Connect VLAN @var{n} to PORT @var{n} of a vde switch running on host and
+@item --netdev vde,id=@var{id}[,sock=@var{socketpath}][,port=@var{n}][,group=@var{groupname}][,mode=@var{octalmode}]
+Configure VDE backend to connect to PORT @var{n} of a vde switch running on host and
 listening for incoming connections on @var{socketpath}. Use GROUP @var{groupname}
 and MODE @var{octalmode} to change default ownership and permissions for
 communication port. This option is only available if QEMU has been compiled
@@ -2443,20 +2434,10 @@ Example:
 # launch vde switch
 vde_switch -F -sock /tmp/myswitch
 # launch QEMU instance
-qemu-system-i386 linux.img -net nic -net vde,sock=/tmp/myswitch
+qemu-system-i386 linux.img --nic vde,sock=/tmp/myswitch
 @end example
 
-@item -netdev hubport,id=@var{id},hubid=@var{hubid}[,netdev=@var{nd}]
-
-Create a hub port on QEMU "vlan" @var{hubid}.
-
-The hubport netdev lets you connect a NIC to a QEMU "vlan" instead of a single
-netdev.  @code{-net} and @code{-device} with parameter @option{vlan} create the
-required hub automatically. Alternatively, you can also connect the hubport
-to another netdev with ID @var{nd} by using the @option{netdev=@var{nd}}
-option.
-
-@item -netdev vhost-user,chardev=@var{id}[,vhostforce=on|off][,queues=n]
+@item --netdev vhost-user,chardev=@var{id}[,vhostforce=on|off][,queues=n]
 
 Establish a vhost-user netdev, backed by a chardev @var{id}. The chardev should
 be a unix domain socket backed one. The vhost-user uses a specifically defined
@@ -2474,17 +2455,36 @@ qemu -m 512 -object memory-backend-file,id=mem,size=512M,mem-path=/hugetlbfs,sha
      -device virtio-net-pci,netdev=net0
 @end example
 
-@item --nic [tap|bridge|user|l2tpv3|vde|netmap|vhost-user|socket][,...][,mac=macaddr]
+@item --netdev hubport,id=@var{id},hubid=@var{hubid}[,netdev=@var{nd}]
 
-This option is a shortcut for setting both, the on-board (default) guest NIC
-hardware and the host network backend in one go. The host backend options are
-the same as with the corresponding @option{--netdev} option. The guest NIC
-hardware MAC address can be set with @option{mac=@var{macaddr}}.
+Create a hub port on the emulated hub with ID @var{hubid}.
 
-@item --nic none
-Indicate that no network devices should be configured. It is used to override
-the default configuration (default NIC with @option{--net user} backend) which
-is activated if no other networking options are provided.
+The hubport netdev lets you connect a NIC to a QEMU emulated hub instead of a
+single netdev. @code{--net} and @code{--device} with the parameter @option{vlan}
+(deprecated), or @code{--nic hubport} can also be used to connect a
+network device or a NIC to a hub. Alternatively, you can also connect the
+hubport to another netdev with ID @var{nd} by using the @option{netdev=@var{nd}}
+option.
+
+@item -net nic[,vlan=@var{n}][,netdev=@var{nd}][,macaddr=@var{mac}][,model=@var{type}] [,name=@var{name}][,addr=@var{addr}][,vectors=@var{v}]
+@findex -net
+Legacy option to configure or create an on-board (or machine default) Network
+Interface Card(NIC) and connect it either to the emulated hub port ("vlan")
+with number @var{n} (@var{n} = 0 is the default), or to the netdev @var{nd}.
+The NIC is an e1000 by default on the PC target. Optionally, the MAC address
+can be changed to @var{mac}, the device address set to @var{addr} (PCI cards
+only), and a @var{name} can be assigned for use in monitor commands.
+Optionally, for PCI cards, you can specify the number @var{v} of MSI-X vectors
+that the card should have; this option currently only affects virtio cards; set
+@var{v} = 0 to disable MSI-X. If no @option{-net} option is specified, a single
+NIC is created.  QEMU can emulate several different models of network card.
+Use @code{-net nic,model=help} for a list of available devices for your target.
+
+@item -net user|tap|bridge|socket|l2tpv3|vde[,...][,vlan=@var{n}][,name=@var{name}]
+Configure a host network backend (with the options corresponding to the same
+@option{--netdev} option) and connect it to the emulated hub ("vlan") with the
+number @var{n} (default is number 0). Use @var{name} to specify the name of the
+hub port.
 ETEXI
 
 STEXI
-- 
1.8.3.1


Re: [Qemu-devel] [PATCH] qemu-doc: Rework the network options chapter to make "-net" less prominent
Posted by Eric Blake 6 years, 1 month ago
On 03/09/2018 12:13 AM, Thomas Huth wrote:
> "-net" is clearly a legacy option. Yet we still use it in almost all
> examples in the qemu documentation, and many other spots in the network
> chapter. We should make it less prominent that users are not lured into
> using it so often anymore. So instead of starting the network chapter with
> "-net nic" and documenting "-net <backend>" below "-netdev <backend>"
> everywhere, all the "-net" related documentation is now moved to the end
> of the chapter. The new "--nic" option is moved to the beginning of the
> chapter instead, with a new example that should demonstrate how "--nic"
> can be used to shortcut "--device" with "--netdev".
> And the examples in this chapter are changed to use the "--device" and
> "--netdev" options or "--nic" instead of "-net nic -net <backend>".
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>   qemu-options.hx | 210 ++++++++++++++++++++++++++++----------------------------
>   1 file changed, 105 insertions(+), 105 deletions(-)
> 

> -@item -netdev user,id=@var{id}[,@var{option}][,@var{option}][,...]
> -@findex -netdev
> -@item -net user[,@var{option}][,@var{option}][,...]
> -Use the user mode network stack which requires no administrator
> +@item --nic [tap|bridge|user|l2tpv3|vde|netmap|vhost-user|socket][,...][,mac=macaddr][,model=mn]
> +
> +This option is a shortcut for configuring both, the on-board (default) guest

s/both,/both/

> +NIC hardware and the host network backend in one go. The host backend options
> +are the same as with the corresponding @option{--netdev} options below.
> +The guest NIC model can be set with @option{model=@var{modelname}}.
> +Use @option{model=help} to list the available device types.
> +The hardware MAC address can be set with @option{mac=@var{macaddr}}.
> +
> +The following two example do exactly the same, to show how @option{--nic} can
> +be used to shorten the command line length (note that the e1000 is the default
> +on i386, so the @option{model=e1000} parameter could even be omitted here, too):
> +@example
> +qemu-system-i386 --netdev user,id=n1,ipv6=off --device=e1000,netdev=n1,mac=52:54:98:76:54:32
> +qemu-system-i386 --nic user,ipv6=off,model=e1000,mac=52:54:98:76:54:32
> +@end example

Nice example.

> +
> +@item --nic none
> +Indicate that no network devices should be configured. It is used to override
> +the default configuration (default NIC with @option{--net user} backend) which
> +is activated if no other networking options are provided.
> +
> +@item --netdev user,id=@var{id}[,@var{option}][,@var{option}][,...]
> +@findex --netdev
> +Configure user mode host network backend which requires no administrator
>   privilege to run. Valid options are:
> @@ -2166,8 +2166,6 @@ or @file{C:\WINNT\SYSTEM32\DRIVERS\ETC\LMHOSTS} (Windows NT/2000).
>   Then @file{@var{dir}} can be accessed in @file{\\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.
>   

This change makes sense, but is somewhat unrelated to -net.  Worth 
splitting the patch?

>   @item hostfwd=[tcp|udp]:[@var{hostaddr}]:@var{hostport}-[@var{guestaddr}]:@var{guestport}
>   Redirect incoming TCP or UDP connections to the host port @var{hostport} to
> @@ -2182,7 +2180,7 @@ screen 0, use the following:
>   
>   @example
>   # on the host
> -qemu-system-i386 -net user,hostfwd=tcp:127.0.0.1:6001-:6000 [...]
> +qemu-system-i386 --nic user,hostfwd=tcp:127.0.0.1:6001-:6000

The trailing [...] makes sense here, why did you drop it?

>   # this host xterm should open in the guest X11 server
>   xterm -display :1
>   @end example
> @@ -2192,7 +2190,7 @@ the guest, use the following:
>   
>   @example
>   # on the host
> -qemu-system-i386 -net user,hostfwd=tcp::5555-:23 [...]
> +qemu-system-i386 --device e1000,netdev=n1 --netdev user,id=n1,hostfwd=tcp::5555-:23

and again.

Is it worth trying to use backslash-newline in long example lines, or 
are we okay with long lengths?

>   telnet localhost 5555
>   @end example
>   
> @@ -2211,7 +2209,7 @@ lifetime, like in the following example:
>   @example
>   # open 10.10.1.1:4321 on bootup, connect 10.0.2.100:1234 to it whenever
>   # the guest accesses it
> -qemu -net user,guestfwd=tcp:10.0.2.100:1234-tcp:10.10.1.1:4321 [...]
> +qemu-system-i386 --nic user,guestfwd=tcp:10.0.2.100:1234-tcp:10.10.1.1:4321
>   @end example

Again, the [...] seems like it is worth keeping.

>   
>   Or you can execute a command on every TCP connection established by the guest,
> @@ -2220,7 +2218,8 @@ so that QEMU behaves similar to an inetd process for that virtual server:
>   @example
>   # call "netcat 10.10.1.1 4321" on every TCP connection to 10.0.2.100:1234
>   # and connect the TCP stream to its stdin/stdout
> -qemu -net 'user,guestfwd=tcp:10.0.2.100:1234-cmd:netcat 10.10.1.1 4321'
> +qemu-system-i386 --device e1000,netdev=n1 \
> +  --netdev 'user,id=n1,guestfwd=tcp:10.0.2.100:1234-cmd:netcat 10.10.1.1 4321'

Ah, here you DID use a line break in a long example.


> -@item -netdev socket,id=@var{id}[,fd=@var{h}][,mcast=@var{maddr}:@var{port}[,localaddr=@var{addr}]]
> -@itemx -net socket[,vlan=@var{n}][,name=@var{name}][,fd=@var{h}][,mcast=@var{maddr}:@var{port}[,localaddr=@var{addr}]]
> +@item --netdev socket,id=@var{id}[,fd=@var{h}][,mcast=@var{maddr}:@var{port}[,localaddr=@var{addr}]]
>   
> -Create a VLAN @var{n} shared with another QEMU virtual
> -machines using a UDP multicast socket, effectively making a bus for
> -every QEMU with same multicast address @var{maddr} and @var{port}.
> +Configure a socket host network backend to shared the guest's network traffic

s/shared/share/

> +with another QEMU virtual machines using a UDP multicast socket, effectively
> +making a bus for every QEMU with same multicast address @var{maddr} and @var{port}.

> +
> +@item -net nic[,vlan=@var{n}][,netdev=@var{nd}][,macaddr=@var{mac}][,model=@var{type}] [,name=@var{name}][,addr=@var{addr}][,vectors=@var{v}]

Worth spelling this --net instead of -net?

> +@findex -net

We can have multiple @findex listings; should we list both @findex -net 
and @findex --net?

> +Legacy option to configure or create an on-board (or machine default) Network
> +Interface Card(NIC) and connect it either to the emulated hub port ("vlan")
> +with number @var{n} (@var{n} = 0 is the default), or to the netdev @var{nd}.
> +The NIC is an e1000 by default on the PC target. Optionally, the MAC address
> +can be changed to @var{mac}, the device address set to @var{addr} (PCI cards
> +only), and a @var{name} can be assigned for use in monitor commands.
> +Optionally, for PCI cards, you can specify the number @var{v} of MSI-X vectors
> +that the card should have; this option currently only affects virtio cards; set
> +@var{v} = 0 to disable MSI-X. If no @option{-net} option is specified, a single
> +NIC is created.  QEMU can emulate several different models of network card.
> +Use @code{-net nic,model=help} for a list of available devices for your target.
> +
> +@item -net user|tap|bridge|socket|l2tpv3|vde[,...][,vlan=@var{n}][,name=@var{name}]
> +Configure a host network backend (with the options corresponding to the same
> +@option{--netdev} option) and connect it to the emulated hub ("vlan") with the
> +number @var{n} (default is number 0). Use @var{name} to specify the name of the
> +hub port.
>   ETEXI
>   
>   STEXI
> 

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org

Re: [Qemu-devel] [PATCH] qemu-doc: Rework the network options chapter to make "-net" less prominent
Posted by Thomas Huth 6 years, 1 month ago
On 09.03.2018 15:36, Eric Blake wrote:
> On 03/09/2018 12:13 AM, Thomas Huth wrote:
>> "-net" is clearly a legacy option. Yet we still use it in almost all
>> examples in the qemu documentation, and many other spots in the network
>> chapter. We should make it less prominent that users are not lured into
>> using it so often anymore. So instead of starting the network chapter
>> with
>> "-net nic" and documenting "-net <backend>" below "-netdev <backend>"
>> everywhere, all the "-net" related documentation is now moved to the end
>> of the chapter. The new "--nic" option is moved to the beginning of the
>> chapter instead, with a new example that should demonstrate how "--nic"
>> can be used to shortcut "--device" with "--netdev".
>> And the examples in this chapter are changed to use the "--device" and
>> "--netdev" options or "--nic" instead of "-net nic -net <backend>".
>>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>>   qemu-options.hx | 210
>> ++++++++++++++++++++++++++++----------------------------
>>   1 file changed, 105 insertions(+), 105 deletions(-)
>>
> 
>> -@item -netdev user,id=@var{id}[,@var{option}][,@var{option}][,...]
>> -@findex -netdev
>> -@item -net user[,@var{option}][,@var{option}][,...]
>> -Use the user mode network stack which requires no administrator
>> +@item --nic
>> [tap|bridge|user|l2tpv3|vde|netmap|vhost-user|socket][,...][,mac=macaddr][,model=mn]
>>
>> +
>> +This option is a shortcut for configuring both, the on-board
>> (default) guest
> 
> s/both,/both/
> 
>> +NIC hardware and the host network backend in one go. The host backend
>> options
>> +are the same as with the corresponding @option{--netdev} options below.
>> +The guest NIC model can be set with @option{model=@var{modelname}}.
>> +Use @option{model=help} to list the available device types.
>> +The hardware MAC address can be set with @option{mac=@var{macaddr}}.
>> +
>> +The following two example do exactly the same, to show how
>> @option{--nic} can
>> +be used to shorten the command line length (note that the e1000 is
>> the default
>> +on i386, so the @option{model=e1000} parameter could even be omitted
>> here, too):
>> +@example
>> +qemu-system-i386 --netdev user,id=n1,ipv6=off
>> --device=e1000,netdev=n1,mac=52:54:98:76:54:32
>> +qemu-system-i386 --nic user,ipv6=off,model=e1000,mac=52:54:98:76:54:32
>> +@end example
> 
> Nice example.

... but looks like I even got it wrong - it should be "--device e1000",
without "=". Will fix it.

>> +
>> +@item --nic none
>> +Indicate that no network devices should be configured. It is used to
>> override
>> +the default configuration (default NIC with @option{--net user}
>> backend) which
>> +is activated if no other networking options are provided.
>> +
>> +@item --netdev user,id=@var{id}[,@var{option}][,@var{option}][,...]
>> +@findex --netdev
>> +Configure user mode host network backend which requires no administrator
>>   privilege to run. Valid options are:
>> @@ -2166,8 +2166,6 @@ or @file{C:\WINNT\SYSTEM32\DRIVERS\ETC\LMHOSTS}
>> (Windows NT/2000).
>>   Then @file{@var{dir}} can be accessed in @file{\\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.
>>   
> 
> This change makes sense, but is somewhat unrelated to -net.  Worth
> splitting the patch?

Not sure whether it's really worth the effort ... I think I'll just
mention it in the patch description, ok?

>>   @item
>> hostfwd=[tcp|udp]:[@var{hostaddr}]:@var{hostport}-[@var{guestaddr}]:@var{guestport}
>>
>>   Redirect incoming TCP or UDP connections to the host port
>> @var{hostport} to
>> @@ -2182,7 +2180,7 @@ screen 0, use the following:
>>     @example
>>   # on the host
>> -qemu-system-i386 -net user,hostfwd=tcp:127.0.0.1:6001-:6000 [...]
>> +qemu-system-i386 --nic user,hostfwd=tcp:127.0.0.1:6001-:6000
> 
> The trailing [...] makes sense here, why did you drop it?

Since we're incredibly inconsistent with that. Some examples do have
that "[...]", many others don't have it. Since the amount of examples
without it is larger than the amount of examples with it, I think it's
more consistent to drop it here.

I guess I should mention this in the commit message, too.

>> +@item -net
>> nic[,vlan=@var{n}][,netdev=@var{nd}][,macaddr=@var{mac}][,model=@var{type}]
>> [,name=@var{name}][,addr=@var{addr}][,vectors=@var{v}]
> 
> Worth spelling this --net instead of -net?

Yes, that's more consistent.

>> +@findex -net
> 
> We can have multiple @findex listings; should we list both @findex -net
> and @findex --net?

I think we should finally also use double dashes for all @findex entries
(if the option is longer than just one letter).

 Thomas

Re: [Qemu-devel] [PATCH] qemu-doc: Rework the network options chapter to make "-net" less prominent
Posted by Eric Blake 6 years, 1 month ago
On 03/09/2018 11:41 AM, Thomas Huth wrote:
> On 09.03.2018 15:36, Eric Blake wrote:
>> On 03/09/2018 12:13 AM, Thomas Huth wrote:
>>> "-net" is clearly a legacy option. Yet we still use it in almost all
>>> examples in the qemu documentation, and many other spots in the network
>>> chapter. We should make it less prominent that users are not lured into
>>> using it so often anymore. So instead of starting the network chapter
>>> with
>>> "-net nic" and documenting "-net <backend>" below "-netdev <backend>"
>>> everywhere, all the "-net" related documentation is now moved to the end
>>> of the chapter. The new "--nic" option is moved to the beginning of the
>>> chapter instead, with a new example that should demonstrate how "--nic"
>>> can be used to shortcut "--device" with "--netdev".
>>> And the examples in this chapter are changed to use the "--device" and
>>> "--netdev" options or "--nic" instead of "-net nic -net <backend>".
>>>

>>> +@example
>>> +qemu-system-i386 --netdev user,id=n1,ipv6=off
>>> --device=e1000,netdev=n1,mac=52:54:98:76:54:32
>>> +qemu-system-i386 --nic user,ipv6=off,model=e1000,mac=52:54:98:76:54:32
>>> +@end example
>>
>> Nice example.
> 
> ... but looks like I even got it wrong - it should be "--device e1000",
> without "=". Will fix it.

Really?  As I understand it, both long-opt spellings work ('--long=opt' 
as one arg, and '--long' 'opt' as two args).  So the only reason to drop 
'=' would be consistency with other examples.

>>> @@ -2166,8 +2166,6 @@ or @file{C:\WINNT\SYSTEM32\DRIVERS\ETC\LMHOSTS}
>>> (Windows NT/2000).
>>>    Then @file{@var{dir}} can be accessed in @file{\\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.
>>>    
>>
>> This change makes sense, but is somewhat unrelated to -net.  Worth
>> splitting the patch?
> 
> Not sure whether it's really worth the effort ... I think I'll just
> mention it in the patch description, ok?

Yes, if you don't split, at least mention it (if a reviewer questioned 
it in an earlier revision, then an improved commit message serves as the 
preemptive reason for the next person looking at the next revision).


>>> -qemu-system-i386 -net user,hostfwd=tcp:127.0.0.1:6001-:6000 [...]
>>> +qemu-system-i386 --nic user,hostfwd=tcp:127.0.0.1:6001-:6000
>>
>> The trailing [...] makes sense here, why did you drop it?
> 
> Since we're incredibly inconsistent with that. Some examples do have
> that "[...]", many others don't have it. Since the amount of examples
> without it is larger than the amount of examples with it, I think it's
> more consistent to drop it here.
> 
> I guess I should mention this in the commit message, too.

Yes, mention that it's intentional, and I'll go along with it.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org

Re: [Qemu-devel] [PATCH] qemu-doc: Rework the network options chapter to make "-net" less prominent
Posted by Thomas Huth 6 years, 1 month ago
On 09.03.2018 20:00, Eric Blake wrote:
> On 03/09/2018 11:41 AM, Thomas Huth wrote:
>> On 09.03.2018 15:36, Eric Blake wrote:
>>> On 03/09/2018 12:13 AM, Thomas Huth wrote:
>>>> "-net" is clearly a legacy option. Yet we still use it in almost all
>>>> examples in the qemu documentation, and many other spots in the network
>>>> chapter. We should make it less prominent that users are not lured into
>>>> using it so often anymore. So instead of starting the network chapter
>>>> with
>>>> "-net nic" and documenting "-net <backend>" below "-netdev <backend>"
>>>> everywhere, all the "-net" related documentation is now moved to the
>>>> end
>>>> of the chapter. The new "--nic" option is moved to the beginning of the
>>>> chapter instead, with a new example that should demonstrate how "--nic"
>>>> can be used to shortcut "--device" with "--netdev".
>>>> And the examples in this chapter are changed to use the "--device" and
>>>> "--netdev" options or "--nic" instead of "-net nic -net <backend>".
>>>>
> 
>>>> +@example
>>>> +qemu-system-i386 --netdev user,id=n1,ipv6=off
>>>> --device=e1000,netdev=n1,mac=52:54:98:76:54:32
>>>> +qemu-system-i386 --nic user,ipv6=off,model=e1000,mac=52:54:98:76:54:32
>>>> +@end example
>>>
>>> Nice example.
>>
>> ... but looks like I even got it wrong - it should be "--device e1000",
>> without "=". Will fix it.
> 
> Really?  As I understand it, both long-opt spellings work ('--long=opt'
> as one arg, and '--long' 'opt' as two args).  So the only reason to drop
> '=' would be consistency with other examples.

$ qemu-system-x86_64 --device=e1000
qemu-system-x86_64: --device=e1000: invalid option

Does at least not work for me.

 Thomas

Re: [Qemu-devel] [PATCH] qemu-doc: Rework the network options chapter to make "-net" less prominent
Posted by Eric Blake 6 years, 1 month ago
On 03/09/2018 04:07 PM, Thomas Huth wrote:

>>> ... but looks like I even got it wrong - it should be "--device e1000",
>>> without "=". Will fix it.
>>
>> Really?  As I understand it, both long-opt spellings work ('--long=opt'
>> as one arg, and '--long' 'opt' as two args).  So the only reason to drop
>> '=' would be consistency with other examples.

Well, that would be true if we used getopt_long_only().  But we don't 
(we stupidly rolled our own command line parser, meaning it has quirks 
that are different from everything else that uses the standardized parser).

> 
> $ qemu-system-x86_64 --device=e1000
> qemu-system-x86_64: --device=e1000: invalid option
> 
> Does at least not work for me.

Maybe our QemuOpts parser should be taught to make it work.  But that's 
orthogonal, so you are right that for now we just always document things 
as the two-arg form, since the one-arg form with '=' isn't implemented.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org

Re: [Qemu-devel] [PATCH] qemu-doc: Rework the network options chapter to make "-net" less prominent
Posted by Paolo Bonzini 6 years, 1 month ago
On 09/03/2018 07:13, Thomas Huth wrote:
> +
> +@item --nic none
> +Indicate that no network devices should be configured. It is used to override
> +the default configuration (default NIC with @option{--net user} backend) which

the default @option{--nic user} configuration (default model and
user-mode networking backend), which...

> +is activated if no other networking options are provided.
> +

> -qemu-system-i386 -net user,hostfwd=tcp::5555-:23 [...]
> +qemu-system-i386 --device e1000,netdev=n1 --netdev user,id=n1,hostfwd=tcp::5555-:23

I would use --nic here.  --device/--netdev is covered by
docs/qdev-device-use.txt, which should be updated separately (it even
has -usbdevice still).

> -qemu -net 'user,guestfwd=tcp:10.0.2.100:1234-cmd:netcat 10.10.1.1 4321'
> +qemu-system-i386 --device e1000,netdev=n1 \
> +  --netdev 'user,id=n1,guestfwd=tcp:10.0.2.100:1234-cmd:netcat 10.10.1.1 4321'

Same here.

Single vs. double-dash options is a confusing one and I'm not sure how
to proceed.  On one hand single-dash is what everyone uses, on the other
double-dash is a bit more consistent with e.g. qemu-img.  But:

1) the command-line of qemu-img is anyway completely different from QEMU's

2) mixing them is the worst of both worlds.

I honestly would use single-dashes, and add a note that double-dash
options are supported as well.

Paolo

Re: [Qemu-devel] [PATCH] qemu-doc: Rework the network options chapter to make "-net" less prominent
Posted by Thomas Huth 6 years, 1 month ago
On 09.03.2018 15:41, Paolo Bonzini wrote:
> On 09/03/2018 07:13, Thomas Huth wrote:
>> +
>> +@item --nic none
>> +Indicate that no network devices should be configured. It is used to override
>> +the default configuration (default NIC with @option{--net user} backend) which
> 
> the default @option{--nic user} configuration (default model and
> user-mode networking backend), which...

Technically, this isn't true, is it? The default configuration is still
"-net nic -net user", i.e. you still get a "vlan" hub inbetween the two,
don't you?

>> +is activated if no other networking options are provided.
>> +
> 
>> -qemu-system-i386 -net user,hostfwd=tcp::5555-:23 [...]
>> +qemu-system-i386 --device e1000,netdev=n1 --netdev user,id=n1,hostfwd=tcp::5555-:23
> 
> I would use --nic here.  --device/--netdev is covered by
> docs/qdev-device-use.txt, which should be updated separately (it even
> has -usbdevice still).

I don't think that the average user looks at qdev-device-use.txt, so
IMHO we should give examples for both, --nic and --netdev/--device in
our qemu-doc.html. But ok, I've got a dedicated example in the first
paragraph about "--nic" already, so I think it should be fine to use
--nic in even more places.

>> -qemu -net 'user,guestfwd=tcp:10.0.2.100:1234-cmd:netcat 10.10.1.1 4321'
>> +qemu-system-i386 --device e1000,netdev=n1 \
>> +  --netdev 'user,id=n1,guestfwd=tcp:10.0.2.100:1234-cmd:netcat 10.10.1.1 4321'
> 
> Same here.
> 
> Single vs. double-dash options is a confusing one and I'm not sure how
> to proceed.  On one hand single-dash is what everyone uses, on the other
> double-dash is a bit more consistent with e.g. qemu-img.

I guess that QEMU newbies are also rather using double dashes since this
is what you're used to from other command line tools.

> But:
> 
> 1) the command-line of qemu-img is anyway completely different from QEMU's

Sure, but at least the basic handling should IMHO be similar.

> 2) mixing them is the worst of both worlds.
> 
> I honestly would use single-dashes, and add a note that double-dash
> options are supported as well.

If we decide to go with single dashes forever, we should urgently remove
the BiteSizeTask from the Wiki again.
But I think we rather should try to do switch to double dashes. It's
really just more consistent and less confusing for newbies.

 Thomas