Remove unused functions
[olsrd.git] / lib / quagga / src / olsrd_plugin.c
1
2 /***************************************************************************
3  projekt              : olsrd-quagga
4  file                 : olsrd_plugin.c
5  usage                : olsrd-plugin-handler-stuff
6  copyright            : (C) 2006 by Immo 'FaUl' Wehrenberg
7  e-mail               : immo@chaostreff-dortmund.de
8  ***************************************************************************/
9
10 /***************************************************************************
11  *                                                                         *
12  *   This program is free software; you can redistribute it and/or modify  *
13  *   it under the terms of the GNU General Public License version 2 as     *
14  *   published by the Free Software Foundation.                            *
15  *                                                                         *
16  ***************************************************************************/
17
18 #include <stdio.h>
19 #include <string.h>
20
21 #include "olsrd_plugin.h"
22 #include "plugin_util.h"
23 #include "olsr.h"
24 #include "scheduler.h"
25 #include "defs.h"
26 #include "quagga.h"
27 #include "kernel_routes.h"
28 #include "net_olsr.h"
29
30 #define PLUGIN_NAME    "OLSRD quagga plugin"
31 #define PLUGIN_VERSION "0.2.2"
32 #define PLUGIN_AUTHOR  "Immo 'FaUl' Wehrenberg"
33 #define MOD_DESC PLUGIN_NAME " " PLUGIN_VERSION " by " PLUGIN_AUTHOR
34 #define PLUGIN_INTERFACE_VERSION 5
35
36 static void __attribute__ ((constructor)) my_init(void);
37 static void __attribute__ ((destructor)) my_fini(void);
38
39 static set_plugin_parameter set_redistribute;
40 static set_plugin_parameter set_exportroutes;
41 static set_plugin_parameter set_distance;
42 static set_plugin_parameter set_localpref;
43
44
45 int
46 olsrd_plugin_interface_version(void)
47 {
48   return PLUGIN_INTERFACE_VERSION;
49 }
50
51 static const struct olsrd_plugin_parameters plugin_parameters[] = {
52   {.name = "redistribute",.set_plugin_parameter = &set_redistribute,},
53   {.name = "ExportRoutes",.set_plugin_parameter = &set_exportroutes,},
54   {.name = "Distance",.set_plugin_parameter = &set_distance,},
55   {.name = "LocalPref",.set_plugin_parameter = &set_localpref,},
56 };
57
58 void
59 olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size)
60 {
61   *params = plugin_parameters;
62   *size = ARRAYSIZE(plugin_parameters);
63 }
64
65 static int
66 set_redistribute(const char *value, void *data __attribute__ ((unused)), set_plugin_parameter_addon addon __attribute__ ((unused)))
67 {
68   const char *zebra_route_types[] = { "system", "kernel", "connect",
69     "static", "rip", "ripng", "ospf",
70     "ospf6", "isis", "bgp", "hsls"
71   };
72   unsigned int i;
73
74   for (i = 0; i < ARRAYSIZE(zebra_route_types); i++) {
75     if (!strcmp(value, zebra_route_types[i])) {
76       zebra_redistribute(i);
77       return 0;
78     }
79   }
80   return 1;
81 }
82
83 static int
84 set_exportroutes(const char *value, void *data __attribute__ ((unused)), set_plugin_parameter_addon addon __attribute__ ((unused)))
85 {
86   if (!strcmp(value, "only")) {
87     olsr_addroute_function = zebra_add_olsr_v4_route;
88     olsr_delroute_function = zebra_del_olsr_v4_route;
89     zebra_export_routes(1);
90   } else if (!strcmp(value, "additional")) {
91     olsr_addroute_function = zebra_add_olsr_v4_route;
92     olsr_delroute_function = zebra_del_olsr_v4_route;
93     zebra_export_routes(1);
94   } else
95     zebra_export_routes(0);
96   return 0;
97 }
98
99 static int
100 set_distance(const char *value, void *data __attribute__ ((unused)), set_plugin_parameter_addon addon __attribute__ ((unused)))
101 {
102   int distance;
103
104   if (set_plugin_int(value, &distance, addon))
105     return 1;
106   if (distance < 0 || distance > 255)
107     return 1;
108   zebra_olsr_distance(distance);
109   return 0;
110 }
111
112 static int
113 set_localpref(const char *value, void *data __attribute__ ((unused)), set_plugin_parameter_addon addon __attribute__ ((unused)))
114 {
115   int b;
116
117   if (set_plugin_boolean(value, &b, addon))
118     return 1;
119   if (b)
120     zebra_olsr_localpref();
121   return 0;
122 }
123
124 int
125 olsrd_plugin_init(void)
126 {
127   if (olsr_cnf->ip_version != AF_INET) {
128     fputs("see the source - ipv6 so far not supported\n", stderr);
129     return 1;
130   }
131
132   olsr_start_timer(1 * MSEC_PER_SEC, 0, OLSR_TIMER_PERIODIC, &zebra_check, NULL, 0);
133
134   return 0;
135 }
136
137 static void
138 my_init(void)
139 {
140   init_zebra();
141 }
142
143 static void
144 my_fini(void)
145 {
146   zebra_cleanup();
147 }
148
149 /*
150  * Local Variables:
151  * c-basic-offset: 2
152  * indent-tabs-mode: nil
153  * End:
154  */