net: use Netdev instead of NetClientOptions in client init
This way we no longer need NetClientOptions and can convert Netdev into a flat union. Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-Id: <93ffdfed7054529635e6acb935150d95dc173a12.1441627176.git.DirtY.iCE.hu@gmail.com> [rework net_client_init1() to pass Netdev by copying from NetdevLegacy, rather than merging the two types - which means that we still need NetClientOptions after all. Rebase to qapi changes. The bulk of the patch is mechanical, replacing 'opts' by 'netdev->opts', while net_client_init1() takes care of converting between legacy and modern types.] Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <1468468228-27827-2-git-send-email-eblake@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
3d344c2aab
commit
cebea51057
@ -27,39 +27,39 @@
|
|||||||
#include "net/net.h"
|
#include "net/net.h"
|
||||||
#include "qapi-types.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);
|
NetClientState *peer, Error **errp);
|
||||||
|
|
||||||
#ifdef CONFIG_SLIRP
|
#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);
|
NetClientState *peer, Error **errp);
|
||||||
#endif
|
#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);
|
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);
|
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);
|
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);
|
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);
|
NetClientState *peer, Error **errp);
|
||||||
#ifdef CONFIG_VDE
|
#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);
|
NetClientState *peer, Error **errp);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_NETMAP
|
#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);
|
NetClientState *peer, Error **errp);
|
||||||
#endif
|
#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);
|
NetClientState *peer, Error **errp);
|
||||||
|
|
||||||
#endif /* QEMU_NET_CLIENTS_H */
|
#endif /* QEMU_NET_CLIENTS_H */
|
||||||
|
@ -179,7 +179,7 @@ static NetClientInfo net_dump_info = {
|
|||||||
.cleanup = dumpclient_cleanup,
|
.cleanup = dumpclient_cleanup,
|
||||||
};
|
};
|
||||||
|
|
||||||
int net_init_dump(const NetClientOptions *opts, const char *name,
|
int net_init_dump(const Netdev *netdev, const char *name,
|
||||||
NetClientState *peer, Error **errp)
|
NetClientState *peer, Error **errp)
|
||||||
{
|
{
|
||||||
int len, rc;
|
int len, rc;
|
||||||
@ -189,8 +189,8 @@ int net_init_dump(const NetClientOptions *opts, const char *name,
|
|||||||
NetClientState *nc;
|
NetClientState *nc;
|
||||||
DumpNetClient *dnc;
|
DumpNetClient *dnc;
|
||||||
|
|
||||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_DUMP);
|
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_DUMP);
|
||||||
dump = opts->u.dump.data;
|
dump = netdev->opts->u.dump.data;
|
||||||
|
|
||||||
assert(peer);
|
assert(peer);
|
||||||
|
|
||||||
|
@ -281,14 +281,14 @@ int net_hub_id_for_client(NetClientState *nc, int *id)
|
|||||||
return 0;
|
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)
|
NetClientState *peer, Error **errp)
|
||||||
{
|
{
|
||||||
const NetdevHubPortOptions *hubport;
|
const NetdevHubPortOptions *hubport;
|
||||||
|
|
||||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_HUBPORT);
|
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_HUBPORT);
|
||||||
assert(!peer);
|
assert(!peer);
|
||||||
hubport = opts->u.hubport.data;
|
hubport = netdev->opts->u.hubport.data;
|
||||||
|
|
||||||
net_hub_add_port(hubport->hubid, name);
|
net_hub_add_port(hubport->hubid, name);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -524,7 +524,7 @@ static NetClientInfo net_l2tpv3_info = {
|
|||||||
.cleanup = net_l2tpv3_cleanup,
|
.cleanup = net_l2tpv3_cleanup,
|
||||||
};
|
};
|
||||||
|
|
||||||
int net_init_l2tpv3(const NetClientOptions *opts,
|
int net_init_l2tpv3(const Netdev *netdev,
|
||||||
const char *name,
|
const char *name,
|
||||||
NetClientState *peer, Error **errp)
|
NetClientState *peer, Error **errp)
|
||||||
{
|
{
|
||||||
@ -545,8 +545,8 @@ int net_init_l2tpv3(const NetClientOptions *opts,
|
|||||||
s->queue_tail = 0;
|
s->queue_tail = 0;
|
||||||
s->header_mismatch = false;
|
s->header_mismatch = false;
|
||||||
|
|
||||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_L2TPV3);
|
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_L2TPV3);
|
||||||
l2tpv3 = opts->u.l2tpv3.data;
|
l2tpv3 = netdev->opts->u.l2tpv3.data;
|
||||||
|
|
||||||
if (l2tpv3->has_ipv6 && l2tpv3->ipv6) {
|
if (l2tpv3->has_ipv6 && l2tpv3->ipv6) {
|
||||||
s->ipv6 = l2tpv3->ipv6;
|
s->ipv6 = l2tpv3->ipv6;
|
||||||
|
18
net/net.c
18
net/net.c
@ -862,15 +862,15 @@ int qemu_find_nic_model(NICInfo *nd, const char * const *models,
|
|||||||
return -1;
|
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)
|
NetClientState *peer, Error **errp)
|
||||||
{
|
{
|
||||||
int idx;
|
int idx;
|
||||||
NICInfo *nd;
|
NICInfo *nd;
|
||||||
const NetLegacyNicOptions *nic;
|
const NetLegacyNicOptions *nic;
|
||||||
|
|
||||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_NIC);
|
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_NIC);
|
||||||
nic = opts->u.nic.data;
|
nic = netdev->opts->u.nic.data;
|
||||||
|
|
||||||
idx = nic_get_free_idx();
|
idx = nic_get_free_idx();
|
||||||
if (idx == -1 || nb_nics >= MAX_NICS) {
|
if (idx == -1 || nb_nics >= MAX_NICS) {
|
||||||
@ -931,7 +931,7 @@ static int net_init_nic(const NetClientOptions *opts, const char *name,
|
|||||||
|
|
||||||
|
|
||||||
static int (* const net_client_init_fun[NET_CLIENT_OPTIONS_KIND__MAX])(
|
static int (* const net_client_init_fun[NET_CLIENT_OPTIONS_KIND__MAX])(
|
||||||
const NetClientOptions *opts,
|
const Netdev *netdev,
|
||||||
const char *name,
|
const char *name,
|
||||||
NetClientState *peer, Error **errp) = {
|
NetClientState *peer, Error **errp) = {
|
||||||
[NET_CLIENT_OPTIONS_KIND_NIC] = net_init_nic,
|
[NET_CLIENT_OPTIONS_KIND_NIC] = net_init_nic,
|
||||||
@ -963,11 +963,13 @@ 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 void *object, int is_netdev, Error **errp)
|
||||||
{
|
{
|
||||||
const NetClientOptions *opts;
|
const NetClientOptions *opts;
|
||||||
|
Netdev legacy = {0};
|
||||||
|
const Netdev *netdev;
|
||||||
const char *name;
|
const char *name;
|
||||||
NetClientState *peer = NULL;
|
NetClientState *peer = NULL;
|
||||||
|
|
||||||
if (is_netdev) {
|
if (is_netdev) {
|
||||||
const Netdev *netdev = object;
|
netdev = object;
|
||||||
opts = netdev->opts;
|
opts = netdev->opts;
|
||||||
name = netdev->id;
|
name = netdev->id;
|
||||||
|
|
||||||
@ -980,7 +982,9 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const NetLegacy *net = object;
|
const NetLegacy *net = object;
|
||||||
opts = net->opts;
|
legacy.id = net->id;
|
||||||
|
opts = legacy.opts = net->opts;
|
||||||
|
netdev = &legacy;
|
||||||
/* missing optional values have been initialized to "all bits zero" */
|
/* missing optional values have been initialized to "all bits zero" */
|
||||||
name = net->has_id ? net->id : net->name;
|
name = net->has_id ? net->id : net->name;
|
||||||
|
|
||||||
@ -1007,7 +1011,7 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (net_client_init_fun[opts->type](opts, name, peer, errp) < 0) {
|
if (net_client_init_fun[opts->type](netdev, name, peer, errp) < 0) {
|
||||||
/* FIXME drop when all init functions store an Error */
|
/* FIXME drop when all init functions store an Error */
|
||||||
if (errp && !*errp) {
|
if (errp && !*errp) {
|
||||||
error_setg(errp, QERR_DEVICE_INIT_FAILED,
|
error_setg(errp, QERR_DEVICE_INIT_FAILED,
|
||||||
|
@ -418,10 +418,10 @@ static NetClientInfo net_netmap_info = {
|
|||||||
*
|
*
|
||||||
* ... -net netmap,ifname="..."
|
* ... -net netmap,ifname="..."
|
||||||
*/
|
*/
|
||||||
int net_init_netmap(const NetClientOptions *opts,
|
int net_init_netmap(const Netdev *netdev,
|
||||||
const char *name, NetClientState *peer, Error **errp)
|
const char *name, NetClientState *peer, Error **errp)
|
||||||
{
|
{
|
||||||
const NetdevNetmapOptions *netmap_opts = opts->u.netmap.data;
|
const NetdevNetmapOptions *netmap_opts = netdev->opts->u.netmap.data;
|
||||||
struct nm_desc *nmd;
|
struct nm_desc *nmd;
|
||||||
NetClientState *nc;
|
NetClientState *nc;
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
@ -828,7 +828,7 @@ static const char **slirp_dnssearch(const StringList *dnsname)
|
|||||||
return ret;
|
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)
|
NetClientState *peer, Error **errp)
|
||||||
{
|
{
|
||||||
/* FIXME error_setg(errp, ...) on failure */
|
/* FIXME error_setg(errp, ...) on failure */
|
||||||
@ -839,8 +839,8 @@ int net_init_slirp(const NetClientOptions *opts, const char *name,
|
|||||||
const char **dnssearch;
|
const char **dnssearch;
|
||||||
bool ipv4 = true, ipv6 = true;
|
bool ipv4 = true, ipv6 = true;
|
||||||
|
|
||||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_USER);
|
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_USER);
|
||||||
user = opts->u.user.data;
|
user = netdev->opts->u.user.data;
|
||||||
|
|
||||||
if ((user->has_ipv6 && user->ipv6 && !user->has_ipv4) ||
|
if ((user->has_ipv6 && user->ipv6 && !user->has_ipv4) ||
|
||||||
(user->has_ipv4 && !user->ipv4)) {
|
(user->has_ipv4 && !user->ipv4)) {
|
||||||
|
@ -663,15 +663,15 @@ static int net_socket_udp_init(NetClientState *peer,
|
|||||||
return 0;
|
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)
|
NetClientState *peer, Error **errp)
|
||||||
{
|
{
|
||||||
/* FIXME error_setg(errp, ...) on failure */
|
/* FIXME error_setg(errp, ...) on failure */
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
const NetdevSocketOptions *sock;
|
const NetdevSocketOptions *sock;
|
||||||
|
|
||||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_SOCKET);
|
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_SOCKET);
|
||||||
sock = opts->u.socket.data;
|
sock = netdev->opts->u.socket.data;
|
||||||
|
|
||||||
if (sock->has_fd + sock->has_listen + sock->has_connect + sock->has_mcast +
|
if (sock->has_fd + sock->has_listen + sock->has_connect + sock->has_mcast +
|
||||||
sock->has_udp != 1) {
|
sock->has_udp != 1) {
|
||||||
|
@ -788,14 +788,14 @@ static int tap_win32_init(NetClientState *peer, const char *model,
|
|||||||
return 0;
|
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)
|
NetClientState *peer, Error **errp)
|
||||||
{
|
{
|
||||||
/* FIXME error_setg(errp, ...) on failure */
|
/* FIXME error_setg(errp, ...) on failure */
|
||||||
const NetdevTapOptions *tap;
|
const NetdevTapOptions *tap;
|
||||||
|
|
||||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_TAP);
|
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_TAP);
|
||||||
tap = opts->u.tap.data;
|
tap = netdev->opts->u.tap.data;
|
||||||
|
|
||||||
if (!tap->has_ifname) {
|
if (!tap->has_ifname) {
|
||||||
error_report("tap: no interface name");
|
error_report("tap: no interface name");
|
||||||
|
12
net/tap.c
12
net/tap.c
@ -571,7 +571,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)
|
NetClientState *peer, Error **errp)
|
||||||
{
|
{
|
||||||
const NetdevBridgeOptions *bridge;
|
const NetdevBridgeOptions *bridge;
|
||||||
@ -579,8 +579,8 @@ int net_init_bridge(const NetClientOptions *opts, const char *name,
|
|||||||
TAPState *s;
|
TAPState *s;
|
||||||
int fd, vnet_hdr;
|
int fd, vnet_hdr;
|
||||||
|
|
||||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_BRIDGE);
|
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_BRIDGE);
|
||||||
bridge = opts->u.bridge.data;
|
bridge = netdev->opts->u.bridge.data;
|
||||||
|
|
||||||
helper = bridge->has_helper ? bridge->helper : DEFAULT_BRIDGE_HELPER;
|
helper = bridge->has_helper ? bridge->helper : DEFAULT_BRIDGE_HELPER;
|
||||||
br = bridge->has_br ? bridge->br : DEFAULT_BRIDGE_INTERFACE;
|
br = bridge->has_br ? bridge->br : DEFAULT_BRIDGE_INTERFACE;
|
||||||
@ -735,7 +735,7 @@ static int get_fds(char *str, char *fds[], int max)
|
|||||||
return i;
|
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)
|
NetClientState *peer, Error **errp)
|
||||||
{
|
{
|
||||||
const NetdevTapOptions *tap;
|
const NetdevTapOptions *tap;
|
||||||
@ -747,8 +747,8 @@ int net_init_tap(const NetClientOptions *opts, const char *name,
|
|||||||
const char *vhostfdname;
|
const char *vhostfdname;
|
||||||
char ifname[128];
|
char ifname[128];
|
||||||
|
|
||||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_TAP);
|
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_TAP);
|
||||||
tap = opts->u.tap.data;
|
tap = netdev->opts->u.tap.data;
|
||||||
queues = tap->has_queues ? tap->queues : 1;
|
queues = tap->has_queues ? tap->queues : 1;
|
||||||
vhostfdname = tap->has_vhostfd ? tap->vhostfd : NULL;
|
vhostfdname = tap->has_vhostfd ? tap->vhostfd : NULL;
|
||||||
|
|
||||||
|
@ -109,14 +109,14 @@ static int net_vde_init(NetClientState *peer, const char *model,
|
|||||||
return 0;
|
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)
|
NetClientState *peer, Error **errp)
|
||||||
{
|
{
|
||||||
/* FIXME error_setg(errp, ...) on failure */
|
/* FIXME error_setg(errp, ...) on failure */
|
||||||
const NetdevVdeOptions *vde;
|
const NetdevVdeOptions *vde;
|
||||||
|
|
||||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_VDE);
|
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_VDE);
|
||||||
vde = opts->u.vde.data;
|
vde = netdev->opts->u.vde.data;
|
||||||
|
|
||||||
/* missing optional values have been initialized to "all bits zero" */
|
/* missing optional values have been initialized to "all bits zero" */
|
||||||
if (net_vde_init(peer, "vde", name, vde->sock, vde->port, vde->group,
|
if (net_vde_init(peer, "vde", name, vde->sock, vde->port, vde->group,
|
||||||
|
@ -334,15 +334,15 @@ static int net_vhost_check_net(void *opaque, QemuOpts *opts, Error **errp)
|
|||||||
return 0;
|
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)
|
NetClientState *peer, Error **errp)
|
||||||
{
|
{
|
||||||
int queues;
|
int queues;
|
||||||
const NetdevVhostUserOptions *vhost_user_opts;
|
const NetdevVhostUserOptions *vhost_user_opts;
|
||||||
CharDriverState *chr;
|
CharDriverState *chr;
|
||||||
|
|
||||||
assert(opts->type == NET_CLIENT_OPTIONS_KIND_VHOST_USER);
|
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_VHOST_USER);
|
||||||
vhost_user_opts = opts->u.vhost_user.data;
|
vhost_user_opts = netdev->opts->u.vhost_user.data;
|
||||||
|
|
||||||
chr = net_vhost_parse_chardev(vhost_user_opts, errp);
|
chr = net_vhost_parse_chardev(vhost_user_opts, errp);
|
||||||
if (!chr) {
|
if (!chr) {
|
||||||
|
Loading…
Reference in New Issue
Block a user