Skip to content

Commit

Permalink
event-test: support node device lifecycle event APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
JGulic authored and crobinso committed Aug 2, 2016
1 parent 546fa3e commit f803f5f
Showing 1 changed file with 68 additions and 0 deletions.
68 changes: 68 additions & 0 deletions examples/object-events/event-test.c
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,20 @@ storagePoolEventToString(int event)
return "unknown";
}

static const char *
nodeDeviceEventToString(int event)
{
switch ((virNodeDeviceEventLifecycleType) event) {
case VIR_NODE_DEVICE_EVENT_CREATED:
return "Created";
case VIR_NODE_DEVICE_EVENT_DELETED:
return "Deleted";
case VIR_NODE_DEVICE_EVENT_LAST:
break;
}
return "unknown";
}


static int
myDomainEventCallback1(virConnectPtr conn ATTRIBUTE_UNUSED,
Expand Down Expand Up @@ -688,6 +702,21 @@ myStoragePoolEventRefreshCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
}


static int
myNodeDeviceEventCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
virNodeDevicePtr dev,
int event,
int detail,
void *opaque ATTRIBUTE_UNUSED)
{
printf("%s EVENT: Node device %s %s %d\n", __func__,
virNodeDeviceGetName(dev),
nodeDeviceEventToString(event),
detail);
return 0;
}


static void
eventTypedParamsPrint(virTypedParameterPtr params,
int nparams)
Expand Down Expand Up @@ -948,9 +977,24 @@ struct storagePoolEventData storagePoolEvents[] = {
STORAGE_POOL_EVENT(VIR_STORAGE_POOL_EVENT_ID_REFRESH, myStoragePoolEventRefreshCallback),
};

struct nodeDeviceEventData {
int event;
int id;
virConnectNodeDeviceEventGenericCallback cb;
const char *name;
};

#define NODE_DEVICE_EVENT(event, callback) \
{event, -1, VIR_NODE_DEVICE_EVENT_CALLBACK(callback), #event}

struct nodeDeviceEventData nodeDeviceEvents[] = {
NODE_DEVICE_EVENT(VIR_NODE_DEVICE_EVENT_ID_LIFECYCLE, myNodeDeviceEventCallback),
};

/* make sure that the events are kept in sync */
verify(ARRAY_CARDINALITY(domainEvents) == VIR_DOMAIN_EVENT_ID_LAST);
verify(ARRAY_CARDINALITY(storagePoolEvents) == VIR_STORAGE_POOL_EVENT_ID_LAST);
verify(ARRAY_CARDINALITY(nodeDeviceEvents) == VIR_NODE_DEVICE_EVENT_ID_LAST);

int
main(int argc, char **argv)
Expand Down Expand Up @@ -1042,6 +1086,22 @@ main(int argc, char **argv)
}
}

/* register common node device callbacks */
for (i = 0; i < ARRAY_CARDINALITY(nodeDeviceEvents); i++) {
struct nodeDeviceEventData *event = nodeDeviceEvents + i;

event->id = virConnectNodeDeviceEventRegisterAny(dconn, NULL,
event->event,
event->cb,
strdup(event->name),
myFreeFunc);

if (event->id < 0) {
fprintf(stderr, "Failed to register event '%s'\n", event->name);
goto cleanup;
}
}

if ((callback1ret == -1) ||
(callback16ret == -1))
goto cleanup;
Expand Down Expand Up @@ -1077,6 +1137,14 @@ main(int argc, char **argv)
virConnectStoragePoolEventDeregisterAny(dconn, storagePoolEvents[i].id);
}


printf("Deregistering node device event callbacks\n");
for (i = 0; i < ARRAY_CARDINALITY(nodeDeviceEvents); i++) {
if (nodeDeviceEvents[i].id > 0)
virConnectNodeDeviceEventDeregisterAny(dconn, nodeDeviceEvents[i].id);
}


virConnectUnregisterCloseCallback(dconn, connectClose);
ret = EXIT_SUCCESS;

Expand Down

0 comments on commit f803f5f

Please sign in to comment.