mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 18:23:57 -06:00
net: add qemu_create_nic_bus_devices()
This will instantiate any NICs which live on a given bus type. Each bus is allowed *one* substitution (for PCI it's virtio → virtio-net-pci, for Xen it's xen → xen-net-device; no point in overengineering it unless we actually want more). Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> Reviewed-by: Paul Durrant <paul@xen.org> Reviewed-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
2cdeca04ad
commit
93125e4b4f
2 changed files with 75 additions and 0 deletions
53
net/net.c
53
net/net.c
|
@ -1223,6 +1223,59 @@ DeviceState *qemu_create_nic_device(const char *typename, bool match_default,
|
|||
return dev;
|
||||
}
|
||||
|
||||
void qemu_create_nic_bus_devices(BusState *bus, const char *parent_type,
|
||||
const char *default_model,
|
||||
const char *alias, const char *alias_target)
|
||||
{
|
||||
GPtrArray *nic_models = qemu_get_nic_models(parent_type);
|
||||
const char *model;
|
||||
DeviceState *dev;
|
||||
NICInfo *nd;
|
||||
int i;
|
||||
|
||||
if (nic_model_help) {
|
||||
if (alias_target) {
|
||||
add_nic_model_help(alias_target, alias);
|
||||
}
|
||||
for (i = 0; i < nic_models->len - 1; i++) {
|
||||
add_nic_model_help(nic_models->pdata[i], NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/* Drop the NULL terminator which would make g_str_equal() unhappy */
|
||||
nic_models->len--;
|
||||
|
||||
for (i = 0; i < nb_nics; i++) {
|
||||
nd = &nd_table[i];
|
||||
|
||||
if (!nd->used || nd->instantiated) {
|
||||
continue;
|
||||
}
|
||||
|
||||
model = nd->model ? nd->model : default_model;
|
||||
if (!model) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Each bus type is allowed *one* substitution */
|
||||
if (g_str_equal(model, alias)) {
|
||||
model = alias_target;
|
||||
}
|
||||
|
||||
if (!g_ptr_array_find_with_equal_func(nic_models, model,
|
||||
g_str_equal, NULL)) {
|
||||
/* This NIC does not live on this bus. */
|
||||
continue;
|
||||
}
|
||||
|
||||
dev = qdev_new(model);
|
||||
qdev_set_nic_properties(dev, nd);
|
||||
qdev_realize_and_unref(dev, bus, &error_fatal);
|
||||
}
|
||||
|
||||
g_ptr_array_free(nic_models, true);
|
||||
}
|
||||
|
||||
static int (* const net_client_init_fun[NET_CLIENT_DRIVER__MAX])(
|
||||
const Netdev *netdev,
|
||||
const char *name,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue