From: Paolo Bonzini <pbonzini@redhat.com>
To: Thomas Huth <thuth@redhat.com>,
qemu-devel@nongnu.org, Jason Wang <jasowang@redhat.com>
Cc: Eric Blake <eblake@redhat.com>, Markus Armbruster <armbru@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] net: Allow hubports to connect to other netdevs
Date: Wed, 10 Jan 2018 15:47:18 +0100 [thread overview]
Message-ID: <0a4ce09b-560b-1ef7-492c-aa88cf805fcc@redhat.com> (raw)
In-Reply-To: <1515594755-12138-1-git-send-email-thuth@redhat.com>
On 10/01/2018 15:32, Thomas Huth wrote:
> QEMU can emulate hubs to connect NICs and netdevs. This is currently
> primarily used for the mis-named 'vlan' feature of the networking
> subsystem. Now the 'vlan' feature has been marked as deprecated, since
> its name is rather confusing and the users often rather mis-configure
> their network when trying to use it. But while the 'vlan' parameter
> should be removed at one point in time, the basic idea of emulating
> a hub in QEMU is still good: It's useful for bundling up the output of
> multiple NICs into one single l2tp netdev for example.
>
> Now to be able to use the hubport feature without 'vlan's, there is one
> missing piece: The possibility to connect a hubport to a netdev, too.
> This patch adds this possibility by introducing a new "netdev=..."
> parameter to the hubports.
>
> To bundle up the output of multiple NICs into one socket netdev, you can
> now run QEMU with these parameters for example:
>
> qemu-system-ppc64 ... -netdev socket,id=s1,connect=:11122 \
> -netdev hubport,hubid=1,id=h1,netdev=s1 \
> -netdev hubport,hubid=1,id=h2 -device e1000,netdev=h2 \
> -netdev hubport,hubid=1,id=h3 -device virtio-net-pci,netdev=h3
>
> For using the socket netdev, you have got to start another QEMU as the
> receiving side first, for example with network dumping enabled:
>
> qemu-system-x86_64 -M isapc -netdev socket,id=s0,listen=:11122 \
> -device ne2k_isa,netdev=s0 \
> -object filter-dump,id=f1,netdev=s0,file=/tmp/dump.dat
>
> After the ppc64 guest tried to boot from both NICs, you can see in the
> dump file (using Wireshark, for example), that the output of both NICs
> (the e1000 and the virtio-net-pci) has been successfully transfered
> via the socket netdev in this case.
>
> Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
> See also the original discussion here for some more information:
> https://lists.gnu.org/archive/html/qemu-devel/2017-09/msg05650.html
>
> net/hub.c | 23 ++++++++++++++++++++++-
> qapi/net.json | 4 +++-
> qemu-options.hx | 8 +++++---
> 3 files changed, 30 insertions(+), 5 deletions(-)
>
> diff --git a/net/hub.c b/net/hub.c
> index 14b4eec..0638729 100644
> --- a/net/hub.c
> +++ b/net/hub.c
> @@ -13,6 +13,7 @@
> */
>
> #include "qemu/osdep.h"
> +#include "qapi/error.h"
> #include "monitor/monitor.h"
> #include "net/net.h"
> #include "clients.h"
> @@ -286,12 +287,32 @@ int net_init_hubport(const Netdev *netdev, const char *name,
> NetClientState *peer, Error **errp)
> {
> const NetdevHubPortOptions *hubport;
> + NetClientState *hubncs;
>
> assert(netdev->type == NET_CLIENT_DRIVER_HUBPORT);
> assert(!peer);
> hubport = &netdev->u.hubport;
>
> - net_hub_add_port(hubport->hubid, name);
> + hubncs = net_hub_add_port(hubport->hubid, name);
> + if (!hubncs) {
> + error_setg(errp, "failed to add port to hub %i with id '%s'",
> + hubport->hubid, name);
> + return -1;
> + }
> +
> + if (hubport->has_netdev) {
> + NetClientState *hubpeer;
> +
> + hubpeer = qemu_find_netdev(hubport->netdev);
> + if (!hubpeer) {
> + error_setg(errp, "netdev '%s' not found", hubport->netdev);
> + return -1;
> + }
> + assert(!hubncs->peer && !hubpeer->peer);
> + hubncs->peer = hubpeer;
> + hubpeer->peer = hubncs;
> + }
> +
> return 0;
> }
>
> diff --git a/qapi/net.json b/qapi/net.json
> index 4beff5d..e41e046 100644
> --- a/qapi/net.json
> +++ b/qapi/net.json
> @@ -410,12 +410,14 @@
> # Connect two or more net clients through a software hub.
> #
> # @hubid: hub identifier number
> +# @netdev: used to connect hub to a netdev instead of a device (since 2.12)
> #
> # Since: 1.2
> ##
> { 'struct': 'NetdevHubPortOptions',
> 'data': {
> - 'hubid': 'int32' } }
> + 'hubid': 'int32',
> + '*netdev': 'str' } }
>
> ##
> # @NetdevNetmapOptions:
> diff --git a/qemu-options.hx b/qemu-options.hx
> index 678181c..9ec4af7 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -2017,7 +2017,7 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev,
> #endif
> "-netdev vhost-user,id=str,chardev=dev[,vhostforce=on|off]\n"
> " configure a vhost-user network, backed by a chardev 'dev'\n"
> - "-netdev hubport,id=str,hubid=n\n"
> + "-netdev hubport,id=str,hubid=n[,netdev=nd]\n"
> " configure a hub port on QEMU VLAN 'n'\n", QEMU_ARCH_ALL)
> DEF("net", HAS_ARG, QEMU_OPTION_net,
> "-net nic[,vlan=n][,netdev=nd][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]\n"
> @@ -2445,13 +2445,15 @@ vde_switch -F -sock /tmp/myswitch
> qemu-system-i386 linux.img -net nic -net vde,sock=/tmp/myswitch
> @end example
>
> -@item -netdev hubport,id=@var{id},hubid=@var{hubid}
> +@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.
> +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]
>
>
Thank you very much!
What is the next step for deprecating vlans? I guess
1) removing the vlan property from DEFINE_NIC_PROPERTIES
2) removing the vlan property from -net, defaulting to vlan 0
3) only allow exactly two -net options, one for the backend (creating a
netdev) and one from the front-end (filling in nd_table)
?
Thanks,
Paolo
next prev parent reply other threads:[~2018-01-10 14:47 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-10 14:32 [Qemu-devel] [PATCH] net: Allow hubports to connect to other netdevs Thomas Huth
2018-01-10 14:47 ` Paolo Bonzini [this message]
2018-01-10 15:06 ` Thomas Huth
2018-01-15 7:40 ` Jason Wang
2018-01-15 17:36 ` Thomas Huth
2018-01-15 18:06 ` Thomas Huth
2018-01-16 5:54 ` Jason Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0a4ce09b-560b-1ef7-492c-aa88cf805fcc@redhat.com \
--to=pbonzini@redhat.com \
--cc=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=jasowang@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).