diff --git a/0001-Extract-stats-functions-from-the-qemu-driver.patch b/0001-Extract-stats-functions-from-the-qemu-driver.patch index 05e78dd..26ad264 100644 --- a/0001-Extract-stats-functions-from-the-qemu-driver.patch +++ b/0001-Extract-stats-functions-from-the-qemu-driver.patch @@ -18,10 +18,10 @@ them. create mode 100644 src/conf/domain_stats.c create mode 100644 src/conf/domain_stats.h -Index: libvirt-4.9.0/src/conf/domain_stats.c +Index: libvirt-4.10.0/src/conf/domain_stats.c =================================================================== --- /dev/null -+++ libvirt-4.9.0/src/conf/domain_stats.c ++++ libvirt-4.10.0/src/conf/domain_stats.c @@ -0,0 +1,139 @@ +/* + * domain_stats.c: domain stats extraction helpers @@ -162,10 +162,10 @@ Index: libvirt-4.9.0/src/conf/domain_stats.c +} + +#undef STATS_ADD_NET_PARAM -Index: libvirt-4.9.0/src/conf/domain_stats.h +Index: libvirt-4.10.0/src/conf/domain_stats.h =================================================================== --- /dev/null -+++ libvirt-4.9.0/src/conf/domain_stats.h ++++ libvirt-4.10.0/src/conf/domain_stats.h @@ -0,0 +1,64 @@ +/* + * domain_stats.h: domain stats extraction helpers @@ -231,11 +231,11 @@ Index: libvirt-4.9.0/src/conf/domain_stats.h + int *maxparams); + +#endif /* __DOMAIN_STATS_H */ -Index: libvirt-4.9.0/src/libvirt_private.syms +Index: libvirt-4.10.0/src/libvirt_private.syms =================================================================== ---- libvirt-4.9.0.orig/src/libvirt_private.syms -+++ libvirt-4.9.0/src/libvirt_private.syms -@@ -653,6 +653,9 @@ virDomainConfNWFilterInstantiate; +--- libvirt-4.10.0.orig/src/libvirt_private.syms ++++ libvirt-4.10.0/src/libvirt_private.syms +@@ -658,6 +658,9 @@ virDomainConfNWFilterInstantiate; virDomainConfNWFilterTeardown; virDomainConfVMNWFilterTeardown; @@ -245,7 +245,7 @@ Index: libvirt-4.9.0/src/libvirt_private.syms # conf/interface_conf.h virInterfaceDefFormat; -@@ -1541,6 +1544,7 @@ virCgroupGetMemoryUsage; +@@ -1547,6 +1550,7 @@ virCgroupGetMemoryUsage; virCgroupGetMemSwapHardLimit; virCgroupGetMemSwapUsage; virCgroupGetPercpuStats; @@ -253,10 +253,10 @@ Index: libvirt-4.9.0/src/libvirt_private.syms virCgroupHasController; virCgroupHasEmptyTasks; virCgroupKillPainfully; -Index: libvirt-4.9.0/src/qemu/qemu_driver.c +Index: libvirt-4.10.0/src/qemu/qemu_driver.c =================================================================== ---- libvirt-4.9.0.orig/src/qemu/qemu_driver.c -+++ libvirt-4.9.0/src/qemu/qemu_driver.c +--- libvirt-4.10.0.orig/src/qemu/qemu_driver.c ++++ libvirt-4.10.0/src/qemu/qemu_driver.c @@ -69,6 +69,7 @@ #include "virarptable.h" #include "viruuid.h" @@ -265,7 +265,7 @@ Index: libvirt-4.9.0/src/qemu/qemu_driver.c #include "domain_audit.h" #include "node_device_conf.h" #include "virpci.h" -@@ -19677,21 +19678,7 @@ qemuDomainGetStatsState(virQEMUDriverPtr +@@ -19908,21 +19909,7 @@ qemuDomainGetStatsState(virQEMUDriverPtr int *maxparams, unsigned int privflags ATTRIBUTE_UNUSED) { @@ -288,8 +288,8 @@ Index: libvirt-4.9.0/src/qemu/qemu_driver.c } -@@ -19714,37 +19701,7 @@ qemuDomainGetStatsCpu(virQEMUDriverPtr d - unsigned int privflags ATTRIBUTE_UNUSED) +@@ -20112,37 +20099,7 @@ qemuDomainGetStatsCpuCgroup(virDomainObj + int *maxparams) { qemuDomainObjPrivatePtr priv = dom->privateData; - unsigned long long cpu_time = 0; @@ -326,8 +326,8 @@ Index: libvirt-4.9.0/src/qemu/qemu_driver.c + return virCgroupGetStatsCpu(priv->cgroup, record, maxparams); } - static int -@@ -19924,44 +19881,6 @@ qemuDomainGetStatsVcpu(virQEMUDriverPtr + +@@ -20340,44 +20297,6 @@ qemuDomainGetStatsVcpu(virQEMUDriverPtr return ret; } @@ -372,7 +372,7 @@ Index: libvirt-4.9.0/src/qemu/qemu_driver.c static int qemuDomainGetStatsInterface(virQEMUDriverPtr driver ATTRIBUTE_UNUSED, virDomainObjPtr dom, -@@ -19969,68 +19888,9 @@ qemuDomainGetStatsInterface(virQEMUDrive +@@ -20385,68 +20304,9 @@ qemuDomainGetStatsInterface(virQEMUDrive int *maxparams, unsigned int privflags ATTRIBUTE_UNUSED) { @@ -442,7 +442,7 @@ Index: libvirt-4.9.0/src/qemu/qemu_driver.c #define QEMU_ADD_BLOCK_PARAM_UI(record, maxparams, num, name, value) \ do { \ char param_name[VIR_TYPED_PARAM_FIELD_LENGTH]; \ -@@ -20263,10 +20123,10 @@ qemuDomainGetStatsBlockExportHeader(virD +@@ -20679,10 +20539,10 @@ qemuDomainGetStatsBlockExportHeader(virD { int ret = -1; @@ -455,7 +455,7 @@ Index: libvirt-4.9.0/src/qemu/qemu_driver.c if (src->id) QEMU_ADD_BLOCK_PARAM_UI(records, nrecords, recordnr, "backingIndex", src->id); -@@ -20406,7 +20266,7 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr +@@ -20822,7 +20682,7 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr * after the iteration than it is to iterate twice; but we still * want count listed first. */ count_index = record->nparams; @@ -464,21 +464,37 @@ Index: libvirt-4.9.0/src/qemu/qemu_driver.c for (i = 0; i < dom->def->ndisks; i++) { if (qemuDomainGetStatsBlockExportDisk(dom->def->disks[i], stats, nodestats, -@@ -20431,10 +20291,6 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr +@@ -20847,8 +20707,6 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr #undef QEMU_ADD_BLOCK_PARAM_ULL -#undef QEMU_ADD_NAME_PARAM - + #define QEMU_ADD_IOTHREAD_PARAM_UI(record, maxparams, id, name, value) \ + do { \ + char param_name[VIR_TYPED_PARAM_FIELD_LENGTH]; \ +@@ -20896,7 +20754,7 @@ qemuDomainGetStatsIOThread(virQEMUDriver + if (niothreads == 0) + return 0; + +- QEMU_ADD_COUNT_PARAM(record, maxparams, "iothread", niothreads); ++ VIR_DOMAIN_STATS_ADD_COUNT_PARAM(record, maxparams, "iothread", niothreads); + + for (i = 0; i < niothreads; i++) { + if (iothreads[i]->poll_valid) { +@@ -20929,8 +20787,6 @@ qemuDomainGetStatsIOThread(virQEMUDriver + + #undef QEMU_ADD_IOTHREAD_PARAM_ULL + -#undef QEMU_ADD_COUNT_PARAM - static int qemuDomainGetStatsPerfOneEvent(virPerfPtr perf, virPerfEventType type, -Index: libvirt-4.9.0/src/util/vircgroup.c +Index: libvirt-4.10.0/src/util/vircgroup.c =================================================================== ---- libvirt-4.9.0.orig/src/util/vircgroup.c -+++ libvirt-4.9.0/src/util/vircgroup.c +--- libvirt-4.10.0.orig/src/util/vircgroup.c ++++ libvirt-4.10.0/src/util/vircgroup.c @@ -2794,6 +2794,44 @@ virCgroupControllerAvailable(int control return ret; } @@ -540,10 +556,10 @@ Index: libvirt-4.9.0/src/util/vircgroup.c int virCgroupNewPartition(const char *path ATTRIBUTE_UNUSED, bool create ATTRIBUTE_UNUSED, -Index: libvirt-4.9.0/src/util/vircgroup.h +Index: libvirt-4.10.0/src/util/vircgroup.h =================================================================== ---- libvirt-4.9.0.orig/src/util/vircgroup.h -+++ libvirt-4.9.0/src/util/vircgroup.h +--- libvirt-4.10.0.orig/src/util/vircgroup.h ++++ libvirt-4.10.0/src/util/vircgroup.h @@ -287,4 +287,9 @@ int virCgroupSetOwner(virCgroupPtr cgrou int virCgroupHasEmptyTasks(virCgroupPtr cgroup, int controller); @@ -554,10 +570,10 @@ Index: libvirt-4.9.0/src/util/vircgroup.h + int *maxparams); + #endif /* __VIR_CGROUP_H__ */ -Index: libvirt-4.9.0/src/conf/Makefile.inc.am +Index: libvirt-4.10.0/src/conf/Makefile.inc.am =================================================================== ---- libvirt-4.9.0.orig/src/conf/Makefile.inc.am -+++ libvirt-4.9.0/src/conf/Makefile.inc.am +--- libvirt-4.10.0.orig/src/conf/Makefile.inc.am ++++ libvirt-4.10.0/src/conf/Makefile.inc.am @@ -20,6 +20,8 @@ DOMAIN_CONF_SOURCES = \ conf/domain_audit.h \ conf/domain_nwfilter.c \ diff --git a/0001-libxl-add-support-for-BlockResize-API.patch b/0001-libxl-add-support-for-BlockResize-API.patch index 5fdf1c0..8a22938 100644 --- a/0001-libxl-add-support-for-BlockResize-API.patch +++ b/0001-libxl-add-support-for-BlockResize-API.patch @@ -19,10 +19,10 @@ reworking this patch and submitting it to upstream libvirt. src/libxl/libxl_driver.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) -Index: libvirt-4.9.0/src/libxl/libxl_driver.c +Index: libvirt-4.10.0/src/libxl/libxl_driver.c =================================================================== ---- libvirt-4.9.0.orig/src/libxl/libxl_driver.c -+++ libvirt-4.9.0/src/libxl/libxl_driver.c +--- libvirt-4.10.0.orig/src/libxl/libxl_driver.c ++++ libvirt-4.10.0/src/libxl/libxl_driver.c @@ -5253,6 +5253,97 @@ libxlDomainMemoryStats(virDomainPtr dom, #undef LIBXL_SET_MEMSTAT @@ -121,7 +121,7 @@ Index: libvirt-4.9.0/src/libxl/libxl_driver.c static int libxlDomainGetJobInfo(virDomainPtr dom, virDomainJobInfoPtr info) -@@ -6635,6 +6726,7 @@ static virHypervisorDriver libxlHypervis +@@ -6637,6 +6728,7 @@ static virHypervisorDriver libxlHypervis #endif .nodeGetFreeMemory = libxlNodeGetFreeMemory, /* 0.9.0 */ .nodeGetCellsFreeMemory = libxlNodeGetCellsFreeMemory, /* 1.1.1 */ diff --git a/0002-lxc-implement-connectGetAllDomainStats.patch b/0002-lxc-implement-connectGetAllDomainStats.patch index 2e5df44..249bc09 100644 --- a/0002-lxc-implement-connectGetAllDomainStats.patch +++ b/0002-lxc-implement-connectGetAllDomainStats.patch @@ -9,10 +9,10 @@ them using the existing API. src/lxc/lxc_driver.c | 138 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) -Index: libvirt-4.9.0/src/lxc/lxc_driver.c +Index: libvirt-4.10.0/src/lxc/lxc_driver.c =================================================================== ---- libvirt-4.9.0.orig/src/lxc/lxc_driver.c -+++ libvirt-4.9.0/src/lxc/lxc_driver.c +--- libvirt-4.10.0.orig/src/lxc/lxc_driver.c ++++ libvirt-4.10.0/src/lxc/lxc_driver.c @@ -78,6 +78,7 @@ #include "viraccessapichecklxc.h" #include "virhostdev.h" diff --git a/0a1b5653-xenconfig-support-openvswitch.patch b/0a1b5653-xenconfig-support-openvswitch.patch new file mode 100644 index 0000000..97ade80 --- /dev/null +++ b/0a1b5653-xenconfig-support-openvswitch.patch @@ -0,0 +1,345 @@ +commit 0a1b5653825bf67d3893a9177e188a131daba157 +Author: Jim Fehlig +Date: Fri Nov 16 13:08:23 2018 -0700 + + xenconfig: add support for openvswitch configuration + + Add support for converting openvswitch interface configuration + to/from libvirt domXML and xl.cfg(5). The xl config syntax for + virtual interfaces is described in detail in the + xl-network-configuration(5) man page. The Xen Networking wiki + also contains information and examples for using openvswitch + in xl.cfg config format + + https://wiki.xenproject.org/wiki/Xen_Networking#Open_vSwitch + + Tests are added to check conversions of openvswitch tagged and + trunked VLAN configuration. + + Signed-off-by: Jim Fehlig + ACKed-by: Michal Privoznik + +Index: libvirt-4.10.0/src/xenconfig/xen_common.c +=================================================================== +--- libvirt-4.10.0.orig/src/xenconfig/xen_common.c ++++ libvirt-4.10.0/src/xenconfig/xen_common.c +@@ -856,6 +856,80 @@ xenParseCharDev(virConfPtr conf, virDoma + } + + ++static int ++xenParseVifBridge(virDomainNetDefPtr net, char *bridge) ++{ ++ char *vlanstr; ++ unsigned int tag; ++ ++ if ((vlanstr = strchr(bridge, '.'))) { ++ /* 'bridge' string contains a bridge name and single vlan tag */ ++ if (VIR_STRNDUP(net->data.bridge.brname, bridge, vlanstr - bridge) < 0) ++ return -1; ++ ++ vlanstr++; ++ if (virStrToLong_ui(vlanstr, NULL, 10, &tag) < 0) ++ return -1; ++ ++ if (VIR_ALLOC_N(net->vlan.tag, 1) < 0) ++ return -1; ++ ++ net->vlan.tag[0] = tag; ++ net->vlan.nTags = 1; ++ ++ if (VIR_ALLOC(net->virtPortProfile) < 0) ++ return -1; ++ ++ net->virtPortProfile->virtPortType = VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH; ++ return 0; ++ } else if ((vlanstr = strchr(bridge, ':'))) { ++ /* 'bridge' string contains a bridge name and one or more vlan trunks */ ++ size_t i; ++ size_t nvlans = 0; ++ char **vlanstr_list = virStringSplit(bridge, ":", 0); ++ ++ if (!vlanstr_list) ++ return -1; ++ ++ if (VIR_STRDUP(net->data.bridge.brname, vlanstr_list[0]) < 0) { ++ virStringListFree(vlanstr_list); ++ return -1; ++ } ++ ++ for (i = 1; vlanstr_list[i]; i++) ++ nvlans++; ++ ++ if (VIR_ALLOC_N(net->vlan.tag, nvlans) < 0) { ++ virStringListFree(vlanstr_list); ++ return -1; ++ } ++ ++ for (i = 1; i <= nvlans; i++) { ++ if (virStrToLong_ui(vlanstr_list[i], NULL, 10, &tag) < 0) { ++ virStringListFree(vlanstr_list); ++ return -1; ++ } ++ net->vlan.tag[i - 1] = tag; ++ } ++ net->vlan.nTags = nvlans; ++ net->vlan.trunk = true; ++ virStringListFree(vlanstr_list); ++ ++ if (VIR_ALLOC(net->virtPortProfile) < 0) ++ return -1; ++ ++ net->virtPortProfile->virtPortType = VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH; ++ return 0; ++ } else { ++ /* 'bridge' string only contains the bridge name */ ++ if (VIR_STRDUP(net->data.bridge.brname, bridge) < 0) ++ return -1; ++ } ++ ++ return 0; ++} ++ ++ + static virDomainNetDefPtr + xenParseVif(char *entry, const char *vif_typename) + { +@@ -974,8 +1048,8 @@ xenParseVif(char *entry, const char *vif + net->type = VIR_DOMAIN_NET_TYPE_ETHERNET; + } + +- if (net->type == VIR_DOMAIN_NET_TYPE_BRIDGE) { +- if (bridge[0] && VIR_STRDUP(net->data.bridge.brname, bridge) < 0) ++ if (net->type == VIR_DOMAIN_NET_TYPE_BRIDGE && bridge[0]) { ++ if (xenParseVifBridge(net, bridge) < 0) + goto cleanup; + } + if (ip[0]) { +@@ -1264,14 +1338,41 @@ xenFormatNet(virConnectPtr conn, + + switch (net->type) { + case VIR_DOMAIN_NET_TYPE_BRIDGE: ++ { ++ virNetDevVPortProfilePtr port_profile = virDomainNetGetActualVirtPortProfile(net); ++ virNetDevVlanPtr virt_vlan = virDomainNetGetActualVlan(net); ++ const char *script = net->script; ++ size_t i; ++ + virBufferAsprintf(&buf, ",bridge=%s", net->data.bridge.brname); ++ if (port_profile && ++ port_profile->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH) { ++ if (!script) ++ script = "vif-openvswitch"; ++ /* ++ * libxl_device_nic->bridge supports an extended format for ++ * specifying VLAN tags and trunks ++ * ++ * BRIDGE_NAME[.VLAN][:TRUNK:TRUNK] ++ */ ++ if (virt_vlan && virt_vlan->nTags > 0) { ++ if (virt_vlan->trunk) { ++ for (i = 0; i < virt_vlan->nTags; i++) ++ virBufferAsprintf(&buf, ":%d", virt_vlan->tag[i]); ++ } else { ++ virBufferAsprintf(&buf, ".%d", virt_vlan->tag[0]); ++ } ++ } ++ } ++ + if (net->guestIP.nips > 0) { + char *ipStr = xenMakeIPList(&net->guestIP); + virBufferAsprintf(&buf, ",ip=%s", ipStr); + VIR_FREE(ipStr); + } +- virBufferAsprintf(&buf, ",script=%s", DEFAULT_VIF_SCRIPT); +- break; ++ virBufferAsprintf(&buf, ",script=%s", script ? script : DEFAULT_VIF_SCRIPT); ++ } ++ break; + + case VIR_DOMAIN_NET_TYPE_ETHERNET: + if (net->script) +Index: libvirt-4.10.0/tests/xlconfigdata/test-fullvirt-ovswitch-tagged.cfg +=================================================================== +--- /dev/null ++++ libvirt-4.10.0/tests/xlconfigdata/test-fullvirt-ovswitch-tagged.cfg +@@ -0,0 +1,25 @@ ++name = "XenGuest2" ++uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" ++maxmem = 8192 ++memory = 8192 ++vcpus = 8 ++pae = 1 ++acpi = 1 ++apic = 1 ++viridian = 0 ++rtc_timeoffset = 0 ++localtime = 0 ++on_poweroff = "destroy" ++on_reboot = "restart" ++on_crash = "restart" ++device_model = "/usr/lib/xen/bin/qemu-system-i386" ++sdl = 0 ++vnc = 1 ++vncunused = 1 ++vnclisten = "127.0.0.1" ++vif = [ "mac=00:16:3e:66:92:9c,bridge=ovsbr0.42,script=vif-openvswitch,model=e1000" ] ++parallel = "none" ++serial = "none" ++builder = "hvm" ++boot = "c" ++disk = [ "format=raw,vdev=hda,access=rw,backendtype=phy,target=/dev/HostVG/XenGuest2" ] +Index: libvirt-4.10.0/tests/xlconfigdata/test-fullvirt-ovswitch-tagged.xml +=================================================================== +--- /dev/null ++++ libvirt-4.10.0/tests/xlconfigdata/test-fullvirt-ovswitch-tagged.xml +@@ -0,0 +1,50 @@ ++ ++ XenGuest2 ++ c7a5fdb2-cdaf-9455-926a-d65c16db1809 ++ 8388608 ++ 8388608 ++ 8 ++ ++ hvm ++ /usr/lib/xen/boot/hvmloader ++ ++ ++ ++ ++ ++ ++ ++ ++ destroy ++ restart ++ restart ++ ++ /usr/lib/xen/bin/qemu-system-i386 ++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++