Watchdog plugin
authorHenning Rogge <rogge@fgan.de>
Sat, 13 Dec 2008 09:51:35 +0000 (10:51 +0100)
committerHenning Rogge <rogge@fgan.de>
Sat, 13 Dec 2008 09:51:35 +0000 (10:51 +0100)
Makefile
lib/watchdog/Makefile [new file with mode: 0644]
lib/watchdog/README_WATCHDOG [new file with mode: 0644]
lib/watchdog/src/olsrd_plugin.c [new file with mode: 0644]
lib/watchdog/src/olsrd_plugin.h [new file with mode: 0644]
lib/watchdog/version-script.txt [new file with mode: 0644]

index 3827416..4b509e8 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -157,9 +157,9 @@ ifeq ($(OS),linux)
 SUBDIRS = $(notdir $(shell find lib -maxdepth 2 -name Makefile -not -path lib/Makefile -printf "%h\n"|sort))
 else
 ifeq ($(OS),win32)
-SUBDIRS := dot_draw httpinfo mini pgraph secure txtinfo
+SUBDIRS := dot_draw httpinfo mini pgraph secure txtinfo watchdog
 else
-SUBDIRS := bmf dot_draw dyn_gw dyn_gw_plain httpinfo mini nameservice pgraph secure txtinfo
+SUBDIRS := bmf dot_draw dyn_gw dyn_gw_plain httpinfo mini nameservice pgraph secure txtinfo watchdog
 endif
 endif
 
@@ -235,6 +235,11 @@ arprefresh:
                $(MAKECMD) -C lib/arprefresh
                $(MAKECMD) -C lib/arprefresh DESTDIR=$(DESTDIR) install
 
+watchdog:
+               $(MAKECMD) -C lib/watchdog clean
+               $(MAKECMD) -C lib/watchdog
+               $(MAKECMD) -C lib/watchdog DESTDIR=$(DESTDIR) install
+
 build_all:     all switch libs
 install_all:   install install_libs
 clean_all:     uberclean clean_libs
