net: Convert to new qapi union layout
We have two issues with our qapi union layout: 1) Even though the QMP wire format spells the tag 'type', the C code spells it 'kind', requiring some hacks in the generator. 2) The C struct uses an anonymous union, which places all tag values in the same namespace as all non-variant members. This leads to spurious collisions if a tag value matches a non-variant member's name. Make the conversion to the new layout for net-related code. Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <1445898903-12082-18-git-send-email-eblake@redhat.com> [Commit message tweaked slightly] Signed-off-by: Markus Armbruster <armbru@redhat.com>stable-2.5
parent
2d32addae7
commit
8d0bcba837
|
@ -187,8 +187,8 @@ int net_init_dump(const NetClientOptions *opts, const char *name,
|
||||||
NetClientState *nc;
|
NetClientState *nc;
|
||||||
DumpNetClient *dnc;
|
DumpNetClient *dnc;
|
||||||
|
|
||||||
assert(opts->kind == NET_CLIENT_OPTIONS_KIND_DUMP);
|
assert(opts->type == NET_CLIENT_OPTIONS_KIND_DUMP);
|
||||||
dump = opts->dump;
|
dump = opts->u.dump;
|
||||||
|
|
||||||
assert(peer);
|
assert(peer);
|
||||||
|
|
||||||
|
|
|
@ -285,9 +285,9 @@ int net_init_hubport(const NetClientOptions *opts, const char *name,
|
||||||
{
|
{
|
||||||
const NetdevHubPortOptions *hubport;
|
const NetdevHubPortOptions *hubport;
|
||||||
|
|
||||||
assert(opts->kind == NET_CLIENT_OPTIONS_KIND_HUBPORT);
|
assert(opts->type == NET_CLIENT_OPTIONS_KIND_HUBPORT);
|
||||||
assert(!peer);
|
assert(!peer);
|
||||||
hubport = opts->hubport;
|
hubport = opts->u.hubport;
|
||||||
|
|
||||||
net_hub_add_port(hubport->hubid, name);
|
net_hub_add_port(hubport->hubid, name);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -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->kind == NET_CLIENT_OPTIONS_KIND_L2TPV3);
|
assert(opts->type == NET_CLIENT_OPTIONS_KIND_L2TPV3);
|
||||||
l2tpv3 = opts->l2tpv3;
|
l2tpv3 = opts->u.l2tpv3;
|
||||||
|
|
||||||
if (l2tpv3->has_ipv6 && l2tpv3->ipv6) {
|
if (l2tpv3->has_ipv6 && l2tpv3->ipv6) {
|
||||||
s->ipv6 = l2tpv3->ipv6;
|
s->ipv6 = l2tpv3->ipv6;
|
||||||
|
|
24
net/net.c
24
net/net.c
|
@ -882,8 +882,8 @@ static int net_init_nic(const NetClientOptions *opts, const char *name,
|
||||||
NICInfo *nd;
|
NICInfo *nd;
|
||||||
const NetLegacyNicOptions *nic;
|
const NetLegacyNicOptions *nic;
|
||||||
|
|
||||||
assert(opts->kind == NET_CLIENT_OPTIONS_KIND_NIC);
|
assert(opts->type == NET_CLIENT_OPTIONS_KIND_NIC);
|
||||||
nic = opts->nic;
|
nic = opts->u.nic;
|
||||||
|
|
||||||
idx = nic_get_free_idx();
|
idx = nic_get_free_idx();
|
||||||
if (idx == -1 || nb_nics >= MAX_NICS) {
|
if (idx == -1 || nb_nics >= MAX_NICS) {
|
||||||
|
@ -984,9 +984,9 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp)
|
||||||
opts = netdev->opts;
|
opts = netdev->opts;
|
||||||
name = netdev->id;
|
name = netdev->id;
|
||||||
|
|
||||||
if (opts->kind == NET_CLIENT_OPTIONS_KIND_DUMP ||
|
if (opts->type == NET_CLIENT_OPTIONS_KIND_DUMP ||
|
||||||
opts->kind == NET_CLIENT_OPTIONS_KIND_NIC ||
|
opts->type == NET_CLIENT_OPTIONS_KIND_NIC ||
|
||||||
!net_client_init_fun[opts->kind]) {
|
!net_client_init_fun[opts->type]) {
|
||||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type",
|
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type",
|
||||||
"a netdev backend type");
|
"a netdev backend type");
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -997,16 +997,16 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp)
|
||||||
/* 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;
|
||||||
|
|
||||||
if (opts->kind == NET_CLIENT_OPTIONS_KIND_NONE) {
|
if (opts->type == NET_CLIENT_OPTIONS_KIND_NONE) {
|
||||||
return 0; /* nothing to do */
|
return 0; /* nothing to do */
|
||||||
}
|
}
|
||||||
if (opts->kind == NET_CLIENT_OPTIONS_KIND_HUBPORT) {
|
if (opts->type == NET_CLIENT_OPTIONS_KIND_HUBPORT) {
|
||||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type",
|
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type",
|
||||||
"a net type");
|
"a net type");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!net_client_init_fun[opts->kind]) {
|
if (!net_client_init_fun[opts->type]) {
|
||||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type",
|
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type",
|
||||||
"a net backend type (maybe it is not compiled "
|
"a net backend type (maybe it is not compiled "
|
||||||
"into this binary)");
|
"into this binary)");
|
||||||
|
@ -1014,17 +1014,17 @@ 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. */
|
/* Do not add to a vlan if it's a nic with a netdev= parameter. */
|
||||||
if (opts->kind != NET_CLIENT_OPTIONS_KIND_NIC ||
|
if (opts->type != NET_CLIENT_OPTIONS_KIND_NIC ||
|
||||||
!opts->nic->has_netdev) {
|
!opts->u.nic->has_netdev) {
|
||||||
peer = net_hub_add_port(net->has_vlan ? net->vlan : 0, NULL);
|
peer = net_hub_add_port(net->has_vlan ? net->vlan : 0, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (net_client_init_fun[opts->kind](opts, name, peer, errp) < 0) {
|
if (net_client_init_fun[opts->type](opts, 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,
|
||||||
NetClientOptionsKind_lookup[opts->kind]);
|
NetClientOptionsKind_lookup[opts->type]);
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -746,8 +746,8 @@ int net_init_slirp(const NetClientOptions *opts, const char *name,
|
||||||
const NetdevUserOptions *user;
|
const NetdevUserOptions *user;
|
||||||
const char **dnssearch;
|
const char **dnssearch;
|
||||||
|
|
||||||
assert(opts->kind == NET_CLIENT_OPTIONS_KIND_USER);
|
assert(opts->type == NET_CLIENT_OPTIONS_KIND_USER);
|
||||||
user = opts->user;
|
user = opts->u.user;
|
||||||
|
|
||||||
vnet = user->has_net ? g_strdup(user->net) :
|
vnet = user->has_net ? g_strdup(user->net) :
|
||||||
user->has_ip ? g_strdup_printf("%s/24", user->ip) :
|
user->has_ip ? g_strdup_printf("%s/24", user->ip) :
|
||||||
|
|
|
@ -706,8 +706,8 @@ int net_init_socket(const NetClientOptions *opts, const char *name,
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
const NetdevSocketOptions *sock;
|
const NetdevSocketOptions *sock;
|
||||||
|
|
||||||
assert(opts->kind == NET_CLIENT_OPTIONS_KIND_SOCKET);
|
assert(opts->type == NET_CLIENT_OPTIONS_KIND_SOCKET);
|
||||||
sock = opts->socket;
|
sock = opts->u.socket;
|
||||||
|
|
||||||
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) {
|
||||||
|
|
|
@ -767,8 +767,8 @@ int net_init_tap(const NetClientOptions *opts, const char *name,
|
||||||
/* FIXME error_setg(errp, ...) on failure */
|
/* FIXME error_setg(errp, ...) on failure */
|
||||||
const NetdevTapOptions *tap;
|
const NetdevTapOptions *tap;
|
||||||
|
|
||||||
assert(opts->kind == NET_CLIENT_OPTIONS_KIND_TAP);
|
assert(opts->type == NET_CLIENT_OPTIONS_KIND_TAP);
|
||||||
tap = opts->tap;
|
tap = opts->u.tap;
|
||||||
|
|
||||||
if (!tap->has_ifname) {
|
if (!tap->has_ifname) {
|
||||||
error_report("tap: no interface name");
|
error_report("tap: no interface name");
|
||||||
|
|
|
@ -565,8 +565,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->kind == NET_CLIENT_OPTIONS_KIND_BRIDGE);
|
assert(opts->type == NET_CLIENT_OPTIONS_KIND_BRIDGE);
|
||||||
bridge = opts->bridge;
|
bridge = opts->u.bridge;
|
||||||
|
|
||||||
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;
|
||||||
|
@ -728,8 +728,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->kind == NET_CLIENT_OPTIONS_KIND_TAP);
|
assert(opts->type == NET_CLIENT_OPTIONS_KIND_TAP);
|
||||||
tap = opts->tap;
|
tap = opts->u.tap;
|
||||||
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;
|
||||||
|
|
||||||
|
|
|
@ -115,8 +115,8 @@ int net_init_vde(const NetClientOptions *opts, const char *name,
|
||||||
/* FIXME error_setg(errp, ...) on failure */
|
/* FIXME error_setg(errp, ...) on failure */
|
||||||
const NetdevVdeOptions *vde;
|
const NetdevVdeOptions *vde;
|
||||||
|
|
||||||
assert(opts->kind == NET_CLIENT_OPTIONS_KIND_VDE);
|
assert(opts->type == NET_CLIENT_OPTIONS_KIND_VDE);
|
||||||
vde = opts->vde;
|
vde = opts->u.vde;
|
||||||
|
|
||||||
/* 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,
|
||||||
|
|
|
@ -301,8 +301,8 @@ int net_init_vhost_user(const NetClientOptions *opts, const char *name,
|
||||||
const NetdevVhostUserOptions *vhost_user_opts;
|
const NetdevVhostUserOptions *vhost_user_opts;
|
||||||
CharDriverState *chr;
|
CharDriverState *chr;
|
||||||
|
|
||||||
assert(opts->kind == NET_CLIENT_OPTIONS_KIND_VHOST_USER);
|
assert(opts->type == NET_CLIENT_OPTIONS_KIND_VHOST_USER);
|
||||||
vhost_user_opts = opts->vhost_user;
|
vhost_user_opts = opts->u.vhost_user;
|
||||||
|
|
||||||
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