[libvirt] [dbus PATCH 0/6] More DomainAPIs

Katerina Koukiou (6): Implement BlockCopy method for Domain Interface Implement InterfaceAddresses method for Domain Interface Implement PinEmulator method for Domain Interface Implement PinIOThread method for Domain Interface Implement PinVcpu method for Domain Interface Implement PMWakeup method for Domain Interface data/org.libvirt.Domain.xml | 40 +++++++ src/domain.c | 269 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 309 insertions(+) -- 2.15.0

Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Domain.xml | 8 ++++++++ src/domain.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/data/org.libvirt.Domain.xml b/data/org.libvirt.Domain.xml index 1cd79f8..96a1ca6 100644 --- a/data/org.libvirt.Domain.xml +++ b/data/org.libvirt.Domain.xml @@ -69,6 +69,14 @@ <arg name="bandwidth" type="t" direction="in"/> <arg name="flags" type="u" direction="in"/> </method> + <method name="BlockCopy"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainBlockCopy"/> + <arg name="disk" type="s" direction="in"/> + <arg name="destxml" type="s" direction="in"/> + <arg name="params" type="a{sv}" direction="in"/> + <arg name="flags" type="u" direction="in"/> + </method> <method name="BlockJobAbort"> <annotation name="org.gtk.GDBus.DocString" value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainBlockJobAbort"/> diff --git a/src/domain.c b/src/domain.c index ec5b99c..562e709 100644 --- a/src/domain.c +++ b/src/domain.c @@ -476,6 +476,40 @@ virtDBusDomainBlockCommit(GVariant *inArgs, virtDBusUtilSetLastVirtError(error); } +static void +virtDBusDomainBlockCopy(GVariant *inArgs, + GUnixFDList *inFDs G_GNUC_UNUSED, + const gchar *objectPath, + gpointer userData, + GVariant **outArgs G_GNUC_UNUSED, + GUnixFDList **outFDs G_GNUC_UNUSED, + GError **error) +{ + virtDBusConnect *connect = userData; + g_autoptr(virDomain) domain = NULL; + const gchar *disk; + const gchar *destxml; + g_autoptr(GVariantIter) iter = NULL; + guint flags; + g_auto(virtDBusUtilTypedParams) params = { 0 }; + + g_variant_get(inArgs, "(&s&sa{sv}u)", &disk, &destxml, &iter, &flags); + + if (!virtDBusUtilGVariantToTypedParams(iter, ¶ms.params, + ¶ms.nparams, error)) { + return; + } + + domain = virtDBusDomainGetVirDomain(connect, objectPath, error); + if (!domain) + return; + + if (virDomainBlockCopy(domain, disk, destxml, params.params, + params.nparams, flags) < 0) { + virtDBusUtilSetLastVirtError(error); + } +} + static void virtDBusDomainBlockJobAbort(GVariant *inArgs, GUnixFDList *inFDs G_GNUC_UNUSED, @@ -2628,6 +2662,7 @@ static virtDBusGDBusMethodTable virtDBusDomainMethodTable[] = { { "AddIOThread", virtDBusDomainAddIOThread }, { "AttachDevice", virtDBusDomainAttachDevice }, { "BlockCommit", virtDBusDomainBlockCommit }, + { "BlockCopy", virtDBusDomainBlockCopy }, { "BlockJobAbort", virtDBusDomainBlockJobAbort }, { "BlockJobSetSpeed", virtDBusDomainBlockJobSetSpeed }, { "BlockPeek", virtDBusDomainBlockPeek }, -- 2.15.0

On Fri, Apr 27, 2018 at 11:00:50AM +0200, Katerina Koukiou wrote:
Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Domain.xml | 8 ++++++++ src/domain.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+)
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>

VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_ARP should be added later on. Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Domain.xml | 7 ++++ src/domain.c | 87 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) diff --git a/data/org.libvirt.Domain.xml b/data/org.libvirt.Domain.xml index 96a1ca6..d81f14f 100644 --- a/data/org.libvirt.Domain.xml +++ b/data/org.libvirt.Domain.xml @@ -310,6 +310,13 @@ value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainInjectNMI"/> <arg name="flags" type="u" direction="in"/> </method> + <method name="InterfaceAddresses"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainInterfaceAddresses"/> + <arg name="source" type="s" direction="in"/> + <arg name="flags" type="u" direction="in"/> + <arg name="ifaces" type="a(ssa(isu))" direction="out"/> + </method> <method name="ManagedSave"> <annotation name="org.gtk.GDBus.DocString" value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainManagedSave"/> diff --git a/src/domain.c b/src/domain.c index 562e709..83ad053 100644 --- a/src/domain.c +++ b/src/domain.c @@ -35,6 +35,12 @@ VIRT_DBUS_ENUM_IMPL(virtDBusDomainDiskError, "unspec", "no-space") +VIRT_DBUS_ENUM_DECL(virtDBusDomainInterfaceAddressesSource) +VIRT_DBUS_ENUM_IMPL(virtDBusDomainInterfaceAddressesSource, + VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_LAST, + "lease", + "agent") + VIRT_DBUS_ENUM_DECL(virtDBusDomainJob) VIRT_DBUS_ENUM_IMPL(virtDBusDomainJob, VIR_DOMAIN_JOB_LAST, @@ -73,6 +79,25 @@ struct _virtDBusDomainFSInfoList { typedef struct _virtDBusDomainFSInfoList virtDBusDomainFSInfoList; +struct _virtDBusDomainInterfaceList { + virDomainInterfacePtr *ifaces; + gint count; +}; + +typedef struct _virtDBusDomainInterfaceList virtDBusDomainInterfaceList; + +static void +virtDBusDomainInterfaceListClear(virtDBusDomainInterfaceList *ifaces) +{ + for (gint i = 0; i < ifaces->count; i++) + virDomainInterfaceFree(ifaces->ifaces[i]); + + g_free(ifaces->ifaces); +} + +G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(virtDBusDomainInterfaceList, + virtDBusDomainInterfaceListClear); + static void virtDBusDomainFSInfoListClear(virtDBusDomainFSInfoList *info) { @@ -1684,6 +1709,67 @@ virtDBusDomainInjectNMI(GVariant *inArgs, virtDBusUtilSetLastVirtError(error); } +static void +virtDBusDomainInterfaceAddresses(GVariant *inArgs, + GUnixFDList *inFDs G_GNUC_UNUSED, + const gchar *objectPath, + gpointer userData, + GVariant **outArgs G_GNUC_UNUSED, + GUnixFDList **outFDs G_GNUC_UNUSED, + GError **error) +{ + virtDBusConnect *connect = userData; + g_autoptr(virDomain) domain = NULL; + gint source; + const gchar *sourceStr; + g_auto(virtDBusDomainInterfaceList) ifaces = { 0 }; + guint flags; + GVariantBuilder builder; + GVariant *res; + + g_variant_get(inArgs, "(&su)", &sourceStr, &flags); + + domain = virtDBusDomainGetVirDomain(connect, objectPath, error); + if (!domain) + return; + + source = virtDBusDomainInterfaceAddressesSourceTypeFromString(sourceStr); + if (source < 0) { + g_set_error(error, VIRT_DBUS_ERROR, VIRT_DBUS_ERROR_LIBVIRT, + "Can't get valid virDomainInterfaceAddressesSource from string '%s'.", + sourceStr); + return; + } + ifaces.count = virDomainInterfaceAddresses(domain, &(ifaces.ifaces), + source, flags); + if (ifaces.count < 0) + virtDBusUtilSetLastVirtError(error); + + + g_variant_builder_init(&builder, G_VARIANT_TYPE("a(ssa(isu))")); + for (gint i = 0; i < ifaces.count; i++) { + virDomainInterfacePtr iface = ifaces.ifaces[i]; + + g_variant_builder_open(&builder, G_VARIANT_TYPE("(ssa(isu))")); + g_variant_builder_add(&builder, "s", iface->name); + g_variant_builder_add(&builder, "s", + iface->hwaddr ? iface->hwaddr : ""); + g_variant_builder_open(&builder, G_VARIANT_TYPE("a(isu)")); + for (guint j = 0; j < iface->naddrs; j++) { + g_variant_builder_open(&builder, G_VARIANT_TYPE("(isu)")); + g_variant_builder_add(&builder, "i", iface->addrs[j].type); + g_variant_builder_add(&builder, "s", iface->addrs[j].addr); + g_variant_builder_add(&builder, "u", iface->addrs[j].prefix); + g_variant_builder_close(&builder); + } + g_variant_builder_close(&builder); + g_variant_builder_close(&builder); + } + res = g_variant_builder_end(&builder); + + *outArgs = g_variant_new_tuple(&res, 1); +} + static void virtDBusDomainManagedSave(GVariant *inArgs, GUnixFDList *inFDs G_GNUC_UNUSED, @@ -2699,6 +2785,7 @@ static virtDBusGDBusMethodTable virtDBusDomainMethodTable[] = { { "GetXMLDesc", virtDBusDomainGetXMLDesc }, { "HasManagedSaveImage", virtDBusDomainHasManagedSaveImage }, { "InjectNMI", virtDBusDomainInjectNMI }, + { "InterfaceAddresses", virtDBusDomainInterfaceAddresses }, { "ManagedSave", virtDBusDomainManagedSave }, { "ManagedSaveRemove", virtDBusDomainManagedSaveRemove }, { "MemoryPeek", virtDBusDomainMemoryPeek }, -- 2.15.0

