* use the correct plugin interface version number
[olsrd.git] / lib / quagga / src / olsrd_plugin.c
1 /***************************************************************************
2  projekt              : olsrd-quagga
3  file                 : olsrd_plugin.c  
4  usage                : olsrd-plugin-handler-stuff 
5  copyright            : (C) 2006 by Immo 'FaUl' Wehrenberg
6  e-mail               : immo@chaostreff-dortmund.de
7  ***************************************************************************/
8
9 /***************************************************************************
10  *                                                                         *
11  *   This program is free software; you can redistribute it and/or modify  *
12  *   it under the terms of the GNU General Public License version 2 as     *
13  *   published by the Free Software Foundation.                            *
14  *                                                                         *
15  ***************************************************************************/
16
17
18 #include <stdio.h>
19 #include <string.h>
20
21 #include "olsrd_plugin.h"
22 #include "olsr.h"
23 #include "scheduler.h"
24 #include "defs.h"
25 #include "quagga.h"
26 #include "kernel_routes.h"
27
28 #define PLUGIN_NAME    "OLSRD quagga plugin"
29 #define PLUGIN_VERSION "0.2.2"
30 #define PLUGIN_AUTHOR  "Immo 'FaUl' Wehrenberg"
31 #define MOD_DESC PLUGIN_NAME " " PLUGIN_VERSION " by " PLUGIN_AUTHOR
32 #define PLUGIN_INTERFACE_VERSION 4
33
34
35 static void __attribute__ ((constructor)) my_init(void);
36 static void __attribute__ ((destructor)) my_fini(void);
37 static void redist_hna (void);
38
39
40 int olsrd_plugin_interface_version() {
41   return PLUGIN_INTERFACE_VERSION;
42 }
43
44
45 int olsrd_plugin_register_param(char *key, char *value) {
46   const char *zebra_route_types[] = {"system","kernel","connect","static",
47                               "rip","ripng","ospf","ospf6","isis",
48                               "bgp","hsls", NULL};
49   unsigned char i = 0;
50
51   if(!strcmp(key, "redistribute")) {
52     for (i = 0; zebra_route_types[i]; i++)
53       if (!strcmp(value, zebra_route_types[i])) {
54         zebra_redistribute(i);
55         return 1;
56       }
57   }
58   else if(!strcmp(key, "ExportRoutes")) {
59     if (!strcmp(value, "only")) {
60       if (!olsr_addroute_remove_function(&olsr_ioctl_add_route, AF_INET))
61         puts ("AIII, could not remove the kernel route exporter");
62       if (!olsr_delroute_remove_function(&olsr_ioctl_del_route, AF_INET))
63         puts ("AIII, could not remove the kernel route deleter");
64       olsr_addroute_add_function(&zebra_add_olsr_v4_route, AF_INET);
65       olsr_delroute_add_function(&zebra_del_olsr_v4_route, AF_INET);
66       return 1;
67     }
68     else if (!strcmp(value, "additional")) {
69       olsr_addroute_add_function(&zebra_add_olsr_v4_route, AF_INET);
70       olsr_delroute_add_function(&zebra_del_olsr_v4_route, AF_INET);
71       return 1;
72     }
73   }
74   else if (!strcmp(key, "Distance")) {
75     unsigned int distance = atoi (value);
76     if (distance < 255)
77       zebra_olsr_distance(distance);
78       return 1;
79   }
80   
81   else if (!strcmp(key, "LocalPref")) {
82     if (!strcmp(value, "true")) 
83       zebra_olsr_localpref();
84     else if (strcmp (value, "false"))
85       return -1;
86     return 1;
87   }
88   return -1;
89 }
90
91
92 int olsrd_plugin_init() {
93   if(olsr_cnf->ip_version != AF_INET) {
94     fputs("see the source - ipv6 so far not supportet\n" ,stderr);
95     return 1;
96   }
97
98   //  olsr_register_timeout_function(&olsr_timeout);
99   olsr_register_scheduler_event(&zebra_check, NULL, 1, 0, NULL);
100   return 0;
101 }
102
103 static void my_init(void) {
104   init_zebra();
105 }
106
107 static void my_fini(void) {
108 }
109