3a02d1a9a3df14e80e1db55283dc988768041fec
[olsrd.git] / lib / watchdog / src / olsrd_plugin.c
1
2 /*
3  * The olsr.org Optimized Link-State Routing daemon(olsrd)
4  * Copyright (c) 2004-2009, the olsr.org team - see HISTORY file
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  *   notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above copyright
14  *   notice, this list of conditions and the following disclaimer in
15  *   the documentation and/or other materials provided with the
16  *   distribution.
17  * * Neither the name of olsr.org, olsrd nor the names of its
18  *   contributors may be used to endorse or promote products derived
19  *   from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *
34  * Visit http://www.olsr.org for more information.
35  *
36  * If you find this software useful feel free to make a donation
37  * to the project. For more information see the website or contact
38  * the copyright holders.
39  *
40  */
41
42
43  /*
44   * Example plugin for olsrd.org OLSR daemon
45   * Only the bare minimum
46   */
47
48
49 #include "olsrd_plugin.h"
50 #include "olsr.h"
51 #include "defs.h"
52 #include "scheduler.h"
53 #include "olsr_memcookie.h"
54 #include "olsr_logging.h"
55
56 #include "plugin.h"
57
58 #include <stdio.h>
59 #include <string.h>
60 #include <stdlib.h>
61 #include <time.h>
62 #define PLUGIN_INTERFACE_VERSION 5
63
64 static struct olsr_timer_info *watchdog_timer_info;
65
66 static char watchdog_filename[FILENAME_MAX + 1] = "/tmp/olsr.watchdog";
67 static int watchdog_interval = 5;
68
69 /**
70  * Plugin interface version
71  * Used by main olsrd to check plugin interface version
72  */
73 int
74 olsrd_plugin_interface_version(void)
75 {
76   return PLUGIN_INTERFACE_VERSION;
77 }
78
79
80 static int
81 set_watchdog_file(const char *value, void *data __attribute__ ((unused)), set_plugin_parameter_addon addon __attribute__ ((unused)))
82 {
83   strncpy(watchdog_filename, value, FILENAME_MAX);
84   return 0;
85 }
86
87 static int
88 set_watchdog_interval(const char *value, void *data __attribute__ ((unused)), set_plugin_parameter_addon addon
89                       __attribute__ ((unused)))
90 {
91   watchdog_interval = atoi(value);
92   return 0;
93 }
94
95 /**
96  * Register parameters from config file
97  * Called for all plugin parameters
98  */
99 static const struct olsrd_plugin_parameters plugin_parameters[] = {
100   {.name = "file",.set_plugin_parameter = &set_watchdog_file,.data = NULL},
101   {.name = "interval",.set_plugin_parameter = &set_watchdog_interval,.data = NULL},
102 };
103
104 void
105 olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size)
106 {
107   *params = plugin_parameters;
108   *size = ARRAYSIZE(plugin_parameters);
109 }
110
111 static void
112 olsr_watchdog_write_alivefile(void *foo __attribute__ ((unused)))
113 {
114   FILE *file = fopen(watchdog_filename, "w");
115   if (file == NULL) {
116     OLSR_WARN(LOG_PLUGINS, "Error, cannot write watchdog alivefile");
117   } else {
118     fprintf(file, "%ld\n", (long)time(NULL));
119     fflush(file);
120     fclose(file);
121   }
122 }
123
124 /**
125  * Initialize plugin
126  * Called after all parameters are passed
127  */
128 int
129 olsrd_plugin_init(void)
130 {
131   /* create the cookie */
132   watchdog_timer_info = olsr_alloc_timerinfo("Watchdog: write alive-file",
133       &olsr_watchdog_write_alivefile, true);
134
135   /* Register the watchdog check */
136   olsr_start_timer(watchdog_interval * MSEC_PER_SEC, 0, NULL, watchdog_timer_info);
137
138   return 1;
139 }
140
141 /*
142  * Local Variables:
143  * c-basic-offset: 2
144  * indent-tabs-mode: nil
145  * End:
146  */