On Fri, Apr 27, 2018 at 11:00:51AM +0200, Katerina Koukiou wrote:
VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_ARP should be added later on.
Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Domain.xml | 7 ++++ src/domain.c | 87 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+)
[...]
diff --git a/src/domain.c b/src/domain.c index 562e709..83ad053 100644 --- a/src/domain.c +++ b/src/domain.c
[...]
@@ -1684,6 +1709,67 @@ virtDBusDomainInjectNMI(GVariant *inArgs, virtDBusUtilSetLastVirtError(error); }
+static void +virtDBusDomainInterfaceAddresses(GVariant *inArgs, + GUnixFDList *inFDs G_GNUC_UNUSED, + const gchar *objectPath, + gpointer userData, + GVariant **outArgs G_GNUC_UNUSED, + GUnixFDList **outFDs G_GNUC_UNUSED, + GError **error) +{ + virtDBusConnect *connect = userData; + g_autoptr(virDomain) domain = NULL; + gint source; + const gchar *sourceStr; + g_auto(virtDBusDomainInterfaceList) ifaces = { 0 }; + guint flags; + GVariantBuilder builder; + GVariant *res; + + g_variant_get(inArgs, "(&su)", &sourceStr, &flags); + + domain = virtDBusDomainGetVirDomain(connect, objectPath, error); + if (!domain) + return; + + source = virtDBusDomainInterfaceAddressesSourceTypeFromString(sourceStr); + if (source < 0) { + g_set_error(error, VIRT_DBUS_ERROR, VIRT_DBUS_ERROR_LIBVIRT, + "Can't get valid virDomainInterfaceAddressesSource from string '%s'.", + sourceStr); + return; + } + ifaces.count = virDomainInterfaceAddresses(domain, &(ifaces.ifaces), + source, flags); + if (ifaces.count < 0) + virtDBusUtilSetLastVirtError(error);
Missing return. Reviewed-by: Pavel Hrdina <phrdina@redhat.com>

Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Domain.xml | 6 ++++++ src/domain.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/data/org.libvirt.Domain.xml b/data/org.libvirt.Domain.xml index d81f14f..a3318a3 100644 --- a/data/org.libvirt.Domain.xml +++ b/data/org.libvirt.Domain.xml @@ -382,6 +382,12 @@ value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainMigrateStartPostCopy"/> <arg name="flags" type="u" direction="in"/> </method> + <method name="PinEmulator"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainPinEmulator"/> + <arg name="cpumap" type="ab" direction="in"/> + <arg name="flags" type="u" direction="in"/> + </method> <method name="Reboot"> <annotation name="org.gtk.GDBus.DocString" value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainReboot"/> diff --git a/src/domain.c b/src/domain.c index 83ad053..4c0906d 100644 --- a/src/domain.c +++ b/src/domain.c @@ -2066,6 +2066,45 @@ virtDBusDomainMigrateStartPostCopy(GVariant *inArgs, virtDBusUtilSetLastVirtError(error); } +static void +virtDBusDomainPinEmulator(GVariant *inArgs, + GUnixFDList *inFDs G_GNUC_UNUSED, + const gchar *objectPath, + gpointer userData, + GVariant **outArgs G_GNUC_UNUSED, + GUnixFDList **outFDs G_GNUC_UNUSED, + GError **error) + +{ + virtDBusConnect *connect = userData; + g_autoptr(virDomain) domain = NULL; + g_autoptr(GVariantIter) iter = NULL; + guint flags; + guint cpus; + guint cpumaplen; + g_autofree guchar *cpumap = NULL; + gboolean usable; + guint cnt = 0; + + g_variant_get(inArgs, "(abu)", &iter, &flags); + + domain = virtDBusDomainGetVirDomain(connect, objectPath, error); + if (!domain) + return; + + cpus = g_variant_iter_n_children(iter); + cpumaplen = VIR_CPU_MAPLEN(cpus); + cpumap = g_new0(guchar, cpumaplen); + while (g_variant_iter_loop(iter, "b", &usable)) { + if (usable) + VIR_USE_CPU(cpumap, cnt); + cnt++; + } + + if (virDomainPinEmulator(domain, cpumap, cpumaplen, flags) < 0) + virtDBusUtilSetLastVirtError(error); +} + static void virtDBusDomainReboot(GVariant *inArgs, GUnixFDList *inFDs G_GNUC_UNUSED, @@ -2797,6 +2836,7 @@ static virtDBusGDBusMethodTable virtDBusDomainMethodTable[] = { { "MigrateSetMaxDowntime", virtDBusDomainMigrateSetMaxDowntime }, { "MigrateSetMaxSpeed", virtDBusDomainMigrateSetMaxSpeed }, { "MigrateStartPostCopy", virtDBusDomainMigrateStartPostCopy }, + { "PinEmulator", virtDBusDomainPinEmulator }, { "Reboot", virtDBusDomainReboot }, { "Rename", virtDBusDomainRename }, { "Reset", virtDBusDomainReset }, -- 2.15.0

On Fri, Apr 27, 2018 at 11:00:52AM +0200, Katerina Koukiou wrote:
Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Domain.xml | 6 ++++++ src/domain.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+)
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>

Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Domain.xml | 7 +++++++ src/domain.c | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/data/org.libvirt.Domain.xml b/data/org.libvirt.Domain.xml index a3318a3..725aadc 100644 --- a/data/org.libvirt.Domain.xml +++ b/data/org.libvirt.Domain.xml @@ -388,6 +388,13 @@ <arg name="cpumap" type="ab" direction="in"/> <arg name="flags" type="u" direction="in"/> </method> + <method name="PinIOThread"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainPinIOThread"/> + <arg name="iothreadId" type="u" direction="in"/> + <arg name="cpumap" type="ab" direction="in"/> + <arg name="flags" type="u" direction="in"/> + </method> <method name="Reboot"> <annotation name="org.gtk.GDBus.DocString" value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainReboot"/> diff --git a/src/domain.c b/src/domain.c index 4c0906d..eff4e34 100644 --- a/src/domain.c +++ b/src/domain.c @@ -2105,6 +2105,46 @@ virtDBusDomainPinEmulator(GVariant *inArgs, virtDBusUtilSetLastVirtError(error); } +static void +virtDBusDomainPinIOThread(GVariant *inArgs, + GUnixFDList *inFDs G_GNUC_UNUSED, + const gchar *objectPath, + gpointer userData, + GVariant **outArgs G_GNUC_UNUSED, + GUnixFDList **outFDs G_GNUC_UNUSED, + GError **error) + +{ + virtDBusConnect *connect = userData; + g_autoptr(virDomain) domain = NULL; + guint iothreadId; + g_autoptr(GVariantIter) iter = NULL; + guint flags; + guint cpus; + guint cpumaplen; + g_autofree guchar *cpumap = NULL; + gboolean usable; + guint cnt = 0; + + g_variant_get(inArgs, "(uabu)", &iothreadId, &iter, &flags); + + domain = virtDBusDomainGetVirDomain(connect, objectPath, error); + if (!domain) + return; + + cpus = g_variant_iter_n_children(iter); + cpumaplen = VIR_CPU_MAPLEN(cpus); + cpumap = g_new0(guchar, cpumaplen); + while (g_variant_iter_loop(iter, "b", &usable)) { + if (usable) + VIR_USE_CPU(cpumap, cnt); + cnt++; + } + + if (virDomainPinIOThread(domain, iothreadId, cpumap, cpumaplen, flags) < 0) + virtDBusUtilSetLastVirtError(error); +} + static void virtDBusDomainReboot(GVariant *inArgs, GUnixFDList *inFDs G_GNUC_UNUSED, @@ -2837,6 +2877,7 @@ static virtDBusGDBusMethodTable virtDBusDomainMethodTable[] = { { "MigrateSetMaxSpeed", virtDBusDomainMigrateSetMaxSpeed }, { "MigrateStartPostCopy", virtDBusDomainMigrateStartPostCopy }, { "PinEmulator", virtDBusDomainPinEmulator }, + { "PinIOThread", virtDBusDomainPinIOThread }, { "Reboot", virtDBusDomainReboot }, { "Rename", virtDBusDomainRename }, { "Reset", virtDBusDomainReset }, -- 2.15.0

On Fri, Apr 27, 2018 at 11:00:53AM +0200, Katerina Koukiou wrote:
Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Domain.xml | 7 +++++++ src/domain.c | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+)
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>

Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Domain.xml | 7 +++++++ src/domain.c | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/data/org.libvirt.Domain.xml b/data/org.libvirt.Domain.xml index 725aadc..00b4988 100644 --- a/data/org.libvirt.Domain.xml +++ b/data/org.libvirt.Domain.xml @@ -395,6 +395,13 @@ <arg name="cpumap" type="ab" direction="in"/> <arg name="flags" type="u" direction="in"/> </method> + <method name="PinVcpu"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainPinVcpuFlags"/> + <arg name="vcpu" type="u" direction="in"/> + <arg name="cpumap" type="ab" direction="in"/> + <arg name="flags" type="u" direction="in"/> + </method> <method name="Reboot"> <annotation name="org.gtk.GDBus.DocString" value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainReboot"/> diff --git a/src/domain.c b/src/domain.c index eff4e34..5772e7e 100644 --- a/src/domain.c +++ b/src/domain.c @@ -2145,6 +2145,46 @@ virtDBusDomainPinIOThread(GVariant *inArgs, virtDBusUtilSetLastVirtError(error); } +static void +virtDBusDomainPinVcpu(GVariant *inArgs, + GUnixFDList *inFDs G_GNUC_UNUSED, + const gchar *objectPath, + gpointer userData, + GVariant **outArgs G_GNUC_UNUSED, + GUnixFDList **outFDs G_GNUC_UNUSED, + GError **error) + +{ + virtDBusConnect *connect = userData; + g_autoptr(virDomain) domain = NULL; + guint vcpu; + g_autoptr(GVariantIter) iter = NULL; + guint flags; + guint cpus; + guint cpumaplen; + g_autofree guchar *cpumap = NULL; + gboolean usable; + guint cnt = 0; + + g_variant_get(inArgs, "(uabu)", &vcpu, &iter, &flags); + + domain = virtDBusDomainGetVirDomain(connect, objectPath, error); + if (!domain) + return; + + cpus = g_variant_iter_n_children(iter); + cpumaplen = VIR_CPU_MAPLEN(cpus); + cpumap = g_new0(guchar, cpumaplen); + while (g_variant_iter_loop(iter, "b", &usable)) { + if (usable) + VIR_USE_CPU(cpumap, cnt); + cnt++; + } + + if (virDomainPinVcpuFlags(domain, vcpu, cpumap, cpumaplen, flags) < 0) + virtDBusUtilSetLastVirtError(error); +} + static void virtDBusDomainReboot(GVariant *inArgs, GUnixFDList *inFDs G_GNUC_UNUSED, @@ -2878,6 +2918,7 @@ static virtDBusGDBusMethodTable virtDBusDomainMethodTable[] = { { "MigrateStartPostCopy", virtDBusDomainMigrateStartPostCopy }, { "PinEmulator", virtDBusDomainPinEmulator }, { "PinIOThread", virtDBusDomainPinIOThread }, + { "PinVcpu", virtDBusDomainPinVcpu }, { "Reboot", virtDBusDomainReboot }, { "Rename", virtDBusDomainRename }, { "Reset", virtDBusDomainReset }, -- 2.15.0

On Fri, Apr 27, 2018 at 11:00:54AM +0200, Katerina Koukiou wrote:
Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Domain.xml | 7 +++++++ src/domain.c | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+)
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>

Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Domain.xml | 5 +++++ src/domain.c | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/data/org.libvirt.Domain.xml b/data/org.libvirt.Domain.xml index 00b4988..c6234e9 100644 --- a/data/org.libvirt.Domain.xml +++ b/data/org.libvirt.Domain.xml @@ -402,6 +402,11 @@ <arg name="cpumap" type="ab" direction="in"/> <arg name="flags" type="u" direction="in"/> </method> + <method name="PMWakeup"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainPMWakeup"/> + <arg name="flags" type="u" direction="in"/> + </method> <method name="Reboot"> <annotation name="org.gtk.GDBus.DocString" value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainReboot"/> diff --git a/src/domain.c b/src/domain.c index 5772e7e..fc0eca2 100644 --- a/src/domain.c +++ b/src/domain.c @@ -2185,6 +2185,29 @@ virtDBusDomainPinVcpu(GVariant *inArgs, virtDBusUtilSetLastVirtError(error); } +static void +virtDBusDomainPMWakeup(GVariant *inArgs, + GUnixFDList *inFDs G_GNUC_UNUSED, + const gchar *objectPath, + gpointer userData, + GVariant **outArgs G_GNUC_UNUSED, + GUnixFDList **outFDs G_GNUC_UNUSED, + GError **error) +{ + virtDBusConnect *connect = userData; + g_autoptr(virDomain) domain = NULL; + guint flags; + + g_variant_get(inArgs, "(u)", &flags); + + domain = virtDBusDomainGetVirDomain(connect, objectPath, error); + if (!domain) + return; + + if (virDomainPMWakeup(domain, flags) < 0) + virtDBusUtilSetLastVirtError(error); +} + static void virtDBusDomainReboot(GVariant *inArgs, GUnixFDList *inFDs G_GNUC_UNUSED, @@ -2919,6 +2942,7 @@ static virtDBusGDBusMethodTable virtDBusDomainMethodTable[] = { { "PinEmulator", virtDBusDomainPinEmulator }, { "PinIOThread", virtDBusDomainPinIOThread }, { "PinVcpu", virtDBusDomainPinVcpu }, + { "PMWakeup", virtDBusDomainPMWakeup }, { "Reboot", virtDBusDomainReboot }, { "Rename", virtDBusDomainRename }, { "Reset", virtDBusDomainReset }, -- 2.15.0

On Fri, Apr 27, 2018 at 11:00:55AM +0200, Katerina Koukiou wrote:
Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Domain.xml | 5 +++++ src/domain.c | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+)
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
participants (2)
-
Katerina Koukiou
-
Pavel Hrdina