diff --git a/lib/watchdog/Makefile b/lib/watchdog/Makefile
new file mode 100644 (file)
index 0000000..af049e1
--- /dev/null
@@ -0,0 +1,56 @@
+# The olsr.org Optimized Link-State Routing daemon(olsrd)
+# Copyright (c) 2004, Andreas Tonnesen(andreto@olsr.org)
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without 
+# modification, are permitted provided that the following conditions 
+# are met:
+#
+# * Redistributions of source code must retain the above copyright 
+#   notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright 
+#   notice, this list of conditions and the following disclaimer in 
+#   the documentation and/or other materials provided with the 
+#   distribution.
+# * Neither the name of olsr.org, olsrd nor the names of its 
+#   contributors may be used to endorse or promote products derived 
+#   from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# Visit http://www.olsr.org for more information.
+#
+# If you find this software useful feel free to make a donation
+# to the project. For more information see the website or contact
+# the copyright holders.
+#
+
+OLSRD_PLUGIN = true
+PLUGIN_NAME =  olsrd_watchdog
+PLUGIN_VER =   0.1
+
+TOPDIR = ../..
+include $(TOPDIR)/Makefile.inc
+
+default_target: $(PLUGIN_FULLNAME)
+
+$(PLUGIN_FULLNAME): $(OBJS) version-script.txt
+               $(CC) $(LDFLAGS) -o $(PLUGIN_FULLNAME) $(OBJS) $(LIBS)
+
+install:       $(PLUGIN_FULLNAME)
+               $(STRIP) $(PLUGIN_FULLNAME)
+               $(INSTALL_LIB)
+
+clean:
+               rm -f $(OBJS) $(SRCS:%.c=%.d) $(PLUGIN_FULLNAME)
diff --git a/lib/watchdog/README_WATCHDOG b/lib/watchdog/README_WATCHDOG
new file mode 100644 (file)
index 0000000..f5eac1d
--- /dev/null
@@ -0,0 +1,34 @@
+---------------------------------------------------------------------
+Watchdog PLUGIN FOR OLSRD
+by Henning Rogge <hrogge@googlemail.com>
+---------------------------------------------------------------------
+
+This plugin is used for detecting a total freeze of the olsrd by an external script.
+Once per timeinterval (configurable) it writes the current time into
+a file.
+
+---------------------------------------------------------------------
+PLUGIN PARAMETERS (PlParam)
+---------------------------------------------------------------------
+
+PlParam "file" "/tmp/olsrd.watchdog"
+       Name of the "still alive" file written by the watchdog
+PlParam "interval" "5"
+       Overwrite the file every X seconds
+
+
+---------------------------------------------------------------------
+SAMPLE CONFIG
+---------------------------------------------------------------------
+
+add in /etc/olsrd.conf:
+
+LoadPlugin "olsrd_watchdog.so.0.1"
+{
+  PlParam "file" "/tmp/olsrd.watchdog"
+  PlParam "interval" "5"
+}
+
+
+---------------------------------------------------------------------
+EOF / 26.05.2005
diff --git a/lib/watchdog/src/olsrd_plugin.c b/lib/watchdog/src/olsrd_plugin.c
new file mode 100644 (file)
index 0000000..ac218d5
--- /dev/null
@@ -0,0 +1,136 @@
+
+/*
+ * Copyright (c) 2005, Bruno Randolf <bruno.randolf@4g-systems.biz>
+ * Copyright (c) 2004, Andreas Tonnesen(andreto-at-olsr.org)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * * Neither the name of the UniK olsr daemon nor the names of its contributors
+ *   may be used to endorse or promote products derived from this software
+ *   without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+
+ /*
+  * Example plugin for olsrd.org OLSR daemon
+  * Only the bare minimum
+  */
+
+
+#include "olsrd_plugin.h"
+#include "olsr.h"
+#include "defs.h"
+#include "scheduler.h"
+#include "olsr_cookie.h"
+
+#include "../../../src/olsrd_plugin.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+#define PLUGIN_INTERFACE_VERSION 5
+
+static struct olsr_cookie_info *watchdog_timer_cookie;
+
+static char watchdog_filename[FILENAME_MAX + 1] = "/tmp/olsr.watchdog";
+static int watchdog_interval = 5;
+
+/**
+ * Plugin interface version
+ * Used by main olsrd to check plugin interface version
+ */
+int
+olsrd_plugin_interface_version(void)
+{
+  return PLUGIN_INTERFACE_VERSION;
+}
+
+
+static int
+set_watchdog_file(const char *value, void *data __attribute__ ((unused)), set_plugin_parameter_addon addon __attribute__ ((unused)))
+{
+  strncpy(watchdog_filename, value, FILENAME_MAX);
+  return 0;
+}
+
+static int
+set_watchdog_interval(const char *value, void *data __attribute__ ((unused)), set_plugin_parameter_addon addon
+                      __attribute__ ((unused)))
+{
+  watchdog_interval = atoi(value);
+  return 0;
+}
+
+/**
+ * Register parameters from config file
+ * Called for all plugin parameters
+ */
+static const struct olsrd_plugin_parameters plugin_parameters[] = {
+  {.name = "file",.set_plugin_parameter = &set_watchdog_file,.data = NULL},
+  {.name = "interval",.set_plugin_parameter = &set_watchdog_interval,.data = NULL},
+};
+
+void
+olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size)
+{
+  *params = plugin_parameters;
+  *size = ARRAYSIZE(plugin_parameters);
+}
+
+static void
+olsr_watchdog_write_alivefile(void *foo __attribute__ ((unused)))
+{
+  FILE *file = fopen(watchdog_filename, "w");
+  if (file == NULL) {
+    OLSR_PRINTF(3, "Error, cannot write watchdog alivefile");
+  } else {
+    fprintf(file, "%ld\n", time(NULL));
+    fflush(file);
+    fclose(file);
+  }
+}
+
+/**
+ * Initialize plugin
+ * Called after all parameters are passed
+ */
+int
+olsrd_plugin_init(void)
+{
+  /* create the cookie */
+  watchdog_timer_cookie = olsr_alloc_cookie("Watchdog: write alive-file", OLSR_COOKIE_TYPE_TIMER);
+
+  /* Register the GW check */
+  olsr_start_timer(watchdog_interval * MSEC_PER_SEC, 0, OLSR_TIMER_PERIODIC,
+                   &olsr_watchdog_write_alivefile, NULL, watchdog_timer_cookie->ci_id);
+
+  return 1;
+}
+
+/*
+ * Local Variables:
+ * c-basic-offset: 2
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/lib/watchdog/src/olsrd_plugin.h b/lib/watchdog/src/olsrd_plugin.h
new file mode 100644 (file)
index 0000000..ca7d739
--- /dev/null
@@ -0,0 +1,60 @@
+
+/*
+ * Copyright (c) 2005, Bruno Randolf <bruno.randolf@4g-systems.biz>
+ * Copyright (c) 2004, Andreas Tonnesen(andreto-at-olsr.org)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * * Neither the name of the UniK olsr daemon nor the names of its contributors
+ *   may be used to endorse or promote products derived from this software
+ *   without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/*
+ * Dynamic linked library for the olsr.org olsr daemon
+ */
+
+#ifndef _OLSRD_PLUGIN_MINI
+#define _OLSRD_PLUGIN_MINI
+
+
+/****************************************************************************
+ *                Functions that the plugin MUST provide                    *
+ ****************************************************************************/
+
+
+/* Initialization function */
+int
+  olsrd_plugin_init(void);
+
+int
+  olsrd_plugin_interface_version(void);
+
+#endif
+
+/*
+ * Local Variables:
+ * c-basic-offset: 2
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/lib/watchdog/version-script.txt b/lib/watchdog/version-script.txt
new file mode 100644 (file)
index 0000000..a145659
--- /dev/null
@@ -0,0 +1,10 @@
+VERS_1.0
+{
+  global:
+    olsrd_plugin_interface_version;
+    olsrd_plugin_init;
+    olsrd_get_plugin_parameters;
+
+  local:
+    *;
+};