Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
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