void saClmFinalize_01(void) { safassert(saClmInitialize(&clmHandle, &clmCallbacks_1, &clmVersion_1), SA_AIS_OK); rc = saClmFinalize(clmHandle); test_validate(rc, SA_AIS_OK); safassert(saClmInitialize_4(&clmHandle, &clmCallbacks_4, &clmVersion_4), SA_AIS_OK); rc = saClmFinalize(clmHandle); test_validate(rc, SA_AIS_OK); }
int main(int argc, char* argv[]) { /* Use syslog for logging (/var/log/messages) */ openlog(basename(argv[0]), LOG_PID, LOG_USER); //setenv("CLMSV_TRACE_PATHNAME","/tmp/clma.log",1); //only work if export before run this program SaAisErrorT rc; SaClmHandleT clmHandle; SaClmCallbacksT_4 clmCallbacks = { 0 }; SaVersionT version = { 'B', 4, 1 }; clmCallbacks.saClmClusterTrackCallback = clmClusterTrackCallback; rc = saClmInitialize_4(&clmHandle, &clmCallbacks, &version); if (rc != SA_AIS_OK) { syslog(LOG_ERR,"saClmInitialize_4 FAILED %u", rc); return 1; } SaSelectionObjectT clmFd; rc = saClmSelectionObjectGet(clmHandle, &clmFd); if (rc != SA_AIS_OK) { syslog(LOG_ERR,"saClmSelectionObjectGet FAILED %u", rc); return 1; } int clusterSize = 4; size_t sizeOfNotificationBuffer = (clusterSize * sizeof(SaClmClusterNotificationT_4)); SaClmClusterNotificationBufferT_4 clmlusterNotificationBuffer; clmlusterNotificationBuffer.viewNumber = 0; clmlusterNotificationBuffer.numberOfItems = clusterSize; clmlusterNotificationBuffer.notification = (SaClmClusterNotificationT_4*) calloc(1, sizeOfNotificationBuffer); if (clmlusterNotificationBuffer.notification == NULL) { syslog(LOG_ERR,"FAILED to allocate resources"); return 1; } SaUint8T trackFlags = SA_TRACK_CURRENT | SA_TRACK_CHANGES | SA_TRACK_START_STEP; //SA_TRACK_VALIDATE_STEP is supported with PLM only rc = saClmClusterTrack_4(clmHandle, trackFlags, &clmlusterNotificationBuffer); if (rc != SA_AIS_OK) { syslog(LOG_ERR,"saClmClusterTrack_4 FAILED %u", rc); if (rc == SA_AIS_ERR_NO_SPACE) { syslog(LOG_ERR,"rc = SA_AIS_ERR_NO_SPACE, numberOfItems = %d", clmlusterNotificationBuffer.numberOfItems); } free(clmlusterNotificationBuffer.notification); clmlusterNotificationBuffer.notification = NULL; return 1; } struct pollfd fds; fds.fd = clmFd; fds.events = POLLIN; while(1){ int res = poll(&fds, 1, -1); if (res == -1) { if (errno == EINTR) continue; else { syslog(LOG_ERR,"poll FAILED - %s", strerror(errno)); return 1; } } if (fds.revents & POLLIN) { syslog(LOG_INFO,"========= CLM event ==========="); rc = saClmDispatch(clmHandle, SA_DISPATCH_ONE); if (SA_AIS_OK != rc) { syslog(LOG_ERR,"saClmDispatch FAILED %u", rc); return 1; } } } }