---
 samples/amf/sa_aware/Makefile.am         |  13 +++-
 samples/amf/sa_aware/README              |   8 +++
 samples/amf/sa_aware/amf_sc_status_app.c | 115 +++++++++++++++++++++++++++++++
 3 files changed, 135 insertions(+), 1 deletion(-)
 create mode 100644 samples/amf/sa_aware/amf_sc_status_app.c

diff --git a/samples/amf/sa_aware/Makefile.am b/samples/amf/sa_aware/Makefile.am
index c34f94a..d8dbbd1 100644
--- a/samples/amf/sa_aware/Makefile.am
+++ b/samples/amf/sa_aware/Makefile.am
@@ -24,7 +24,7 @@ EXTRA_DIST = \
        AppConfig-nwayactive.xml \
        README
 
-bin_PROGRAMS = amf_demo
+bin_PROGRAMS = amf_demo amfscstatusdemo
 
 amf_demo_CPPFLAGS = \
        -DSA_EXTENDED_NAME_SOURCE \
@@ -36,10 +36,21 @@ amf_demo_SOURCES = \
 amf_demo_LDADD = \
        @SAF_AIS_AMF_LIBS@
 
+amfscstatusdemo_CPPFLAGS = \
+        -DSA_EXTENDED_NAME_SOURCE \
+        $(AM_CPPFLAGS)
+
+amfscstatusdemo_SOURCES = \
+        amf_sc_status_app.c
+
+amfscstatusdemo_LDADD = \
+        @SAF_AIS_AMF_LIBS@
+
 install-data-hook:
        mkdir -p /opt/amf_demo
        cp amf_demo /opt/amf_demo
        cp amf_demo_script /opt/amf_demo
+       cp amfscstatusdemo /opt/amf_demo
 
 uninstall-hook:
        rm -rf /opt/amf_demo
diff --git a/samples/amf/sa_aware/README b/samples/amf/sa_aware/README
index e8e4539..94a639a 100644
--- a/samples/amf/sa_aware/README
+++ b/samples/amf/sa_aware/README
@@ -34,3 +34,11 @@ Some steps to follow:
 6. Run below command for invocation of CSI Attribute Change Callback :
        immcfg -a saAmfCSIAttriValue+=CCCC 
safCsiAttr=AmfDemo1,safCsi=AmfDemo,safSi=AmfDemo,safApp=AmfDemo1
 
+Steps to run amfscstatusdemo:
+1)Run amfscstatusdemo from a terminal on a payload node.
+2)Bring down controllers.
+3)amfscstatusdemo will exit with message:
+  "Received SC Status Change Callback: SC status Absent"
+4)When SCs are down bring one controler up, amfscstatusdemo will
+  exit with message
+ "Received SC Status Change Callback: SC status Present"
diff --git a/samples/amf/sa_aware/amf_sc_status_app.c 
b/samples/amf/sa_aware/amf_sc_status_app.c
new file mode 100644
index 0000000..b2585b8
--- /dev/null
+++ b/samples/amf/sa_aware/amf_sc_status_app.c
@@ -0,0 +1,115 @@
+/*      -*- OpenSAF  -*-
+ *
+ * Copyright (C) 2017, Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed
+ * under the GNU Lesser General Public License Version 2.1, February 1999.
+ * The complete license can be accessed from the following location:
+ * http://opensource.org/licenses/lgpl-license.php
+ * See the Copying file included with the OpenSAF distribution for full
+ * licensing terms.
+ *
+ */
+
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <poll.h>
+#include <libgen.h>
+#include <signal.h>
+#include <string.h>
+#include <sys/inotify.h>
+
+#include <saAmf.h>
+#include <saAis.h>
+
+char path[256];
+FILE *fp;
+
+/*
+ * @brief   AMF will invoke this callback whenever SCs goes down and
+ *          joins back.
+ */
+static void my_sc_status_cbk(OsafAmfSCStatusT state) {
+  fp = fopen(path, "w");
+  if (fp == NULL) {
+    exit(EXIT_FAILURE);
+  }
+  if (state == OSAF_AMF_SC_PRESENT) {
+    fprintf(stdout, "\nReceived SC Status Change Callback: SC status 
Present\n\n");
+    fprintf(fp, "\nReceived SC Status Change Callback: SC status Present\n\n");
+  } else if(state == OSAF_AMF_SC_ABSENT) {
+    fprintf(stdout, "\nReceived SC Status Change Callback: SC status 
Absent\n\n");
+    fprintf(fp, "\nReceived SC Status Change Callback: SC status Absent\n\n");
+  }
+  fclose(fp);
+}
+
+int main(int argc, char **argv)
+{
+  SaAisErrorT rc;
+  struct pollfd fds[1];
+  int inotify_fd, inotify_fd2;
+  SaAmfCallbacksT_4 amf_cbk = {0};
+  SaVersionT ver = {'B', 0x04, 0x01};
+  SaAmfHandleT amf_hdl;
+
+  //Open log file. Log pid, a message and close it.
+  snprintf(path, sizeof(path), "%s/amfscstatusdemo.log", "/tmp");
+  fp = fopen(path, "w");
+  if (fp == NULL) {
+    fprintf(stderr, " log file open FAILED:%u", rc);
+    goto done;
+  }
+  fprintf(fp, "%d\n", getpid());
+  fclose(fp);
+
+  //Initialize with AMF.
+  rc = saAmfInitialize_4(&amf_hdl, &amf_cbk, &ver);
+  if (rc != SA_AIS_OK) {
+          fprintf(stderr, " saAmfInitialize FAILED %u", rc);
+          goto done;
+  }
+
+  //Register SC Status Change Callback with AMF.
+  osafAmfInstallSCStatusChangeCallback(my_sc_status_cbk);
+
+  if ((inotify_fd = inotify_init ()) < 0) {
+    fprintf (stderr, "inotify_init() failed with: '%s'\n", strerror (errno));
+    goto done;
+  }
+
+  if ((inotify_fd2 = inotify_add_watch (inotify_fd, path, IN_MODIFY)) < 0) {
+    fprintf (stderr, "inotify_add_watch failed with: '%s'\n", strerror 
(errno));
+    goto done;
+  }
+
+  fds[0].fd= inotify_fd;
+  fds[0].events = POLLIN;
+
+  while (1) {
+    int res = poll(fds, 1, -1);
+    if (res == -1) {
+      if (errno == EINTR) {
+        continue;
+      } else {
+        fprintf(stderr, "poll FAILED - %s", strerror(errno));
+        goto done;
+      }
+    }
+    if (fds[0].revents & POLLIN) {
+      rc = saAmfFinalize(amf_hdl);
+      if (rc != SA_AIS_OK) {
+       fprintf(stderr, " saAmfFinalize FAILED %u", rc);
+       exit(EXIT_FAILURE);
+      }
+      inotify_rm_watch(inotify_fd, inotify_fd2);
+      exit(EXIT_SUCCESS);
+    }
+  }
+done:
+  return EXIT_FAILURE;
+}
-- 
1.9.1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to