mirror of https://gitee.com/openkylin/qemu.git
net: simplify net_client_init1()
Drop the union and move the hubport creation into the !is_netdev case. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Message-id: 1432743412-15943-6-git-send-email-stefanha@redhat.com
This commit is contained in:
parent
4ef0defbad
commit
1e81aba5ac
38
net/net.c
38
net/net.c
|
@ -913,18 +913,14 @@ 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)
|
||||||
{
|
{
|
||||||
union {
|
|
||||||
const Netdev *netdev;
|
|
||||||
const NetLegacy *net;
|
|
||||||
} u;
|
|
||||||
const NetClientOptions *opts;
|
const NetClientOptions *opts;
|
||||||
const char *name;
|
const char *name;
|
||||||
NetClientState *peer = NULL;
|
NetClientState *peer = NULL;
|
||||||
|
|
||||||
if (is_netdev) {
|
if (is_netdev) {
|
||||||
u.netdev = object;
|
const Netdev *netdev = object;
|
||||||
opts = u.netdev->opts;
|
opts = netdev->opts;
|
||||||
name = u.netdev->id;
|
name = netdev->id;
|
||||||
|
|
||||||
if (opts->kind == NET_CLIENT_OPTIONS_KIND_DUMP ||
|
if (opts->kind == NET_CLIENT_OPTIONS_KIND_DUMP ||
|
||||||
opts->kind == NET_CLIENT_OPTIONS_KIND_NIC ||
|
opts->kind == NET_CLIENT_OPTIONS_KIND_NIC ||
|
||||||
|
@ -934,19 +930,19 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
u.net = object;
|
const NetLegacy *net = object;
|
||||||
opts = u.net->opts;
|
opts = net->opts;
|
||||||
|
/* missing optional values have been initialized to "all bits zero" */
|
||||||
|
name = net->has_id ? net->id : net->name;
|
||||||
|
|
||||||
|
if (opts->kind == NET_CLIENT_OPTIONS_KIND_NONE) {
|
||||||
|
return 0; /* nothing to do */
|
||||||
|
}
|
||||||
if (opts->kind == NET_CLIENT_OPTIONS_KIND_HUBPORT) {
|
if (opts->kind == 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;
|
||||||
}
|
}
|
||||||
/* missing optional values have been initialized to "all bits zero" */
|
|
||||||
name = u.net->has_id ? u.net->id : u.net->name;
|
|
||||||
|
|
||||||
if (opts->kind == NET_CLIENT_OPTIONS_KIND_NONE) {
|
|
||||||
return 0; /* nothing to do */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!net_client_init_fun[opts->kind]) {
|
if (!net_client_init_fun[opts->kind]) {
|
||||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type",
|
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type",
|
||||||
|
@ -954,14 +950,12 @@ static int net_client_init1(const void *object, int is_netdev, Error **errp)
|
||||||
"into this binary)");
|
"into this binary)");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Do not add to a vlan if it's a -netdev or a nic with a netdev=
|
/* Do not add to a vlan if it's a nic with a netdev= parameter. */
|
||||||
* parameter. */
|
if (opts->kind != NET_CLIENT_OPTIONS_KIND_NIC ||
|
||||||
if (!is_netdev &&
|
!opts->nic->has_netdev) {
|
||||||
(opts->kind != NET_CLIENT_OPTIONS_KIND_NIC ||
|
peer = net_hub_add_port(net->has_vlan ? net->vlan : 0, NULL);
|
||||||
!opts->nic->has_netdev)) {
|
}
|
||||||
peer = net_hub_add_port(u.net->has_vlan ? u.net->vlan : 0, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (net_client_init_fun[opts->kind](opts, name, peer, errp) < 0) {
|
if (net_client_init_fun[opts->kind](opts, name, peer, errp) < 0) {
|
||||||
|
|
Loading…
Reference in New Issue