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