qapi flattening
v2 cover qapi flattening
This patch series flattens the structures that are used by OptsVisitor, namely NumaOptions and Netdev (NetLegacy is removed in the process).
Patch 1 is needed, otherwise qemu segfaults when OptsVisitor visits a flat struct. Patch 1 and 2 are identical to v1, while the networking related patches are completely rewritten.
The NetLegacy and Netdev structs are merged, this way we won't have to work-around the type system. This requires a few extra checks in net_client_init1, but allows us to simply use Netdev everywhere, without using void *, union, or the NetClientOpts union.
Please review.
Kővágó, Zoltán (6):
qapi: support implicit structs in OptsVisitor
qapi: convert NumaOptions into a flat union
net: remove NetLegacy struct
net: use Netdev instead of NetClientOptions in client init
qapi: change Netdev into a flat union
qapi: reorder NetdevBase and Netdev
hw/arm/musicpal.c | 2 +- hw/core/qdev-properties-system.c | 2 +- hw/net/allwinner_emac.c | 2 +- hw/net/cadence_gem.c | 2 +- hw/net/dp8393x.c | 2 +- hw/net/e1000.c | 2 +- hw/net/eepro100.c | 2 +- hw/net/etraxfs_eth.c | 2 +- hw/net/fsl_etsec/etsec.c | 2 +- hw/net/lan9118.c | 2 +- hw/net/lance.c | 2 +- hw/net/mcf_fec.c | 2 +- hw/net/milkymist-minimac2.c | 2 +- hw/net/mipsnet.c | 2 +- hw/net/ne2000-isa.c | 2 +- hw/net/ne2000.c | 2 +- hw/net/opencores_eth.c | 2 +- hw/net/pcnet-pci.c | 2 +- hw/net/rocker/rocker_fp.c | 2 +- hw/net/rtl8139.c | 2 +- hw/net/smc91c111.c | 2 +- hw/net/spapr_llan.c | 2 +- hw/net/stellaris_enet.c | 2 +- hw/net/vhost_net.c | 18 +++--- hw/net/virtio-net.c | 6 +- hw/net/vmxnet3.c | 2 +- hw/net/xen_nic.c | 2 +- hw/net/xgmac.c | 2 +- hw/net/xilinx_axienet.c | 2 +- hw/net/xilinx_ethlite.c | 2 +- hw/usb/dev-network.c | 2 +- include/net/net.h | 4 +- monitor.c | 14 ++--- net/clients.h | 20 +++--- net/dump.c | 8 +-- net/hub.c | 24 ++++---- net/l2tpv3.c | 8 +-- net/net.c | 129 +++++++++++++++++++-------------------- net/netmap.c | 6 +- net/slirp.c | 8 +-- net/socket.c | 10 +-- net/tap-win32.c | 8 +-- net/tap.c | 28 ++++----- net/vde.c | 8 +-- net/vhost-user.c | 14 ++--- numa.c | 2 +- qapi-schema.json | 129 +++++++++++++++++++++++---------------- qapi/opts-visitor.c | 15 +++++ 48 files changed, 278 insertions(+), 239 deletions(-)
Signature · 1 line
2.4.5
PATCH v2 1/6 qapi: support implicit structs in OptsVisitor
They are required for flat unions (you still have to allocate the structs).
--- qapi/opts-visitor.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
qapi/opts-visitor.c +15 -0
@@ -149,6 +149,12 @@ opts_start_struct(Visitor *v, void **obj, const char *kind, } } +static void +opts_start_implicit_struct (Visitor *v,void **obj,size_t size,Error **errp) +{ +opts_start_struct (v, obj,NULL ,NULL , size, errp); +} +static gboolean ghr_true (gpointer ign_key,gpointer ign_value,gpointer ign_user_data)
@@ -185,6 +191,12 @@ opts_end_struct(Visitor *v, Error **errp) ov->fake_id_opt =NULL ; } +static void +opts_end_implicit_struct (Visitor *v,Error **errp) +{ +opts_end_struct (v, errp); +} +static GQueue *lookup_distinct (const OptsVisitor *ov,const char *name,Error **errp)
@@ -508,6 +520,9 @@ opts_visitor_new(const QemuOpts *opts) ov->visitor.start_struct = &opts_start_struct; ov->visitor.end_struct = &opts_end_struct; + ov->visitor.start_implicit_struct = &opts_start_implicit_struct; + ov->visitor.end_implicit_struct = &opts_end_implicit_struct; + ov->visitor.start_list = &opts_start_list; ov->visitor.next_list = &opts_next_list; ov->visitor.end_list = &opts_end_list;
Signature · 1 line
2.4.5
PATCH v2 2/6 qapi: convert NumaOptions into a flat union
In reply to Kővágó, Zoltán--- numa.c | 2 +- qapi-schema.json | 47 ++++++++++++++++++++++++++++++++++++----------- 2 files changed, 37 insertions(+), 12 deletions(-)
numa.c +1 -1
@@ -140,7 +140,7 @@ static int parse_numa(void *opaque, QemuOpts *opts, Error **errp) }switch (object->kind) { -case NUMA_OPTIONS_KIND_NODE : +case NUMA_DRIVER_NODE :numa_node_parse (object->node, opts, &err);if (err) { goto error;
qapi-schema.json +36 -11
59 lines not on this page · raw message
Signature · 1 line
2.4.5
PATCH v2 3/6 net: remove NetLegacy struct
In reply to Kővágó, ZoltánNetLegacy is just Netdev with some extra fields (name, vlan) and an optional id. This patch merges the two structs, and net_client_init1 got some extra checks to make sure only accept valid -netdev command lines. This is some extra work, but allows us to uniformly manage both legacy -net and non-legacy -netdev in code.
--- net/net.c | 42 +++++++++++++++++++++--------------------- qapi-schema.json | 30 +++++++++--------------------- 2 files changed, 30 insertions(+), 42 deletions(-)
net/net.c +21 -21
@@ -911,17 +911,29 @@ static int (* const net_client_init_fun[NET_CLIENT_OPTIONS_KIND_MAX])( }; -static int net_client_init1 (const void *object,int is_netdev,Error **errp) +static int net_client_init1 (const Netdev *netdev,int is_netdev,Error **errp) { -const NetClientOptions *opts; +const NetClientOptions *opts = netdev->opts;const char *name;NetClientState *peer =NULL ;if (is_netdev) { -const Netdev *netdev = object; - opts = netdev->opts; name = netdev->id; +/* validate -netdev option: has id, no vlan or name */ +if (!netdev->has_id) { +error_setg (errp,QERR_MISSING_PARAMETER ,"id" ); +return -1 ; + } +if (netdev->has_name) { +error_setg (errp,QERR_INVALID_PARAMETER ,"name" ); +return -1 ; + } +if (netdev->has_vlan) { +error_setg (errp,QERR_INVALID_PARAMETER ,"vlan" ); +return -1 ; + } +if (opts->kind ==NET_CLIENT_OPTIONS_KIND_DUMP || opts->kind ==NET_CLIENT_OPTIONS_KIND_NIC || !net_client_init_fun[opts->kind]) {
@@ -930,10 +942,8 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp)return -1 ; } }else { -const NetLegacy *net = object; - opts = net->opts;/* missing optional values have been initialized to "all bits zero" */ - name = net->has_id ? net->id : net->name; + name = netdev->has_id ? netdev->id : netdev->name;if (opts->kind ==NET_CLIENT_OPTIONS_KIND_NONE ) {return 0 ;/* nothing to do */
@@ -954,7 +964,7 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp)/* Do not add to a vlan if it's a nic with a netdev= parameter. */ if (opts->kind !=NET_CLIENT_OPTIONS_KIND_NIC || !opts->nic->has_netdev) { - peer =net_hub_add_port (net->has_vlan ? net->vlan :0 ,NULL ); + peer =net_hub_add_port (netdev->has_vlan ? netdev->vlan :0 ,NULL ); } }
@@ -970,26 +980,16 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp) } -static void net_visit (Visitor *v,int is_netdev,void **object,Error **errp) -{ -if (is_netdev) { -visit_type_Netdev (v, (Netdev **)object,NULL , errp); - }else { -visit_type_NetLegacy (v, (NetLegacy **)object,NULL , errp); - } -} - -int net_client_init (QemuOpts *opts,int is_netdev,Error **errp) { -void *object =NULL ; +Netdev *object =NULL ;Error *err =NULL ;int ret =-1 ; {OptsVisitor *ov =opts_visitor_new (opts); -net_visit (opts_get_visitor (ov), is_netdev, &object, &err); +visit_type_Netdev (opts_get_visitor (ov), &object,NULL , &err);opts_visitor_cleanup (ov); }
@@ -1000,7 +1000,7 @@ int net_client_init(QemuOpts *opts, int is_netdev, Error **errp)if (object) {QapiDeallocVisitor *dv =qapi_dealloc_visitor_new (); -net_visit (qapi_dealloc_get_visitor (dv), is_netdev, &object,NULL ); +visit_type_Netdev (qapi_dealloc_get_visitor (dv), &object,NULL ,NULL );qapi_dealloc_visitor_cleanup (dv); }
qapi-schema.json +9 -21
@@ -2500,21 +2500,25 @@ 'vhost-user': 'NetdevVhostUserOptions' } } ## -# @NetLegacy +# @Netdev # -# Captures the configuration of a network device; legacy. +# Captures the configuration of a network device. # -# @vlan: #optional vlan number +# @vlan: #optional vlan number (legacy, forbidden with -netdev) # -# @id: #optional identifier for monitor commands +# @id: #optional identifier for monitor commands (required with -netdev) # # @name: #optional identifier for monitor commands, ignored if @id is present +# (legacy, forbidden with -netdev) # # @opts: device type specific properties (legacy) # # Since 1.2 +# +# @id #optional - since 2.4 +# @vlan, @name - since 2.4 ## -{ 'struct': 'NetLegacy', +{ 'struct': 'Netdev', 'data': { '*vlan': 'int32', '*id': 'str',
@@ -2522,22 +2526,6 @@ 'opts': 'NetClientOptions' } } ## -# @Netdev -# -# Captures the configuration of a network device. -# -# @id: identifier for monitor commands. -# -# @opts: device type specific properties -# -# Since 1.2 -## -{ 'struct': 'Netdev', - 'data': { - 'id': 'str', - 'opts': 'NetClientOptions' } } - -## # @InetSocketAddress # # Captures a socket address or address range in the Internet namespace.
Signature · 1 line
2.4.5
PATCH v2 4/6 net: use Netdev instead of NetClientOptions in client init
In reply to Kővágó, ZoltánThis way we no longer need NetClientOptions and can convert Netdev into a flat union.
--- net/clients.h | 20 ++++++++++---------- net/dump.c | 6 +++--- net/hub.c | 6 +++--- net/l2tpv3.c | 6 +++--- net/net.c | 29 ++++++++++++++--------------- net/netmap.c | 4 ++-- net/slirp.c | 6 +++--- net/socket.c | 6 +++--- net/tap-win32.c | 6 +++--- net/tap.c | 12 ++++++------ net/vde.c | 6 +++--- net/vhost-user.c | 6 +++--- 12 files changed, 56 insertions(+), 57 deletions(-)
net/clients.h +10 -10
@@ -27,39 +27,39 @@#include "net/net.h" #include "qapi-types.h" -int net_init_dump (const NetClientOptions *opts,const char *name, +int net_init_dump (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp);#ifdef CONFIG_SLIRP -int net_init_slirp (const NetClientOptions *opts,const char *name, +int net_init_slirp (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp);#endif -int net_init_hubport (const NetClientOptions *opts,const char *name, +int net_init_hubport (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp); -int net_init_socket (const NetClientOptions *opts,const char *name, +int net_init_socket (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp); -int net_init_tap (const NetClientOptions *opts,const char *name, +int net_init_tap (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp); -int net_init_bridge (const NetClientOptions *opts,const char *name, +int net_init_bridge (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp); -int net_init_l2tpv3 (const NetClientOptions *opts,const char *name, +int net_init_l2tpv3 (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp);#ifdef CONFIG_VDE -int net_init_vde (const NetClientOptions *opts,const char *name, +int net_init_vde (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp);#endif #ifdef CONFIG_NETMAP -int net_init_netmap (const NetClientOptions *opts,const char *name, +int net_init_netmap (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp);#endif -int net_init_vhost_user (const NetClientOptions *opts,const char *name, +int net_init_vhost_user (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp);#endif /* QEMU_NET_CLIENTS_H */
net/dump.c +3 -3
@@ -146,7 +146,7 @@ static int net_dump_init(NetClientState *peer, const char *device,return 0 ; } -int net_init_dump (const NetClientOptions *opts,const char *name, +int net_init_dump (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp) {int len;
@@ -154,8 +154,8 @@ int net_init_dump(const NetClientOptions *opts, const char *name,char def_file[128 ];const NetdevDumpOptions *dump; -assert (opts->kind ==NET_CLIENT_OPTIONS_KIND_DUMP ); - dump = opts->dump; +assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_DUMP ); + dump = netdev->opts->dump;assert (peer);
net/hub.c +3 -3
@@ -280,14 +280,14 @@ int net_hub_id_for_client(NetClientState *nc, int *id)return 0 ; } -int net_init_hubport (const NetClientOptions *opts,const char *name, +int net_init_hubport (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp) {const NetdevHubPortOptions *hubport; -assert (opts->kind ==NET_CLIENT_OPTIONS_KIND_HUBPORT ); +assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_HUBPORT );assert (!peer); - hubport = opts->hubport; + hubport = netdev->opts->hubport;net_hub_add_port (hubport->hubid, name);return 0 ;
net/l2tpv3.c +3 -3
@@ -524,7 +524,7 @@ static NetClientInfo net_l2tpv3_info = { .cleanup = net_l2tpv3_cleanup, }; -int net_init_l2tpv3 (const NetClientOptions *opts, +int net_init_l2tpv3 (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp) {
@@ -545,8 +545,8 @@ int net_init_l2tpv3(const NetClientOptions *opts, s->queue_tail =0 ; s->header_mismatch = false; -assert (opts->kind ==NET_CLIENT_OPTIONS_KIND_L2TPV3 ); - l2tpv3 = opts->l2tpv3; +assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_L2TPV3 ); + l2tpv3 = netdev->opts->l2tpv3;if (l2tpv3->has_ipv6 && l2tpv3->ipv6) { s->ipv6 = l2tpv3->ipv6;
net/net.c +14 -15
@@ -813,15 +813,15 @@ int qemu_find_nic_model(NICInfo *nd, const char * const *models,return -1 ; } -static int net_init_nic (const NetClientOptions *opts,const char *name, +static int net_init_nic (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp) {int idx;NICInfo *nd;const NetLegacyNicOptions *nic; -assert (opts->kind ==NET_CLIENT_OPTIONS_KIND_NIC ); - nic = opts->nic; +assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_NIC ); + nic = netdev->opts->nic; idx =nic_get_free_idx ();if (idx ==-1 || nb_nics >=MAX_NICS ) {
@@ -882,7 +882,7 @@ static int net_init_nic(const NetClientOptions *opts, const char *name,static int (*const net_client_init_fun[NET_CLIENT_OPTIONS_KIND_MAX ])( -const NetClientOptions *opts, +const Netdev *netdev,const char *name,NetClientState *peer,Error **errp) = { [NET_CLIENT_OPTIONS_KIND_NIC ] = net_init_nic,
@@ -913,7 +913,6 @@ static int (* const net_client_init_fun[NET_CLIENT_OPTIONS_KIND_MAX])(static int net_client_init1 (const Netdev *netdev,int is_netdev,Error **errp) { -const NetClientOptions *opts = netdev->opts;const char *name;NetClientState *peer =NULL ;
@@ -934,9 +933,9 @@ static int net_client_init1(const Netdev *netdev, int is_netdev, Error **errp)return -1 ; } -if (opts->kind ==NET_CLIENT_OPTIONS_KIND_DUMP || - opts->kind ==NET_CLIENT_OPTIONS_KIND_NIC || - !net_client_init_fun[opts->kind]) { +if (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_DUMP || + netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_NIC || + !net_client_init_fun[netdev->opts->kind]) {error_setg (errp,QERR_INVALID_PARAMETER_VALUE ,"type" ,"a netdev backend type" );return -1 ;
@@ -945,16 +944,16 @@ static int net_client_init1(const Netdev *netdev, int is_netdev, Error **errp)/* missing optional values have been initialized to "all bits zero" */ name = netdev->has_id ? netdev->id : netdev->name; -if (opts->kind ==NET_CLIENT_OPTIONS_KIND_NONE ) { +if (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_NONE ) {return 0 ;/* nothing to do */ } -if (opts->kind ==NET_CLIENT_OPTIONS_KIND_HUBPORT ) { +if (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_HUBPORT ) {error_setg (errp,QERR_INVALID_PARAMETER_VALUE ,"type" ,"a net type" );return -1 ; } -if (!net_client_init_fun[opts->kind]) { +if (!net_client_init_fun[netdev->opts->kind]) {error_setg (errp,QERR_INVALID_PARAMETER_VALUE ,"type" ,"a net backend type (maybe it is not compiled " "into this binary)" );
@@ -962,17 +961,17 @@ static int net_client_init1(const Netdev *netdev, int is_netdev, Error **errp) }/* Do not add to a vlan if it's a nic with a netdev= parameter. */ -if (opts->kind !=NET_CLIENT_OPTIONS_KIND_NIC || - !opts->nic->has_netdev) { +if (netdev->opts->kind !=NET_CLIENT_OPTIONS_KIND_NIC || + !netdev->opts->nic->has_netdev) { peer =net_hub_add_port (netdev->has_vlan ? netdev->vlan :0 ,NULL ); } } -if (net_client_init_fun[opts->kind](opts, name, peer, errp) <0 ) { +if (net_client_init_fun[netdev->opts->kind](netdev, name, peer, errp) <0 ) {/* FIXME drop when all init functions store an Error */ if (errp && !*errp) {error_setg (errp,QERR_DEVICE_INIT_FAILED , - NetClientOptionsKind_lookup[opts->kind]); + NetClientOptionsKind_lookup[netdev->opts->kind]); }return -1 ; }
net/netmap.c +2 -2
@@ -435,11 +435,11 @@ static NetClientInfo net_netmap_info = {* * ... -net netmap,ifname="..." */ -int net_init_netmap (const NetClientOptions *opts, +int net_init_netmap (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp) {/* FIXME error_setg(errp, ...) on failure */ -const NetdevNetmapOptions *netmap_opts = opts->netmap; +const NetdevNetmapOptions *netmap_opts = netdev->opts->netmap;NetClientState *nc;NetmapPriv me;NetmapState *s;
net/slirp.c +3 -3
@@ -736,7 +736,7 @@ static const char **slirp_dnssearch(const StringList *dnsname)return ret; } -int net_init_slirp (const NetClientOptions *opts,const char *name, +int net_init_slirp (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp) {/* FIXME error_setg(errp, ...) on failure */
@@ -746,8 +746,8 @@ int net_init_slirp(const NetClientOptions *opts, const char *name,const NetdevUserOptions *user;const char **dnssearch; -assert (opts->kind ==NET_CLIENT_OPTIONS_KIND_USER ); - user = opts->user; +assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_USER ); + user = netdev->opts->user; vnet = user->has_net ?g_strdup (user->net) : user->has_ip ? g_strdup_printf("%s/24", user->ip) :
net/socket.c +3 -3
@@ -699,15 +699,15 @@ static int net_socket_udp_init(NetClientState *peer,return 0 ; } -int net_init_socket (const NetClientOptions *opts,const char *name, +int net_init_socket (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp) {/* FIXME error_setg(errp, ...) on failure */ Error *err =NULL ;const NetdevSocketOptions *sock; -assert (opts->kind ==NET_CLIENT_OPTIONS_KIND_SOCKET ); - sock = opts->socket; +assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_SOCKET ); + sock = netdev->opts->socket;if (sock->has_fd + sock->has_listen + sock->has_connect + sock->has_mcast + sock->has_udp !=1 ) {
net/tap-win32.c +3 -3
@@ -761,14 +761,14 @@ static int tap_win32_init(NetClientState *peer, const char *model,return 0 ; } -int net_init_tap (const NetClientOptions *opts,const char *name, +int net_init_tap (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp) {/* FIXME error_setg(errp, ...) on failure */ const NetdevTapOptions *tap; -assert (opts->kind ==NET_CLIENT_OPTIONS_KIND_TAP ); - tap = opts->tap; +assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_TAP ); + tap = netdev->opts->tap;if (!tap->has_ifname) {error_report ("tap: no interface name" );
net/tap.c +6 -6
@@ -557,7 +557,7 @@ static int net_bridge_run_helper(const char *helper, const char *bridge, } } -int net_init_bridge (const NetClientOptions *opts,const char *name, +int net_init_bridge (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp) {const NetdevBridgeOptions *bridge;
@@ -565,8 +565,8 @@ int net_init_bridge(const NetClientOptions *opts, const char *name,TAPState *s;int fd, vnet_hdr; -assert (opts->kind ==NET_CLIENT_OPTIONS_KIND_BRIDGE ); - bridge = opts->bridge; +assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_BRIDGE ); + bridge = netdev->opts->bridge; helper = bridge->has_helper ? bridge->helper :DEFAULT_BRIDGE_HELPER ; br = bridge->has_br ? bridge->br :DEFAULT_BRIDGE_INTERFACE ;
@@ -716,7 +716,7 @@ static int get_fds(char *str, char *fds[], int max)return i; } -int net_init_tap (const NetClientOptions *opts,const char *name, +int net_init_tap (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp) {const NetdevTapOptions *tap;
@@ -728,8 +728,8 @@ int net_init_tap(const NetClientOptions *opts, const char *name,const char *vhostfdname;char ifname[128 ]; -assert (opts->kind ==NET_CLIENT_OPTIONS_KIND_TAP ); - tap = opts->tap; +assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_TAP ); + tap = netdev->opts->tap; queues = tap->has_queues ? tap->queues :1 ; vhostfdname = tap->has_vhostfd ? tap->vhostfd :NULL ;
net/vde.c +3 -3
@@ -109,14 +109,14 @@ static int net_vde_init(NetClientState *peer, const char *model,return 0 ; } -int net_init_vde (const NetClientOptions *opts,const char *name, +int net_init_vde (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp) {/* FIXME error_setg(errp, ...) on failure */ const NetdevVdeOptions *vde; -assert (opts->kind ==NET_CLIENT_OPTIONS_KIND_VDE ); - vde = opts->vde; +assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_VDE ); + vde = netdev->opts->vde;/* missing optional values have been initialized to "all bits zero" */ if (net_vde_init(peer, "vde", name, vde->sock, vde->port, vde->group,
net/vhost-user.c +3 -3
@@ -227,15 +227,15 @@ static int net_vhost_check_net(void *opaque, QemuOpts *opts, Error **errp)return 0 ; } -int net_init_vhost_user (const NetClientOptions *opts,const char *name, +int net_init_vhost_user (const Netdev *netdev,const char *name,NetClientState *peer,Error **errp) {uint32_t queues;const NetdevVhostUserOptions *vhost_user_opts;CharDriverState *chr; -assert (opts->kind ==NET_CLIENT_OPTIONS_KIND_VHOST_USER ); - vhost_user_opts = opts->vhost_user; +assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_VHOST_USER ); + vhost_user_opts = netdev->opts->vhost_user; chr =net_vhost_parse_chardev (vhost_user_opts, errp);if (!chr) {
Signature · 1 line
2.4.5
PATCH v2 5/6 qapi: change Netdev into a flat union
In reply to Kővágó, ZoltánExcept qapi-schema.json, this patch was generated by:
find . -name .git -prune -o -type f \! -name '*~' -print0 | \
xargs -0 sed -i \
-e 's/NetClientOptionsKind/NetClientDriver/g' \
-e 's/NET_CLIENT_OPTIONS_KIND_/NET_CLIENT_DRIVER_/g' \
-e 's/netdev->opts/netdev/g'---
Note for reviewers: not sure about Since declarations in Netdev. Is it ok this way, or should I just change it into `Since 2.4' because before it was a simple union?
hw/arm/musicpal.c | 2 +- hw/core/qdev-properties-system.c | 2 +- hw/net/allwinner_emac.c | 2 +- hw/net/cadence_gem.c | 2 +- hw/net/dp8393x.c | 2 +- hw/net/e1000.c | 2 +- hw/net/eepro100.c | 2 +- hw/net/etraxfs_eth.c | 2 +- hw/net/fsl_etsec/etsec.c | 2 +- hw/net/lan9118.c | 2 +- hw/net/lance.c | 2 +- hw/net/mcf_fec.c | 2 +- hw/net/milkymist-minimac2.c | 2 +- hw/net/mipsnet.c | 2 +- hw/net/ne2000-isa.c | 2 +- hw/net/ne2000.c | 2 +- hw/net/opencores_eth.c | 2 +- hw/net/pcnet-pci.c | 2 +- hw/net/rocker/rocker_fp.c | 2 +- hw/net/rtl8139.c | 2 +- hw/net/smc91c111.c | 2 +- hw/net/spapr_llan.c | 2 +- hw/net/stellaris_enet.c | 2 +- hw/net/vhost_net.c | 18 ++++----- hw/net/virtio-net.c | 6 +-- hw/net/vmxnet3.c | 2 +- hw/net/xen_nic.c | 2 +- hw/net/xgmac.c | 2 +- hw/net/xilinx_axienet.c | 2 +- hw/net/xilinx_ethlite.c | 2 +- hw/usb/dev-network.c | 2 +- include/net/net.h | 4 +- monitor.c | 14 +++---- net/dump.c | 6 +-- net/hub.c | 22 +++++------ net/l2tpv3.c | 6 +-- net/net.c | 84 ++++++++++++++++++++-------------------- net/netmap.c | 4 +- net/slirp.c | 6 +-- net/socket.c | 8 ++-- net/tap-win32.c | 6 +-- net/tap.c | 24 ++++++------ net/vde.c | 6 +-- net/vhost-user.c | 12 +++--- qapi-schema.json | 36 +++++++++++------ 45 files changed, 166 insertions(+), 154 deletions(-)
hw/arm/musicpal.c +1 -1
@@ -379,7 +379,7 @@ static void eth_cleanup(NetClientState *nc) }static NetClientInfo net_mv88w8618_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = eth_can_receive, .receive = eth_receive,
hw/core/qdev-properties-system.c +1 -1
@@ -229,7 +229,7 @@ static void set_netdev(Object *obj, Visitor *v, void *opaque, } queues =qemu_find_net_clients_except (str, peers, -NET_CLIENT_OPTIONS_KIND_NIC , +NET_CLIENT_DRIVER_NIC ,MAX_QUEUE_NUM );if (queues ==0 ) { err = -ENOENT ;
hw/net/allwinner_emac.c +1 -1
@@ -422,7 +422,7 @@ static const MemoryRegionOps aw_emac_mem_ops = { };static NetClientInfo net_aw_emac_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = aw_emac_can_receive, .receive = aw_emac_receive,
hw/net/cadence_gem.c +1 -1
@@ -1175,7 +1175,7 @@ static void gem_set_link(NetClientState *nc) }static NetClientInfo net_gem_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = gem_can_receive, .receive = gem_receive,
hw/net/dp8393x.c +1 -1
@@ -807,7 +807,7 @@ static void dp8393x_reset(DeviceState *dev) }static NetClientInfo net_dp83932_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = dp8393x_can_receive, .receive = dp8393x_receive,
hw/net/e1000.c +1 -1
@@ -1512,7 +1512,7 @@ pci_e1000_uninit(PCIDevice *dev) }static NetClientInfo net_e1000_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = e1000_can_receive, .receive = e1000_receive,
hw/net/eepro100.c +1 -1
@@ -1842,7 +1842,7 @@ static void pci_nic_uninit(PCIDevice *pci_dev) }static NetClientInfo net_eepro100_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = nic_can_receive, .receive = nic_receive,
hw/net/etraxfs_eth.c +1 -1
@@ -582,7 +582,7 @@ static const MemoryRegionOps eth_ops = { };static NetClientInfo net_etraxfs_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = eth_can_receive, .receive = eth_receive,
hw/net/fsl_etsec/etsec.c +1 -1
@@ -368,7 +368,7 @@ static void etsec_set_link_status(NetClientState *nc) }static NetClientInfo net_etsec_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = etsec_can_receive, .receive = etsec_receive,
hw/net/lan9118.c +1 -1
@@ -1310,7 +1310,7 @@ static const MemoryRegionOps lan9118_16bit_mem_ops = { };static NetClientInfo net_lan9118_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = lan9118_can_receive, .receive = lan9118_receive,
hw/net/lance.c +1 -1
@@ -92,7 +92,7 @@ static const MemoryRegionOps lance_mem_ops = { };static NetClientInfo net_lance_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = pcnet_can_receive, .receive = pcnet_receive,
hw/net/mcf_fec.c +1 -1
@@ -440,7 +440,7 @@ static const MemoryRegionOps mcf_fec_ops = { };static NetClientInfo net_mcf_fec_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = mcf_fec_can_receive, .receive = mcf_fec_receive,
hw/net/milkymist-minimac2.c +1 -1
@@ -443,7 +443,7 @@ static void milkymist_minimac2_reset(DeviceState *d) }static NetClientInfo net_milkymist_minimac2_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = minimac2_can_rx, .receive = minimac2_rx,
hw/net/mipsnet.c +1 -1
@@ -212,7 +212,7 @@ static const VMStateDescription vmstate_mipsnet = { };static NetClientInfo net_mipsnet_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = mipsnet_can_receive, .receive = mipsnet_receive,
hw/net/ne2000-isa.c +1 -1
@@ -42,7 +42,7 @@ typedef struct ISANE2000State { } ISANE2000State;static NetClientInfo net_ne2000_isa_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = ne2000_can_receive, .receive = ne2000_receive,
hw/net/ne2000.c +1 -1
@@ -703,7 +703,7 @@ void ne2000_setup_io(NE2000State *s, DeviceState *dev, unsigned size) }static NetClientInfo net_ne2000_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = ne2000_can_receive, .receive = ne2000_receive,
hw/net/opencores_eth.c +1 -1
@@ -473,7 +473,7 @@ static ssize_t open_eth_receive(NetClientState *nc, }static NetClientInfo net_open_eth_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = open_eth_can_receive, .receive = open_eth_receive,
hw/net/pcnet-pci.c +1 -1
@@ -271,7 +271,7 @@ static void pci_pcnet_uninit(PCIDevice *dev) }static NetClientInfo net_pci_pcnet_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = pcnet_can_receive, .receive = pcnet_receive,
hw/net/rocker/rocker_fp.c +1 -1
@@ -163,7 +163,7 @@ static void fp_port_set_link_status(NetClientState *nc) }static NetClientInfo fp_port_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = fp_port_can_receive, .receive = fp_port_receive,
hw/net/rtl8139.c +1 -1
@@ -3445,7 +3445,7 @@ static void rtl8139_set_link_status(NetClientState *nc) }static NetClientInfo net_rtl8139_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = rtl8139_can_receive, .receive = rtl8139_receive,
hw/net/smc91c111.c +1 -1
@@ -737,7 +737,7 @@ static const MemoryRegionOps smc91c111_mem_ops = { };static NetClientInfo net_smc91c111_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = smc91c111_can_receive, .receive = smc91c111_receive,
hw/net/spapr_llan.c +1 -1
@@ -188,7 +188,7 @@ static ssize_t spapr_vlan_receive(NetClientState *nc, const uint8_t *buf, }static NetClientInfo net_spapr_vlan_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = spapr_vlan_can_receive, .receive = spapr_vlan_receive,
hw/net/stellaris_enet.c +1 -1
@@ -452,7 +452,7 @@ static void stellaris_enet_reset(stellaris_enet_state *s) }static NetClientInfo net_stellaris_enet_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = stellaris_enet_can_receive, .receive = stellaris_enet_receive,
hw/net/vhost_net.c +9 -9
@@ -95,10 +95,10 @@ static const int *vhost_net_get_feature_bits(struct vhost_net *net)const int *feature_bits =0 ;switch (net->nc->info->type) { -case NET_CLIENT_OPTIONS_KIND_TAP : +case NET_CLIENT_DRIVER_TAP : feature_bits = kernel_feature_bits;break ; -case NET_CLIENT_OPTIONS_KIND_VHOST_USER : +case NET_CLIENT_DRIVER_VHOST_USER : feature_bits = user_feature_bits;break ;default :
@@ -125,7 +125,7 @@ void vhost_net_ack_features(struct vhost_net *net, uint64_t features)static int vhost_net_get_fd (NetClientState *backend) {switch (backend->info->type) { -case NET_CLIENT_OPTIONS_KIND_TAP : +case NET_CLIENT_DRIVER_TAP :return tap_get_fd (backend);default :fprintf (stderr,"vhost-net requires tap backend\n" );
@@ -237,7 +237,7 @@ static int vhost_net_start_one(struct vhost_net *net, net->nc->info->poll (net->nc, false); } -if (net->nc->info->type ==NET_CLIENT_OPTIONS_KIND_TAP ) { +if (net->nc->info->type ==NET_CLIENT_DRIVER_TAP ) {qemu_set_fd_handler (net->backend,NULL ,NULL ,NULL ); file.fd = net->backend;for (file.index =0 ; file.index < net->dev.nvqs; ++file.index) {
@@ -253,7 +253,7 @@ static int vhost_net_start_one(struct vhost_net *net,return 0 ; fail: file.fd =-1 ; -if (net->nc->info->type ==NET_CLIENT_OPTIONS_KIND_TAP ) { +if (net->nc->info->type ==NET_CLIENT_DRIVER_TAP ) {while (file.index-- >0 ) {const VhostOps *vhost_ops = net->dev.vhost_ops; int r = vhost_ops->vhost_call(&net->dev, VHOST_NET_SET_BACKEND,
@@ -276,14 +276,14 @@ static void vhost_net_stop_one(struct vhost_net *net, {struct vhost_vring_file file = { .fd =-1 }; -if (net->nc->info->type ==NET_CLIENT_OPTIONS_KIND_TAP ) { +if (net->nc->info->type ==NET_CLIENT_DRIVER_TAP ) {for (file.index =0 ; file.index < net->dev.nvqs; ++file.index) {const VhostOps *vhost_ops = net->dev.vhost_ops;int r = vhost_ops->vhost_call (&net->dev,VHOST_NET_SET_BACKEND , &file);assert (r >=0 ); } - }else if (net->nc->info->type ==NET_CLIENT_OPTIONS_KIND_VHOST_USER ) { + }else if (net->nc->info->type ==NET_CLIENT_DRIVER_VHOST_USER ) {for (file.index =0 ; file.index < net->dev.nvqs; ++file.index) {const VhostOps *vhost_ops = net->dev.vhost_ops; int r = vhost_ops->vhost_call(&net->dev, VHOST_RESET_OWNER,
@@ -400,10 +400,10 @@ VHostNetState *get_vhost_net(NetClientState *nc) }switch (nc->info->type) { -case NET_CLIENT_OPTIONS_KIND_TAP : +case NET_CLIENT_DRIVER_TAP : vhost_net =tap_get_vhost_net (nc);break ; -case NET_CLIENT_OPTIONS_KIND_VHOST_USER : +case NET_CLIENT_DRIVER_VHOST_USER : vhost_net =vhost_user_get_vhost_net (nc);break ;default :
hw/net/virtio-net.c +3 -3
@@ -398,7 +398,7 @@ static int peer_attach(VirtIONet *n, int index)return 0 ; } -if (nc->peer->info->type !=NET_CLIENT_OPTIONS_KIND_TAP ) { +if (nc->peer->info->type !=NET_CLIENT_DRIVER_TAP ) {return 0 ; }
@@ -413,7 +413,7 @@ static int peer_detach(VirtIONet *n, int index)return 0 ; } -if (nc->peer->info->type !=NET_CLIENT_OPTIONS_KIND_TAP ) { +if (nc->peer->info->type !=NET_CLIENT_DRIVER_TAP ) {return 0 ; }
@@ -1501,7 +1501,7 @@ static int virtio_net_load_device(VirtIODevice *vdev, QEMUFile *f, }static NetClientInfo net_virtio_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = virtio_net_can_receive, .receive = virtio_net_receive,
hw/net/vmxnet3.c +1 -1
@@ -1927,7 +1927,7 @@ static void vmxnet3_set_link_status(NetClientState *nc) }static NetClientInfo net_vmxnet3_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = vmxnet3_can_receive, .receive = vmxnet3_receive,
hw/net/xen_nic.c +1 -1
@@ -302,7 +302,7 @@ static ssize_t net_rx_packet(NetClientState *nc, const uint8_t *buf, size_t size/* ------------------------------------------------------------- */ static NetClientInfo net_xen_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = net_rx_ok, .receive = net_rx_packet,
hw/net/xgmac.c +1 -1
@@ -369,7 +369,7 @@ out: }static NetClientInfo net_xgmac_enet_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = eth_can_rx, .receive = eth_rx,
hw/net/xilinx_axienet.c +1 -1
@@ -923,7 +923,7 @@ xilinx_axienet_data_stream_push(StreamSlave *obj, uint8_t *buf, size_t size) }static NetClientInfo net_xilinx_enet_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = eth_can_rx, .receive = eth_rx,
hw/net/xilinx_ethlite.c +1 -1
@@ -214,7 +214,7 @@ static void xilinx_ethlite_reset(DeviceState *dev) }static NetClientInfo net_xilinx_ethlite_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = eth_can_rx, .receive = eth_rx,
hw/usb/dev-network.c +1 -1
@@ -1341,7 +1341,7 @@ static void usb_net_handle_destroy(USBDevice *dev) }static NetClientInfo net_usbnet_info = { - .type =NET_CLIENT_OPTIONS_KIND_NIC , + .type =NET_CLIENT_DRIVER_NIC , .size =sizeof (NICState), .can_receive = usbnet_can_receive, .receive = usbnet_receive,
include/net/net.h +2 -2
@@ -59,7 +59,7 @@ typedef int (SetVnetLE)(NetClientState *, bool);typedef int (SetVnetBE )(NetClientState *,bool ); typedef struct NetClientInfo { - NetClientOptionsKind type; + NetClientDriver type; size_t size; NetReceive *receive; NetReceive *receive_raw;
@@ -104,7 +104,7 @@ typedef struct NICState {char *qemu_mac_strdup_printf (const uint8_t *macaddr);NetClientState *qemu_find_netdev (const char *id);int qemu_find_net_clients_except (const char *id,NetClientState **ncs, -NetClientOptionsKind type,int max); +NetClientDriver type,int max); NetClientState *qemu_new_net_client(NetClientInfo *info, NetClientState *peer, const char *model,
monitor.c +7 -7
@@ -4188,8 +4188,8 @@ void netdev_add_completion(ReadLineState *rs, int nb_args, const char *str) } len =strlen (str);readline_set_completion_index (rs, len); -for (i =0 ; NetClientOptionsKind_lookup[i]; i++) { -add_completion_option (rs, str, NetClientOptionsKind_lookup[i]); +for (i =0 ; NetClientDriver_lookup[i]; i++) { +add_completion_option (rs, str, NetClientDriver_lookup[i]); } }
@@ -4389,7 +4389,7 @@ void set_link_completion(ReadLineState *rs, int nb_args, const char *str)NetClientState *ncs[MAX_QUEUE_NUM ];int count, i; count =qemu_find_net_clients_except (NULL , ncs, -NET_CLIENT_OPTIONS_KIND_NONE , +NET_CLIENT_DRIVER_NONE ,MAX_QUEUE_NUM );for (i =0 ; i <MIN (count,MAX_QUEUE_NUM ); i++) {const char *name = ncs[i]->name;
@@ -4414,7 +4414,7 @@ void netdev_del_completion(ReadLineState *rs, int nb_args, const char *str) len =strlen (str);readline_set_completion_index (rs, len); - count =qemu_find_net_clients_except (NULL , ncs,NET_CLIENT_OPTIONS_KIND_NIC , + count =qemu_find_net_clients_except (NULL , ncs,NET_CLIENT_DRIVER_NIC ,MAX_QUEUE_NUM );for (i =0 ; i <MIN (count,MAX_QUEUE_NUM ); i++) {QemuOpts *opts;
@@ -4506,7 +4506,7 @@ void host_net_remove_completion(ReadLineState *rs, int nb_args, const char *str)readline_set_completion_index (rs, len);if (nb_args ==2 ) { count =qemu_find_net_clients_except (NULL , ncs, -NET_CLIENT_OPTIONS_KIND_NONE , +NET_CLIENT_DRIVER_NONE ,MAX_QUEUE_NUM );for (i =0 ; i <MIN (count,MAX_QUEUE_NUM ); i++) {int id;
@@ -4523,13 +4523,13 @@ void host_net_remove_completion(ReadLineState *rs, int nb_args, const char *str)return ; }else if (nb_args ==3 ) { count =qemu_find_net_clients_except (NULL , ncs, -NET_CLIENT_OPTIONS_KIND_NIC , +NET_CLIENT_DRIVER_NIC ,MAX_QUEUE_NUM );for (i =0 ; i <MIN (count,MAX_QUEUE_NUM ); i++) {int id;const char *name; -if (ncs[i]->info->type ==NET_CLIENT_OPTIONS_KIND_HUBPORT || +if (ncs[i]->info->type ==NET_CLIENT_DRIVER_HUBPORT ||net_hub_id_for_client (ncs[i], &id)) {continue ; }
net/dump.c +3 -3
@@ -94,7 +94,7 @@ static void dump_cleanup(NetClientState *nc) }static NetClientInfo net_dump_info = { - .type =NET_CLIENT_OPTIONS_KIND_DUMP , + .type =NET_CLIENT_DRIVER_DUMP , .size =sizeof (DumpState), .receive = dump_receive, .cleanup = dump_cleanup,
@@ -154,8 +154,8 @@ int net_init_dump(const Netdev *netdev, const char *name,char def_file[128 ];const NetdevDumpOptions *dump; -assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_DUMP ); - dump = netdev->opts->dump; +assert (netdev->kind ==NET_CLIENT_DRIVER_DUMP ); + dump = netdev->dump;assert (peer);
net/hub.c +11 -11
@@ -130,7 +130,7 @@ static void net_hub_port_cleanup(NetClientState *nc) }static NetClientInfo net_hub_port_info = { - .type =NET_CLIENT_OPTIONS_KIND_HUBPORT , + .type =NET_CLIENT_DRIVER_HUBPORT , .size =sizeof (NetHubPort), .can_receive = net_hub_port_can_receive, .receive = net_hub_port_receive,
@@ -265,10 +265,10 @@ int net_hub_id_for_client(NetClientState *nc, int *id) {NetHubPort *port; -if (nc->info->type ==NET_CLIENT_OPTIONS_KIND_HUBPORT ) { +if (nc->info->type ==NET_CLIENT_DRIVER_HUBPORT ) { port =DO_UPCAST (NetHubPort, nc, nc); }else if (nc->peer !=NULL && nc->peer->info->type == -NET_CLIENT_OPTIONS_KIND_HUBPORT ) { +NET_CLIENT_DRIVER_HUBPORT ) { port =DO_UPCAST (NetHubPort, nc, nc->peer); }else {return -ENOENT ;
@@ -285,9 +285,9 @@ int net_init_hubport(const Netdev *netdev, const char *name, {const NetdevHubPortOptions *hubport; -assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_HUBPORT ); +assert (netdev->kind ==NET_CLIENT_DRIVER_HUBPORT );assert (!peer); - hubport = netdev->opts->hubport; + hubport = netdev->hubport;net_hub_add_port (hubport->hubid, name);return 0 ;
@@ -314,14 +314,14 @@ void net_hub_check_clients(void) }switch (peer->info->type) { -case NET_CLIENT_OPTIONS_KIND_NIC : +case NET_CLIENT_DRIVER_NIC : has_nic =1 ;break ; -case NET_CLIENT_OPTIONS_KIND_USER : -case NET_CLIENT_OPTIONS_KIND_TAP : -case NET_CLIENT_OPTIONS_KIND_SOCKET : -case NET_CLIENT_OPTIONS_KIND_VDE : -case NET_CLIENT_OPTIONS_KIND_VHOST_USER : +case NET_CLIENT_DRIVER_USER : +case NET_CLIENT_DRIVER_TAP : +case NET_CLIENT_DRIVER_SOCKET : +case NET_CLIENT_DRIVER_VDE : +case NET_CLIENT_DRIVER_VHOST_USER : has_host_dev =1 ;break ;default :
net/l2tpv3.c +3 -3
@@ -516,7 +516,7 @@ static void net_l2tpv3_cleanup(NetClientState *nc) }static NetClientInfo net_l2tpv3_info = { - .type =NET_CLIENT_OPTIONS_KIND_L2TPV3 , + .type =NET_CLIENT_DRIVER_L2TPV3 , .size =sizeof (NetL2TPV3State), .receive = net_l2tpv3_receive_dgram, .receive_iov = net_l2tpv3_receive_dgram_iov,
@@ -545,8 +545,8 @@ int net_init_l2tpv3(const Netdev *netdev, s->queue_tail =0 ; s->header_mismatch = false; -assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_L2TPV3 ); - l2tpv3 = netdev->opts->l2tpv3; +assert (netdev->kind ==NET_CLIENT_DRIVER_L2TPV3 ); + l2tpv3 = netdev->l2tpv3;if (l2tpv3->has_ipv6 && l2tpv3->ipv6) { s->ipv6 = l2tpv3->ipv6;
net/net.c +42 -42
243 lines not on this page · raw message
net/netmap.c +2 -2
@@ -417,7 +417,7 @@ static void netmap_set_offload(NetClientState *nc, int csum, int tso4, int tso6,/* NetClientInfo methods */ static NetClientInfo net_netmap_info = { - .type =NET_CLIENT_OPTIONS_KIND_NETMAP , + .type =NET_CLIENT_DRIVER_NETMAP , .size =sizeof (NetmapState), .receive = netmap_receive, .receive_iov = netmap_receive_iov,
@@ -439,7 +439,7 @@ int net_init_netmap(const Netdev *netdev, const char *name, NetClientState *peer, Error **errp) { /* FIXME error_setg(errp, ...) on failure */ - const NetdevNetmapOptions *netmap_opts = netdev->opts->netmap; + const NetdevNetmapOptions *netmap_opts = netdev->netmap;NetClientState *nc;NetmapPriv me;NetmapState *s;
net/slirp.c +3 -3
@@ -126,7 +126,7 @@ static void net_slirp_cleanup(NetClientState *nc) }static NetClientInfo net_slirp_info = { - .type =NET_CLIENT_OPTIONS_KIND_USER , + .type =NET_CLIENT_DRIVER_USER , .size =sizeof (SlirpState), .receive = net_slirp_receive, .cleanup = net_slirp_cleanup,
@@ -746,8 +746,8 @@ int net_init_slirp(const Netdev *netdev, const char *name,const NetdevUserOptions *user;const char **dnssearch; -assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_USER ); - user = netdev->opts->user; +assert (netdev->kind ==NET_CLIENT_DRIVER_USER ); + user = netdev->user; vnet = user->has_net ?g_strdup (user->net) : user->has_ip ? g_strdup_printf("%s/24", user->ip) :
net/socket.c +4 -4
@@ -346,7 +346,7 @@ static void net_socket_cleanup(NetClientState *nc) }static NetClientInfo net_dgram_socket_info = { - .type =NET_CLIENT_OPTIONS_KIND_SOCKET , + .type =NET_CLIENT_DRIVER_SOCKET , .size =sizeof (NetSocketState), .receive = net_socket_receive_dgram, .cleanup = net_socket_cleanup,
@@ -429,7 +429,7 @@ static void net_socket_connect(void *opaque) }static NetClientInfo net_socket_info = { - .type =NET_CLIENT_OPTIONS_KIND_SOCKET , + .type =NET_CLIENT_DRIVER_SOCKET , .size =sizeof (NetSocketState), .receive = net_socket_receive, .cleanup = net_socket_cleanup,
@@ -706,8 +706,8 @@ int net_init_socket(const Netdev *netdev, const char *name,Error *err =NULL ;const NetdevSocketOptions *sock; -assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_SOCKET ); - sock = netdev->opts->socket; +assert (netdev->kind ==NET_CLIENT_DRIVER_SOCKET ); + sock = netdev->socket;if (sock->has_fd + sock->has_listen + sock->has_connect + sock->has_mcast + sock->has_udp !=1 ) {
net/tap-win32.c +3 -3
@@ -723,7 +723,7 @@ static void tap_set_vnet_hdr_len(NetClientState *nc, int len) }static NetClientInfo net_tap_win32_info = { - .type =NET_CLIENT_OPTIONS_KIND_TAP , + .type =NET_CLIENT_DRIVER_TAP , .size =sizeof (TAPState), .receive = tap_receive, .cleanup = tap_cleanup,
@@ -767,8 +767,8 @@ int net_init_tap(const Netdev *netdev, const char *name,/* FIXME error_setg(errp, ...) on failure */ const NetdevTapOptions *tap; -assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_TAP ); - tap = netdev->opts->tap; +assert (netdev->kind ==NET_CLIENT_DRIVER_TAP ); + tap = netdev->tap;if (!tap->has_ifname) {error_report ("tap: no interface name" );
net/tap.c +12 -12
@@ -221,7 +221,7 @@ static bool tap_has_ufo(NetClientState *nc) {TAPState *s =DO_UPCAST (TAPState, nc, nc); -assert (nc->info->type ==NET_CLIENT_OPTIONS_KIND_TAP ); +assert (nc->info->type ==NET_CLIENT_DRIVER_TAP );return s->has_ufo; }
@@ -230,7 +230,7 @@ static bool tap_has_vnet_hdr(NetClientState *nc) {TAPState *s =DO_UPCAST (TAPState, nc, nc); -assert (nc->info->type ==NET_CLIENT_OPTIONS_KIND_TAP ); +assert (nc->info->type ==NET_CLIENT_DRIVER_TAP );return !!s->host_vnet_hdr_len; }
@@ -239,7 +239,7 @@ static bool tap_has_vnet_hdr_len(NetClientState *nc, int len) {TAPState *s =DO_UPCAST (TAPState, nc, nc); -assert (nc->info->type ==NET_CLIENT_OPTIONS_KIND_TAP ); +assert (nc->info->type ==NET_CLIENT_DRIVER_TAP );return !!tap_probe_vnet_hdr_len (s->fd, len); }
@@ -248,7 +248,7 @@ static void tap_set_vnet_hdr_len(NetClientState *nc, int len) {TAPState *s =DO_UPCAST (TAPState, nc, nc); -assert (nc->info->type ==NET_CLIENT_OPTIONS_KIND_TAP ); +assert (nc->info->type ==NET_CLIENT_DRIVER_TAP );assert (len ==sizeof (struct virtio_net_hdr_mrg_rxbuf ) || len ==sizeof (struct virtio_net_hdr ));
@@ -260,7 +260,7 @@ static void tap_using_vnet_hdr(NetClientState *nc, bool using_vnet_hdr) {TAPState *s =DO_UPCAST (TAPState, nc, nc); -assert (nc->info->type ==NET_CLIENT_OPTIONS_KIND_TAP ); +assert (nc->info->type ==NET_CLIENT_DRIVER_TAP );assert (!!s->host_vnet_hdr_len == using_vnet_hdr); s->using_vnet_hdr = using_vnet_hdr;
@@ -326,14 +326,14 @@ static void tap_poll(NetClientState *nc, bool enable)int tap_get_fd (NetClientState *nc) {TAPState *s =DO_UPCAST (TAPState, nc, nc); -assert (nc->info->type ==NET_CLIENT_OPTIONS_KIND_TAP ); +assert (nc->info->type ==NET_CLIENT_DRIVER_TAP );return s->fd; }/* fd support */ static NetClientInfo net_tap_info = { - .type =NET_CLIENT_OPTIONS_KIND_TAP , + .type =NET_CLIENT_DRIVER_TAP , .size =sizeof (TAPState), .receive = tap_receive, .receive_raw = tap_receive_raw,
@@ -565,8 +565,8 @@ int net_init_bridge(const Netdev *netdev, const char *name,TAPState *s;int fd, vnet_hdr; -assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_BRIDGE ); - bridge = netdev->opts->bridge; +assert (netdev->kind ==NET_CLIENT_DRIVER_BRIDGE ); + bridge = netdev->bridge; helper = bridge->has_helper ? bridge->helper :DEFAULT_BRIDGE_HELPER ; br = bridge->has_br ? bridge->br :DEFAULT_BRIDGE_INTERFACE ;
@@ -728,8 +728,8 @@ int net_init_tap(const Netdev *netdev, const char *name,const char *vhostfdname;char ifname[128 ]; -assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_TAP ); - tap = netdev->opts->tap; +assert (netdev->kind ==NET_CLIENT_DRIVER_TAP ); + tap = netdev->tap; queues = tap->has_queues ? tap->queues :1 ; vhostfdname = tap->has_vhostfd ? tap->vhostfd :NULL ;
@@ -890,7 +890,7 @@ int net_init_tap(const Netdev *netdev, const char *name,VHostNetState *tap_get_vhost_net (NetClientState *nc) {TAPState *s =DO_UPCAST (TAPState, nc, nc); -assert (nc->info->type ==NET_CLIENT_OPTIONS_KIND_TAP ); +assert (nc->info->type ==NET_CLIENT_DRIVER_TAP );return s->vhost_net; }
net/vde.c +3 -3
@@ -68,7 +68,7 @@ static void vde_cleanup(NetClientState *nc) }static NetClientInfo net_vde_info = { - .type =NET_CLIENT_OPTIONS_KIND_VDE , + .type =NET_CLIENT_DRIVER_VDE , .size =sizeof (VDEState), .receive = vde_receive, .cleanup = vde_cleanup,
@@ -115,8 +115,8 @@ int net_init_vde(const Netdev *netdev, const char *name,/* FIXME error_setg(errp, ...) on failure */ const NetdevVdeOptions *vde; -assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_VDE ); - vde = netdev->opts->vde; +assert (netdev->kind ==NET_CLIENT_DRIVER_VDE ); + vde = netdev->vde;/* missing optional values have been initialized to "all bits zero" */ if (net_vde_init(peer, "vde", name, vde->sock, vde->port, vde->group,
net/vhost-user.c +6 -6
@@ -30,7 +30,7 @@ typedef struct VhostUserChardevProps {VHostNetState *vhost_user_get_vhost_net (NetClientState *nc) {VhostUserState *s =DO_UPCAST (VhostUserState, nc, nc); -assert (nc->info->type ==NET_CLIENT_OPTIONS_KIND_VHOST_USER ); +assert (nc->info->type ==NET_CLIENT_DRIVER_VHOST_USER );return s->vhost_net; }
@@ -75,20 +75,20 @@ static void vhost_user_cleanup(NetClientState *nc)static bool vhost_user_has_vnet_hdr (NetClientState *nc) { -assert (nc->info->type ==NET_CLIENT_OPTIONS_KIND_VHOST_USER ); +assert (nc->info->type ==NET_CLIENT_DRIVER_VHOST_USER );return true; }static bool vhost_user_has_ufo (NetClientState *nc) { -assert (nc->info->type ==NET_CLIENT_OPTIONS_KIND_VHOST_USER ); +assert (nc->info->type ==NET_CLIENT_DRIVER_VHOST_USER );return true; }static NetClientInfo net_vhost_user_info = { - .type =NET_CLIENT_OPTIONS_KIND_VHOST_USER , + .type =NET_CLIENT_DRIVER_VHOST_USER , .size =sizeof (VhostUserState), .cleanup = vhost_user_cleanup, .has_vnet_hdr = vhost_user_has_vnet_hdr,
@@ -234,8 +234,8 @@ int net_init_vhost_user(const Netdev *netdev, const char *name,const NetdevVhostUserOptions *vhost_user_opts;CharDriverState *chr; -assert (netdev->opts->kind ==NET_CLIENT_OPTIONS_KIND_VHOST_USER ); - vhost_user_opts = netdev->opts->vhost_user; +assert (netdev->kind ==NET_CLIENT_DRIVER_VHOST_USER ); + vhost_user_opts = netdev->vhost_user; chr =net_vhost_parse_chardev (vhost_user_opts, errp);if (!chr) {
qapi-schema.json +24 -12
@@ -2475,16 +2475,31 @@ '*queues': 'uint32' } } ## -# @NetClientOptions +# @NetClientDriver # -# A discriminated record of network device traits. +# Available netdev drivers. +# +# Since 2.4 +## +{ 'enum': 'NetClientDriver', + 'data': [ 'none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde', 'dump', + 'bridge', 'hubport', 'netmap', 'vhost-user' ] } + +## +# @Netdev +# +# Captures the configuration of a network device. # # Since 1.2 # # 'l2tpv3' - since 2.1 +# @id #optional - since 2.4 +# @vlan, @name - since 2.4 # ## -{ 'union': 'NetClientOptions', +{ 'union': 'Netdev', + 'base': 'NetdevBase', + 'discriminator': 'type', 'data': { 'none': 'NetdevNoneOptions', 'nic': 'NetLegacyNicOptions',
@@ -2500,9 +2515,9 @@ 'vhost-user': 'NetdevVhostUserOptions' } } ## -# @Netdev +# @NetdevBase # -# Captures the configuration of a network device. +# Captures the commopn configuration of a network device. # # @vlan: #optional vlan number (legacy, forbidden with -netdev) #
@@ -2511,19 +2526,16 @@ # @name: #optional identifier for monitor commands, ignored if @id is present # (legacy, forbidden with -netdev) # -# @opts: device type specific properties (legacy) +# @type: the netdev driver to use # -# Since 1.2 -# -# @id #optional - since 2.4 -# @vlan, @name - since 2.4 +# Since 2.4 ## -{ 'struct': 'Netdev', +{ 'struct': 'NetdevBase', 'data': { '*vlan': 'int32', '*id': 'str', '*name': 'str', - 'opts': 'NetClientOptions' } } + 'type': 'NetClientDriver' } } ## # @InetSocketAddress
Signature · 1 line
2.4.5
PATCH v2 6/6 qapi: reorder NetdevBase and Netdev
In reply to Kővágó, ZoltánProbably more logical if NetdevBase comes before Netdev. No schematic changes.
--- qapi-schema.json | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-)
qapi-schema.json +23 -23
@@ -2486,6 +2486,29 @@ 'bridge', 'hubport', 'netmap', 'vhost-user' ] } ## +# @NetdevBase +# +# Captures the commopn configuration of a network device. +# +# @vlan: #optional vlan number (legacy, forbidden with -netdev) +# +# @id: #optional identifier for monitor commands (required with -netdev) +# +# @name: #optional identifier for monitor commands, ignored if @id is present +# (legacy, forbidden with -netdev) +# +# @type: the netdev driver to use +# +# Since 2.4 +## +{ 'struct': 'NetdevBase', + 'data': { + '*vlan': 'int32', + '*id': 'str', + '*name': 'str', + 'type': 'NetClientDriver' } } + +## # @Netdev # # Captures the configuration of a network device.
@@ -2515,29 +2538,6 @@ 'vhost-user': 'NetdevVhostUserOptions' } } ## -# @NetdevBase -# -# Captures the commopn configuration of a network device. -# -# @vlan: #optional vlan number (legacy, forbidden with -netdev) -# -# @id: #optional identifier for monitor commands (required with -netdev) -# -# @name: #optional identifier for monitor commands, ignored if @id is present -# (legacy, forbidden with -netdev) -# -# @type: the netdev driver to use -# -# Since 2.4 -## -{ 'struct': 'NetdevBase', - 'data': { - '*vlan': 'int32', - '*id': 'str', - '*name': 'str', - 'type': 'NetClientDriver' } } - -## # @InetSocketAddress # # Captures a socket address or address range in the Internet namespace.
Signature · 1 line
2.4.5