---
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