Signed-off-by: Daniel P. Berrange <[email protected]>
---
 api_test.go             |  1 +
 domain_compat.h         |  3 +++
 domain_events.go        | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 domain_events_cfuncs.go | 10 ++++++++++
 domain_events_cfuncs.h  |  5 +++++
 5 files changed, 65 insertions(+)

diff --git a/api_test.go b/api_test.go
index 93adf7f..fafd35e 100644
--- a/api_test.go
+++ b/api_test.go
@@ -107,6 +107,7 @@ var (
                "virConnectDomainEventTrayChangeCallback",
                "virConnectDomainEventTunableCallback",
                "virConnectDomainEventWatchdogCallback",
+               "virConnectDomainEventMetadataChangeCallback",
 
                /* Network event callback typedefs */
                "virConnectNetworkEventGenericCallback",
diff --git a/domain_compat.h b/domain_compat.h
index cb806b9..14072d0 100644
--- a/domain_compat.h
+++ b/domain_compat.h
@@ -45,6 +45,9 @@
 #define VIR_PERF_PARAM_REF_CPU_CYCLES "ref_cpu_cycles"
 #endif
 
+#ifndef VIR_DOMAIN_EVENT_ID_METADATA_CHANGE
+#define VIR_DOMAIN_EVENT_ID_METADATA_CHANGE 23
+#endif
 
 /* 1.2.2 */
 
diff --git a/domain_events.go b/domain_events.go
index c65ce3b..8b34960 100644
--- a/domain_events.go
+++ b/domain_events.go
@@ -203,6 +203,13 @@ type DomainEventDeviceRemovalFailed struct {
 
 type DomainEventDeviceRemovalFailedCallback func(c *Connect, d *Domain, event 
*DomainEventDeviceRemovalFailed)
 
+type DomainEventMetadataChange struct {
+       Type  int
+       NSURI string
+}
+
+type DomainEventMetadataChangeCallback func(c *Connect, d *Domain, event 
*DomainEventMetadataChange)
+
 //export domainEventLifecycleCallback
 func domainEventLifecycleCallback(c C.virConnectPtr, d C.virDomainPtr,
        event int, detail int,
@@ -540,6 +547,26 @@ func domainEventDeviceRemovedCallback(c C.virConnectPtr, d 
C.virDomainPtr,
 
 }
 
+//export domainEventMetadataChangeCallback
+func domainEventMetadataChangeCallback(c C.virConnectPtr, d C.virDomainPtr,
+       mtype int, nsuri *C.char, goCallbackId int) {
+
+       domain := &Domain{ptr: d}
+       connection := &Connect{ptr: c}
+
+       eventDetails := &DomainEventMetadataChange{
+               Type:  (int)(mtype),
+               NSURI: C.GoString(nsuri),
+       }
+       callbackFunc := getCallbackId(goCallbackId)
+       callback, ok := callbackFunc.(DomainEventMetadataChangeCallback)
+       if !ok {
+               panic("Inappropriate callback type called")
+       }
+       callback(connection, domain, eventDetails)
+
+}
+
 func getDomainTuneSchedulerParametersFieldInfo(params 
*DomainSchedulerParameters) map[string]typedParamsFieldInfo {
        return map[string]typedParamsFieldInfo{
                C.VIR_DOMAIN_TUNABLE_CPU_CPU_SHARES: typedParamsFieldInfo{
@@ -1341,6 +1368,25 @@ func (c *Connect) 
DomainEventDeviceRemovalFailedRegister(dom *Domain, callback D
        return int(ret), nil
 }
 
+func (c *Connect) DomainEventMetadataChangeRegister(dom *Domain, callback 
DomainEventMetadataChangeCallback) (int, error) {
+       goCallBackId := registerCallbackId(callback)
+
+       callbackPtr := unsafe.Pointer(C.domainEventMetadataChangeCallback_cgo)
+       var cdom C.virDomainPtr
+       if dom != nil {
+               cdom = dom.ptr
+       }
+       ret := C.virConnectDomainEventRegisterAny_cgo(c.ptr, cdom,
+               C.VIR_DOMAIN_EVENT_ID_METADATA_CHANGE,
+               C.virConnectDomainEventGenericCallback(callbackPtr),
+               C.long(goCallBackId))
+       if ret == -1 {
+               freeCallbackId(goCallBackId)
+               return 0, GetLastError()
+       }
+       return int(ret), nil
+}
+
 func (c *Connect) DomainEventDeregister(callbackId int) error {
        // Deregister the callback
        if i := int(C.virConnectDomainEventDeregisterAny(c.ptr, 
C.int(callbackId))); i != 0 {
diff --git a/domain_events_cfuncs.go b/domain_events_cfuncs.go
index 8bdfb98..c23fac6 100644
--- a/domain_events_cfuncs.go
+++ b/domain_events_cfuncs.go
@@ -205,6 +205,16 @@ void 
domainEventDeviceRemovalFailedCallback_cgo(virConnectPtr conn,
     domainEventDeviceRemovalFailedCallback(conn, dom, devAlias, 
(int)(intptr_t)opaque);
 }
 
+extern void domainEventMetadataChangeCallback(virConnectPtr, virDomainPtr, 
int, const char *, int);
+void domainEventMetadataChangeCallback_cgo(virConnectPtr conn,
+                                          virDomainPtr dom,
+                                          int type,
+                                          const char *nsuri,
+                                          void *opaque)
+{
+    domainEventMetadataChangeCallback(conn, dom, type, nsuri, 
(int)(intptr_t)opaque);
+}
+
 int virConnectDomainEventRegisterAny_cgo(virConnectPtr c,  virDomainPtr d,
                                          int eventID, 
virConnectDomainEventGenericCallback cb,
                                          long goCallbackId) {
diff --git a/domain_events_cfuncs.h b/domain_events_cfuncs.h
index ba427aa..039da8e 100644
--- a/domain_events_cfuncs.h
+++ b/domain_events_cfuncs.h
@@ -103,6 +103,11 @@ void 
domainEventDeviceRemovalFailedCallback_cgo(virConnectPtr conn,
                                                virDomainPtr dom,
                                                const char *devAlias,
                                                void *opaque);
+void domainEventMetadataChangeCallback_cgo(virConnectPtr conn,
+                                          virDomainPtr dom,
+                                          int type,
+                                          const char *nsuri,
+                                          void *opaque);
 
 int virConnectDomainEventRegisterAny_cgo(virConnectPtr c,  virDomainPtr d,
                                          int eventID, 
virConnectDomainEventGenericCallback cb,
-- 
2.9.3

--
libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to