diff --git a/net/clients.h b/net/clients.h index 2e8fedad8d..d47530e82f 100644 --- a/net/clients.h +++ b/net/clients.h @@ -28,38 +28,38 @@ #include "qapi-types.h" int net_init_dump(const NetClientOptions *opts, const char *name, - NetClientState *peer); + NetClientState *peer, Error **errp); #ifdef CONFIG_SLIRP int net_init_slirp(const NetClientOptions *opts, const char *name, - NetClientState *peer); + NetClientState *peer, Error **errp); #endif int net_init_hubport(const NetClientOptions *opts, const char *name, - NetClientState *peer); + NetClientState *peer, Error **errp); int net_init_socket(const NetClientOptions *opts, const char *name, - NetClientState *peer); + NetClientState *peer, Error **errp); int net_init_tap(const NetClientOptions *opts, const char *name, - NetClientState *peer); + NetClientState *peer, Error **errp); int net_init_bridge(const NetClientOptions *opts, const char *name, - NetClientState *peer); + NetClientState *peer, Error **errp); int net_init_l2tpv3(const NetClientOptions *opts, const char *name, - NetClientState *peer); + NetClientState *peer, Error **errp); #ifdef CONFIG_VDE int net_init_vde(const NetClientOptions *opts, const char *name, - NetClientState *peer); + NetClientState *peer, Error **errp); #endif #ifdef CONFIG_NETMAP int net_init_netmap(const NetClientOptions *opts, const char *name, - NetClientState *peer); + NetClientState *peer, Error **errp); #endif int net_init_vhost_user(const NetClientOptions *opts, const char *name, - NetClientState *peer); + NetClientState *peer, Error **errp); #endif /* QEMU_NET_CLIENTS_H */ diff --git a/net/dump.c b/net/dump.c index 9d3a09e334..214e88a768 100644 --- a/net/dump.c +++ b/net/dump.c @@ -146,8 +146,9 @@ static int net_dump_init(NetClientState *peer, const char *device, } int net_init_dump(const NetClientOptions *opts, const char *name, - NetClientState *peer) + NetClientState *peer, Error **errp) { + /* FIXME error_setg(errp, ...) on failure */ int len; const char *file; char def_file[128]; diff --git a/net/hub.c b/net/hub.c index 261f8ccc3f..3047f12766 100644 --- a/net/hub.c +++ b/net/hub.c @@ -281,7 +281,7 @@ int net_hub_id_for_client(NetClientState *nc, int *id) } int net_init_hubport(const NetClientOptions *opts, const char *name, - NetClientState *peer) + NetClientState *peer, Error **errp) { const NetdevHubPortOptions *hubport; diff --git a/net/l2tpv3.c b/net/l2tpv3.c index 8c598b09bc..ed395dc126 100644 --- a/net/l2tpv3.c +++ b/net/l2tpv3.c @@ -536,10 +536,9 @@ static NetClientInfo net_l2tpv3_info = { int net_init_l2tpv3(const NetClientOptions *opts, const char *name, - NetClientState *peer) + NetClientState *peer, Error **errp) { - - + /* FIXME error_setg(errp, ...) on failure */ const NetdevL2TPv3Options *l2tpv3; NetL2TPV3State *s; NetClientState *nc; diff --git a/net/net.c b/net/net.c index d9aaeb5341..3295741d1d 100644 --- a/net/net.c +++ b/net/net.c @@ -740,8 +740,9 @@ int qemu_find_nic_model(NICInfo *nd, const char * const *models, } static int net_init_nic(const NetClientOptions *opts, const char *name, - NetClientState *peer) + NetClientState *peer, Error **errp) { + /* FIXME error_setg(errp, ...) on failure */ int idx; NICInfo *nd; const NetLegacyNicOptions *nic; @@ -809,7 +810,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 char *name, - NetClientState *peer) = { + NetClientState *peer, Error **errp) = { [NET_CLIENT_OPTIONS_KIND_NIC] = net_init_nic, #ifdef CONFIG_SLIRP [NET_CLIENT_OPTIONS_KIND_USER] = net_init_slirp, @@ -902,10 +903,12 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp) peer = net_hub_add_port(u.net->has_vlan ? u.net->vlan : 0, NULL); } - if (net_client_init_fun[opts->kind](opts, name, peer) < 0) { - /* TODO push error reporting into init() methods */ - error_set(errp, QERR_DEVICE_INIT_FAILED, - NetClientOptionsKind_lookup[opts->kind]); + if (net_client_init_fun[opts->kind](opts, name, peer, errp) < 0) { + /* FIXME drop when all init functions store an Error */ + if (errp && !*errp) { + error_set(errp, QERR_DEVICE_INIT_FAILED, + NetClientOptionsKind_lookup[opts->kind]); + } return -1; } } diff --git a/net/netmap.c b/net/netmap.c index 0c1772b03f..69300eb1ae 100644 --- a/net/netmap.c +++ b/net/netmap.c @@ -446,8 +446,9 @@ static NetClientInfo net_netmap_info = { * ... -net netmap,ifname="..." */ int net_init_netmap(const NetClientOptions *opts, - const char *name, NetClientState *peer) + const char *name, NetClientState *peer, Error **errp) { + /* FIXME error_setg(errp, ...) on failure */ const NetdevNetmapOptions *netmap_opts = opts->netmap; NetClientState *nc; NetmapPriv me; diff --git a/net/slirp.c b/net/slirp.c index 9bbed7447a..0e15cf6750 100644 --- a/net/slirp.c +++ b/net/slirp.c @@ -737,8 +737,9 @@ static const char **slirp_dnssearch(const StringList *dnsname) } int net_init_slirp(const NetClientOptions *opts, const char *name, - NetClientState *peer) + NetClientState *peer, Error **errp) { + /* FIXME error_setg(errp, ...) on failure */ struct slirp_config_str *config; char *vnet; int ret; diff --git a/net/socket.c b/net/socket.c index c30e03f5ae..5a19aa1881 100644 --- a/net/socket.c +++ b/net/socket.c @@ -693,8 +693,9 @@ static int net_socket_udp_init(NetClientState *peer, } int net_init_socket(const NetClientOptions *opts, const char *name, - NetClientState *peer) + NetClientState *peer, Error **errp) { + /* FIXME error_setg(errp, ...) on failure */ Error *err = NULL; const NetdevSocketOptions *sock; diff --git a/net/tap-win32.c b/net/tap-win32.c index 8aee611f7d..f6fc9610a7 100644 --- a/net/tap-win32.c +++ b/net/tap-win32.c @@ -752,8 +752,9 @@ static int tap_win32_init(NetClientState *peer, const char *model, } int net_init_tap(const NetClientOptions *opts, const char *name, - NetClientState *peer) + NetClientState *peer, Error **errp) { + /* FIXME error_setg(errp, ...) on failure */ const NetdevTapOptions *tap; assert(opts->kind == NET_CLIENT_OPTIONS_KIND_TAP); diff --git a/net/tap.c b/net/tap.c index 968df46c8c..8f06cb7382 100644 --- a/net/tap.c +++ b/net/tap.c @@ -531,8 +531,9 @@ static int net_bridge_run_helper(const char *helper, const char *bridge) } int net_init_bridge(const NetClientOptions *opts, const char *name, - NetClientState *peer) + NetClientState *peer, Error **errp) { + /* FIXME error_setg(errp, ...) on failure */ const NetdevBridgeOptions *bridge; const char *helper, *br; @@ -699,8 +700,9 @@ static int get_fds(char *str, char *fds[], int max) } int net_init_tap(const NetClientOptions *opts, const char *name, - NetClientState *peer) + NetClientState *peer, Error **errp) { + /* FIXME error_setg(errp, ...) on failure */ const NetdevTapOptions *tap; int fd, vnet_hdr = 0, i = 0, queues; /* for the no-fd, no-helper case */ diff --git a/net/vde.c b/net/vde.c index 2a619fbc81..dacaa64b47 100644 --- a/net/vde.c +++ b/net/vde.c @@ -110,8 +110,9 @@ static int net_vde_init(NetClientState *peer, const char *model, } int net_init_vde(const NetClientOptions *opts, const char *name, - NetClientState *peer) + NetClientState *peer, Error **errp) { + /* FIXME error_setg(errp, ...) on failure */ const NetdevVdeOptions *vde; assert(opts->kind == NET_CLIENT_OPTIONS_KIND_VDE); diff --git a/net/vhost-user.c b/net/vhost-user.c index 1d86a2be11..11899c53c0 100644 --- a/net/vhost-user.c +++ b/net/vhost-user.c @@ -223,8 +223,9 @@ static int net_vhost_check_net(QemuOpts *opts, void *opaque) } int net_init_vhost_user(const NetClientOptions *opts, const char *name, - NetClientState *peer) + NetClientState *peer, Error **errp) { + /* FIXME error_setg(errp, ...) on failure */ const NetdevVhostUserOptions *vhost_user_opts; CharDriverState *chr;