This patch modifies libxl interface for qemu disaggregation. For the moment, due to some dependencies between devices, we can't let the user choose which QEMU emulate a device.
Moreoever this patch adds an "id" field to nic interface. It will be used in config file to specify which QEMU handle the network card. A possible disaggregation is: - UI: Emulate graphic card, USB, keyboard, mouse, default devices (PIIX4, root bridge, ...) - IDE: Emulate disk - Serial: Emulate serial port - Audio: Emulate audio card - Net: Emulate one or more network cards, multiple QEMU can emulate different card. The emulated card is specified with its nic ID. Signed-off-by: Julien Grall <julien.gr...@citrix.com> --- tools/libxl/libxl.h | 3 +++ tools/libxl/libxl_types.idl | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 0 deletions(-) diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index c614d6f..71d4808 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -307,6 +307,7 @@ void libxl_cpuid_dispose(libxl_cpuid_policy_list *cpuid_list); #define LIBXL_PCI_FUNC_ALL (~0U) typedef uint32_t libxl_domid; +typedef uint32_t libxl_dmid; /* * Formatting Enumerations. @@ -478,12 +479,14 @@ typedef struct { libxl_domain_build_info b_info; int num_disks, num_nics, num_pcidevs, num_vfbs, num_vkbs; + int num_dms; libxl_device_disk *disks; libxl_device_nic *nics; libxl_device_pci *pcidevs; libxl_device_vfb *vfbs; libxl_device_vkb *vkbs; + libxl_dm *dms; libxl_action_on_shutdown on_poweroff; libxl_action_on_shutdown on_reboot; diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl index daa8c79..36c802a 100644 --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -246,6 +246,20 @@ libxl_domain_sched_params = Struct("domain_sched_params",[ ("extratime", integer, {'init_val': 'LIBXL_DOMAIN_SCHED_PARAM_EXTRATIME_DEFAULT'}), ]) +libxl_dm_cap = Enumeration("dm_cap", [ + (1, "UI"), # Emulate all UI + default device + (2, "IDE"), # Emulate IDE + (4, "SERIAL"), # Emulate Serial + (8, "AUDIO"), # Emulate audio + ]) + +libxl_dm = Struct("dm", [ + ("name", string), + ("path", string), + ("capabilities", uint64), + ("vifs", libxl_string_list), + ]) + libxl_domain_build_info = Struct("domain_build_info",[ ("max_vcpus", integer), ("avail_vcpus", libxl_bitmap), @@ -367,6 +381,7 @@ libxl_device_nic = Struct("device_nic", [ ("nictype", libxl_nic_type), ("rate_bytes_per_interval", uint64), ("rate_interval_usecs", uint32), + ("id", string), ]) libxl_device_pci = Struct("device_pci", [ -- Julien Grall