Skip to content

Commit

Permalink
net: use Netdev instead of NetClientOptions in client init
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
DirtYiCE authored and Markus Armbruster committed Jul 19, 2016
1 parent 3d344c2 commit cebea51
Show file tree
Hide file tree
Showing 12 changed files with 53 additions and 49 deletions.
20 changes: 10 additions & 10 deletions net/clients.h
Expand Up @@ -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 */
6 changes: 3 additions & 3 deletions net/dump.c
Expand Up @@ -179,7 +179,7 @@ static NetClientInfo net_dump_info = {
.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)
{
int len, rc;
Expand All @@ -189,8 +189,8 @@ int net_init_dump(const NetClientOptions *opts, const char *name,
NetClientState *nc;
DumpNetClient *dnc;

assert(opts->type == NET_CLIENT_OPTIONS_KIND_DUMP);
dump = opts->u.dump.data;
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_DUMP);
dump = netdev->opts->u.dump.data;

assert(peer);

Expand Down
6 changes: 3 additions & 3 deletions net/hub.c
Expand Up @@ -281,14 +281,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->type == NET_CLIENT_OPTIONS_KIND_HUBPORT);
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_HUBPORT);
assert(!peer);
hubport = opts->u.hubport.data;
hubport = netdev->opts->u.hubport.data;

net_hub_add_port(hubport->hubid, name);
return 0;
Expand Down
6 changes: 3 additions & 3 deletions net/l2tpv3.c
Expand Up @@ -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)
{
Expand All @@ -545,8 +545,8 @@ int net_init_l2tpv3(const NetClientOptions *opts,
s->queue_tail = 0;
s->header_mismatch = false;

assert(opts->type == NET_CLIENT_OPTIONS_KIND_L2TPV3);
l2tpv3 = opts->u.l2tpv3.data;
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_L2TPV3);
l2tpv3 = netdev->opts->u.l2tpv3.data;

if (l2tpv3->has_ipv6 && l2tpv3->ipv6) {
s->ipv6 = l2tpv3->ipv6;
Expand Down
18 changes: 11 additions & 7 deletions net/net.c
Expand Up @@ -862,15 +862,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->type == NET_CLIENT_OPTIONS_KIND_NIC);
nic = opts->u.nic.data;
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_NIC);
nic = netdev->opts->u.nic.data;

idx = nic_get_free_idx();
if (idx == -1 || nb_nics >= MAX_NICS) {
Expand Down Expand Up @@ -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])(
const NetClientOptions *opts,
const Netdev *netdev,
const char *name,
NetClientState *peer, Error **errp) = {
[NET_CLIENT_OPTIONS_KIND_NIC] = net_init_nic,
Expand Down Expand Up @@ -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)
{
const NetClientOptions *opts;
Netdev legacy = {0};
const Netdev *netdev;
const char *name;
NetClientState *peer = NULL;

if (is_netdev) {
const Netdev *netdev = object;
netdev = object;
opts = netdev->opts;
name = netdev->id;

Expand All @@ -980,7 +982,9 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp)
}
} else {
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" */
name = net->has_id ? net->id : net->name;

Expand All @@ -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 */
if (errp && !*errp) {
error_setg(errp, QERR_DEVICE_INIT_FAILED,
Expand Down
4 changes: 2 additions & 2 deletions net/netmap.c
Expand Up @@ -418,10 +418,10 @@ 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)
{
const NetdevNetmapOptions *netmap_opts = opts->u.netmap.data;
const NetdevNetmapOptions *netmap_opts = netdev->opts->u.netmap.data;
struct nm_desc *nmd;
NetClientState *nc;
Error *err = NULL;
Expand Down
6 changes: 3 additions & 3 deletions net/slirp.c
Expand Up @@ -828,7 +828,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 */
Expand All @@ -839,8 +839,8 @@ int net_init_slirp(const NetClientOptions *opts, const char *name,
const char **dnssearch;
bool ipv4 = true, ipv6 = true;

assert(opts->type == NET_CLIENT_OPTIONS_KIND_USER);
user = opts->u.user.data;
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_USER);
user = netdev->opts->u.user.data;

if ((user->has_ipv6 && user->ipv6 && !user->has_ipv4) ||
(user->has_ipv4 && !user->ipv4)) {
Expand Down
6 changes: 3 additions & 3 deletions net/socket.c
Expand Up @@ -663,15 +663,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->type == NET_CLIENT_OPTIONS_KIND_SOCKET);
sock = opts->u.socket.data;
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_SOCKET);
sock = netdev->opts->u.socket.data;

if (sock->has_fd + sock->has_listen + sock->has_connect + sock->has_mcast +
sock->has_udp != 1) {
Expand Down
6 changes: 3 additions & 3 deletions net/tap-win32.c
Expand Up @@ -788,14 +788,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->type == NET_CLIENT_OPTIONS_KIND_TAP);
tap = opts->u.tap.data;
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_TAP);
tap = netdev->opts->u.tap.data;

if (!tap->has_ifname) {
error_report("tap: no interface name");
Expand Down
12 changes: 6 additions & 6 deletions net/tap.c
Expand Up @@ -571,16 +571,16 @@ 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;
const char *helper, *br;
TAPState *s;
int fd, vnet_hdr;

assert(opts->type == NET_CLIENT_OPTIONS_KIND_BRIDGE);
bridge = opts->u.bridge.data;
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_BRIDGE);
bridge = netdev->opts->u.bridge.data;

helper = bridge->has_helper ? bridge->helper : DEFAULT_BRIDGE_HELPER;
br = bridge->has_br ? bridge->br : DEFAULT_BRIDGE_INTERFACE;
Expand Down Expand Up @@ -735,7 +735,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;
Expand All @@ -747,8 +747,8 @@ int net_init_tap(const NetClientOptions *opts, const char *name,
const char *vhostfdname;
char ifname[128];

assert(opts->type == NET_CLIENT_OPTIONS_KIND_TAP);
tap = opts->u.tap.data;
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_TAP);
tap = netdev->opts->u.tap.data;
queues = tap->has_queues ? tap->queues : 1;
vhostfdname = tap->has_vhostfd ? tap->vhostfd : NULL;

Expand Down
6 changes: 3 additions & 3 deletions net/vde.c
Expand Up @@ -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->type == NET_CLIENT_OPTIONS_KIND_VDE);
vde = opts->u.vde.data;
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_VDE);
vde = netdev->opts->u.vde.data;

/* missing optional values have been initialized to "all bits zero" */
if (net_vde_init(peer, "vde", name, vde->sock, vde->port, vde->group,
Expand Down
6 changes: 3 additions & 3 deletions net/vhost-user.c
Expand Up @@ -334,15 +334,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)
{
int queues;
const NetdevVhostUserOptions *vhost_user_opts;
CharDriverState *chr;

assert(opts->type == NET_CLIENT_OPTIONS_KIND_VHOST_USER);
vhost_user_opts = opts->u.vhost_user.data;
assert(netdev->opts->type == NET_CLIENT_OPTIONS_KIND_VHOST_USER);
vhost_user_opts = netdev->opts->u.vhost_user.data;

chr = net_vhost_parse_chardev(vhost_user_opts, errp);
if (!chr) {
Expand Down

0 comments on commit cebea51

Please sign in to comment.