net: add -net nic,netdev= option
Patchworks-ID: 35515 Signed-off-by: Mark McLoughlin <markmc@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
577c4af937
commit
5869c4d515
41
net.c
41
net.c
|
@ -2340,6 +2340,19 @@ VLANState *qemu_find_vlan(int id, int allocate)
|
||||||
return vlan;
|
return vlan;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VLANClientState *qemu_find_netdev(const char *id)
|
||||||
|
{
|
||||||
|
VLANClientState *vc;
|
||||||
|
|
||||||
|
QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
|
||||||
|
if (!strcmp(vc->name, id)) {
|
||||||
|
return vc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static int nic_get_free_idx(void)
|
static int nic_get_free_idx(void)
|
||||||
{
|
{
|
||||||
int index;
|
int index;
|
||||||
|
@ -2417,6 +2430,7 @@ static int net_init_nic(QemuOpts *opts,
|
||||||
{
|
{
|
||||||
int idx;
|
int idx;
|
||||||
NICInfo *nd;
|
NICInfo *nd;
|
||||||
|
const char *netdev;
|
||||||
|
|
||||||
idx = nic_get_free_idx();
|
idx = nic_get_free_idx();
|
||||||
if (idx == -1 || nb_nics >= MAX_NICS) {
|
if (idx == -1 || nb_nics >= MAX_NICS) {
|
||||||
|
@ -2428,9 +2442,16 @@ static int net_init_nic(QemuOpts *opts,
|
||||||
|
|
||||||
memset(nd, 0, sizeof(*nd));
|
memset(nd, 0, sizeof(*nd));
|
||||||
|
|
||||||
assert(vlan);
|
if ((netdev = qemu_opt_get(opts, "netdev"))) {
|
||||||
nd->vlan = vlan;
|
nd->netdev = qemu_find_netdev(netdev);
|
||||||
|
if (!nd->netdev) {
|
||||||
|
qemu_error("netdev '%s' not found\n", netdev);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
assert(vlan);
|
||||||
|
nd->vlan = vlan;
|
||||||
|
}
|
||||||
if (name) {
|
if (name) {
|
||||||
nd->name = qemu_strdup(name);
|
nd->name = qemu_strdup(name);
|
||||||
}
|
}
|
||||||
|
@ -2462,7 +2483,9 @@ static int net_init_nic(QemuOpts *opts,
|
||||||
}
|
}
|
||||||
|
|
||||||
nd->used = 1;
|
nd->used = 1;
|
||||||
nd->vlan->nb_guest_devs++;
|
if (vlan) {
|
||||||
|
nd->vlan->nb_guest_devs++;
|
||||||
|
}
|
||||||
nb_nics++;
|
nb_nics++;
|
||||||
|
|
||||||
return idx;
|
return idx;
|
||||||
|
@ -2820,6 +2843,11 @@ static struct {
|
||||||
.init = net_init_nic,
|
.init = net_init_nic,
|
||||||
.desc = {
|
.desc = {
|
||||||
NET_COMMON_PARAMS_DESC,
|
NET_COMMON_PARAMS_DESC,
|
||||||
|
{
|
||||||
|
.name = "netdev",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "id of -netdev to connect to",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.name = "macaddr",
|
.name = "macaddr",
|
||||||
.type = QEMU_OPT_STRING,
|
.type = QEMU_OPT_STRING,
|
||||||
|
@ -3069,7 +3097,10 @@ int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_netdev) {
|
/* Do not add to a vlan if it's a -netdev or a nic with a
|
||||||
|
* netdev= parameter. */
|
||||||
|
if (!(is_netdev ||
|
||||||
|
(strcmp(type, "nic") == 0 && qemu_opt_get(opts, "netdev")))) {
|
||||||
vlan = qemu_find_vlan(qemu_opt_get_number(opts, "vlan", 0), 1);
|
vlan = qemu_find_vlan(qemu_opt_get_number(opts, "vlan", 0), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue