Commit f8c6517c authored by Daniel P. Berrangé's avatar Daniel P. Berrangé 💬
Browse files

Add new channel lifecycle and vCPU removed event callbacks

parent 9960aae4
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -118,6 +118,7 @@ var (
		"virConnectDomainEventMemoryDeviceSizeChangeCallback",
		"virConnectDomainEventNICMACChangeCallback",
		"virConnectDomainEventChannelLifecycleCallback",
		"virConnectDomainEventVcpuRemovedCallback",
		"virConnectDomainQemuMonitorEventCallback",

		/* Network event callback typedefs */
+15 −0
Original line number Diff line number Diff line
@@ -242,6 +242,21 @@ const (
	DOMAIN_EVENT_GRAPHICS_ADDRESS_UNIX = DomainEventGraphicsAddressType(C.VIR_DOMAIN_EVENT_GRAPHICS_ADDRESS_UNIX)
)

type DomainEventChannelLifecycleState int

const (
	DOMAIN_EVENT_CHANNEL_LIFECYCLE_STATE_CONNECTED    = DomainEventChannelLifecycleReason(C.VIR_CONNECT_DOMAIN_EVENT_CHANNEL_LIFECYCLE_STATE_CONNECTED)
	DOMAIN_EVENT_CHANNEL_LIFECYCLE_STATE_DISCONNECTED = DomainEventChannelLifecycleReason(C.VIR_CONNECT_DOMAIN_EVENT_CHANNEL_LIFECYCLE_STATE_DISCONNECTED)
)

type DomainEventChannelLifecycleReason int

const (
	DOMAIN_EVENT_CHANNEL_LIFECYCLE_REASON_CHANNEL        = DomainEventChannelLifecycleState(C.VIR_CONNECT_DOMAIN_EVENT_CHANNEL_LIFECYCLE_REASON_CHANNEL)
	DOMAIN_EVENT_CHANNEL_LIFECYCLE_REASON_DOMAIN_STARTED = DomainEventChannelLifecycleState(C.VIR_CONNECT_DOMAIN_EVENT_CHANNEL_LIFECYCLE_REASON_DOMAIN_STARTED)
	DOMAIN_EVENT_CHANNEL_LIFECYCLE_REASON_UNKNOWN        = DomainEventChannelLifecycleReason(C.VIR_CONNECT_DOMAIN_EVENT_CHANNEL_LIFECYCLE_REASON_UNKNOWN)
)

type DomainBlockJobType int

const (
+88 −0
Original line number Diff line number Diff line
@@ -243,6 +243,20 @@ type DomainEventNICMACChange struct {

type DomainEventNICMACChangeCallback func(c *Connect, d *Domain, event *DomainEventNICMACChange)

type DomainEventChannelLifecycle struct {
	ChannelName string
	State       DomainEventChannelLifecycleState
	Reason      DomainEventChannelLifecycleReason
}

type DomainEventChannelLifecycleCallback func(c *Connect, d *Domain, event *DomainEventChannelLifecycle)

type DomainEventVcpuRemoved struct {
	ID uint
}

type DomainEventVcpuRemovedCallback func(c *Connect, d *Domain, event *DomainEventVcpuRemoved)

//export virGoDomainEventLifecycleCallback
func virGoDomainEventLifecycleCallback(c C.virConnectPtr, d C.virDomainPtr,
	event int, detail int,
@@ -1038,6 +1052,40 @@ func virGoDomainEventNICMACChangeCallback(c C.virConnectPtr, d C.virDomainPtr, a
	callback(connection, domain, eventDetails)
}

//export virGoDomainEventChannelLifecycleCallback
func virGoDomainEventChannelLifecycleCallback(c C.virConnectPtr, d C.virDomainPtr, channelName *C.char, state int, reason int, goCallbackId int) {
	domain := &Domain{ptr: d}
	connection := &Connect{ptr: c}

	eventDetails := &DomainEventChannelLifecycle{
		ChannelName: C.GoString(channelName),
		State:       DomainEventChannelLifecycleState(state),
		Reason:      DomainEventChannelLifecycleReason(reason),
	}
	callbackFunc := getCallbackId(goCallbackId)
	callback, ok := callbackFunc.(DomainEventChannelLifecycleCallback)
	if !ok {
		panic("Inappropriate callback type called")
	}
	callback(connection, domain, eventDetails)
}

//export virGoDomainEventVcpuRemovedCallback
func virGoDomainEventVcpuRemovedCallback(c C.virConnectPtr, d C.virDomainPtr, vcpuid uint, goCallbackId int) {
	domain := &Domain{ptr: d}
	connection := &Connect{ptr: c}

	eventDetails := &DomainEventVcpuRemoved{
		ID: vcpuid,
	}
	callbackFunc := getCallbackId(goCallbackId)
	callback, ok := callbackFunc.(DomainEventVcpuRemovedCallback)
	if !ok {
		panic("Inappropriate callback type called")
	}
	callback(connection, domain, eventDetails)
}

func (c *Connect) DomainEventLifecycleRegister(dom *Domain, callback DomainEventLifecycleCallback) (int, error) {
	goCallBackId := registerCallbackId(callback)

@@ -1598,6 +1646,46 @@ func (c *Connect) DomainEventNICMACChangeRegister(dom *Domain, callback DomainEv
	return int(ret), nil
}

func (c *Connect) DomainEventChannelLifecycleRegister(dom *Domain, callback DomainEventChannelLifecycleCallback) (int, error) {
	goCallBackId := registerCallbackId(callback)

	callbackPtr := unsafe.Pointer(C.virGoDomainEventChannelLifecycleCallbackHelper)
	var cdom C.virDomainPtr
	if dom != nil {
		cdom = dom.ptr
	}
	var err C.virError
	ret := C.virConnectDomainEventRegisterAnyHelper(c.ptr, cdom,
		C.VIR_DOMAIN_EVENT_ID_CHANNEL_LIFECYCLE,
		C.virConnectDomainEventGenericCallback(callbackPtr),
		C.long(goCallBackId), &err)
	if ret == -1 {
		virGoFreeCallbackId(goCallBackId)
		return 0, makeError(&err)
	}
	return int(ret), nil
}

func (c *Connect) DomainEventVcpuRemovedRegister(dom *Domain, callback DomainEventVcpuRemovedCallback) (int, error) {
	goCallBackId := registerCallbackId(callback)

	callbackPtr := unsafe.Pointer(C.virGoDomainEventVcpuRemovedCallbackHelper)
	var cdom C.virDomainPtr
	if dom != nil {
		cdom = dom.ptr
	}
	var err C.virError
	ret := C.virConnectDomainEventRegisterAnyHelper(c.ptr, cdom,
		C.VIR_DOMAIN_EVENT_ID_VCPU_REMOVED,
		C.virConnectDomainEventGenericCallback(callbackPtr),
		C.long(goCallBackId), &err)
	if ret == -1 {
		virGoFreeCallbackId(goCallBackId)
		return 0, makeError(&err)
	}
	return int(ret), nil
}

func (c *Connect) DomainEventDeregister(callbackId int) error {
	// Deregister the callback
	var err C.virError
+20 −0
Original line number Diff line number Diff line
@@ -284,6 +284,26 @@ void virGoDomainEventNICMACChangeCallbackHelper(virConnectPtr conn,
    virGoDomainEventNICMACChangeCallback(conn, dom, alias, oldMAC, newMAC, (int)(intptr_t)opaque);
}

extern void virGoDomainEventChannelLifecycleCallback(virConnectPtr, virDomainPtr, const char *, int, int, int);
void virGoDomainEventChannelLifecycleCallbackHelper(virConnectPtr conn,
                                                    virDomainPtr dom,
						    const char *channelName,
						    int state,
						    int reason,
						    void *opaque)
{
    virGoDomainEventChannelLifecycleCallback(conn, dom, channelName, state, reason, (int)(intptr_t)opaque);
}

extern void virGoDomainEventVcpuRemovedCallback(virConnectPtr, virDomainPtr, int, int);
void virGoDomainEventVcpuRemovedCallbackHelper(virConnectPtr conn,
                                               virDomainPtr dom,
					       int vcpuid,
					       void *opaque)
{
    virGoDomainEventVcpuRemovedCallback(conn, dom, vcpuid, (int)(intptr_t)opaque);
}

int
virConnectDomainEventRegisterAnyHelper(virConnectPtr conn,
                                       virDomainPtr dom,
+14 −0
Original line number Diff line number Diff line
@@ -237,6 +237,20 @@ virGoDomainEventNICMACChangeCallbackHelper(virConnectPtr conn,
                                           const char *newMAC,
                                           void *opaque);

void
virGoDomainEventChannelLifecycleCallbackHelper(virConnectPtr conn,
					       virDomainPtr dom,
					       const char *channelName,
					       int state,
					       int reason,
					       void *opaque);

void
virGoDomainEventVcpuRemovedCallbackHelper(virConnectPtr conn,
					  virDomainPtr dom,
					  int vcpuid,
					  void *opaque);

int
virConnectDomainEventRegisterAnyHelper(virConnectPtr conn,
                                       virDomainPtr dom,