olsrd: update to 2021-06-21

- filtergw: add plugin allow to allow/block gateways
    (even smartgateway)

Signed-off-by: Nick Hainke <vincent@systemli.org>
This commit is contained in:
Nick Hainke 2021-06-12 09:15:47 +02:00 committed by Polynomdivision
parent 4bf9a5d5dc
commit a302ee6265
2 changed files with 3 additions and 634 deletions

View File

@ -6,13 +6,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=olsrd
PKG_SOURCE_DATE:=2021-06-08
PKG_SOURCE_DATE:=2021-06-12
PKG_RELEASE:=$(AUTORELEASE)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/OLSR/olsrd.git
PKG_SOURCE_VERSION:=a42c2df17c0f97b5cf6fb8af13a17334a444ed7c
PKG_MIRROR_HASH:=8c15bec590555c5e35fc81ab32727996d0f086c85d374f0128aae7d6947f8526
PKG_SOURCE_VERSION:=4973feb538b5b98b9d8ac2f8f474202f6d73de78
PKG_MIRROR_HASH:=705ff34d7ce13f59004b7fc91d852b8a6982538b58a78f4dfa552e212c1026eb
PKG_MAINTAINER:=Nick Hainke <vincent@systemli.org>
PKG_BUILD_PARALLEL:=0

View File

@ -1,631 +0,0 @@
From 02b7fae8a0f1d5bab3ec48417db822d56e02ce7e Mon Sep 17 00:00:00 2001
From: Nick Hainke <vincent@systemli.org>
Date: Fri, 28 Aug 2020 10:28:31 +0200
Subject: [PATCH] filtergw: add plugin allow to allow/block gateways (even
smartgateway)
The plugin adds a possibility to filter out gateway HNAs. This can be
very handy e.g. for faulty nodes. A gateway can be taken out directly on
a central node and all traffic is then redirected. Also the underlying
smart gateways are adapted. Currently the link multiplier is often used
to control a faulty node, but it is not necessarily the best way to do
so.
The plugin also allows to determine the smart gateway on the local node.
This way you can easily select another gateway node to direct traffic,
or block a specific one.
Here are some sample configurations:
Only allow Gateway HNA from '10.230.132.40':
config LoadPlugin
option library 'olsrd_filtergw'
list originator '10.230.132.40'
option allowlist '1'
Block Gateway HNA from '10.230.132.40':
config LoadPlugin
option library 'olsrd_filtergw'
list originator '10.230.132.40'
option allowlist '0'
The plugin is based on the work of sven-ola, pmelange and booo.
Signed-off-by: Nick Hainke <vincent@systemli.org>
---
Makefile | 14 +-
lib/filtergw/Makefile | 62 ++++++
lib/filtergw/src/olsrd_filtergw.c | 307 ++++++++++++++++++++++++++++++
lib/filtergw/src/olsrd_filtergw.h | 60 ++++++
lib/filtergw/src/olsrd_plugin.c | 97 ++++++++++
lib/filtergw/version-script.txt | 10 +
6 files changed, 549 insertions(+), 1 deletion(-)
create mode 100644 lib/filtergw/Makefile
create mode 100644 lib/filtergw/src/olsrd_filtergw.c
create mode 100644 lib/filtergw/src/olsrd_filtergw.h
create mode 100644 lib/filtergw/src/olsrd_plugin.c
create mode 100644 lib/filtergw/version-script.txt
--- a/Makefile
+++ b/Makefile
@@ -234,7 +234,7 @@ rpm:
# This is quite ugly but at least it works
ifeq ($(OS),linux)
-SUBDIRS := arprefresh bmf dot_draw dyn_gw dyn_gw_plain httpinfo info jsoninfo mdns mini nameservice netjson poprouting p2pd pgraph pud quagga secure sgwdynspeed txtinfo watchdog
+SUBDIRS := arprefresh bmf dot_draw dyn_gw dyn_gw_plain filtergw httpinfo info jsoninfo mdns mini nameservice netjson poprouting p2pd pgraph pud quagga secure sgwdynspeed txtinfo watchdog
else
ifeq ($(OS),win32)
SUBDIRS := dot_draw httpinfo info jsoninfo mini netjson pgraph secure txtinfo
@@ -337,6 +337,18 @@ dyn_gw_plain_install:
dyn_gw_plain_uninstall:
$(MAKECMDPREFIX)$(MAKECMD) -C lib/dyn_gw_plain DESTDIR=$(DESTDIR) uninstall
+filtergw:
+ $(MAKECMDPREFIX)$(MAKECMD) -C lib/filtergw
+
+filtergw_clean:
+ $(MAKECMDPREFIX)$(MAKECMD) -C lib/filtergw DESTDIR=$(DESTDIR) clean
+
+filtergw_install:
+ $(MAKECMDPREFIX)$(MAKECMD) -C lib/filtergw DESTDIR=$(DESTDIR) install
+
+filtergw_uninstall:
+ $(MAKECMDPREFIX)$(MAKECMD) -C lib/filtergw DESTDIR=$(DESTDIR) uninstall
+
httpinfo:
$(MAKECMDPREFIX)$(MAKECMD) -C lib/httpinfo
--- /dev/null
+++ b/lib/filtergw/Makefile
@@ -0,0 +1,62 @@
+# The olsr.org Optimized Link-State Routing daemon(olsrd)
+# Copyright (c) 2021, Nick Hainke <vincent@systemli.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_filtergw
+PLUGIN_VER = 0.0.1
+
+TOPDIR = ../..
+include $(TOPDIR)/Makefile.inc
+
+default_target: $(PLUGIN_FULLNAME)
+
+$(PLUGIN_FULLNAME): $(OBJS) version-script.txt
+ifeq ($(VERBOSE),0)
+ @echo "[LD] $@"
+endif
+ $(MAKECMDPREFIX)$(CC) $(LDFLAGS) -o $(PLUGIN_FULLNAME) $(OBJS) $(LIBS)
+
+install: $(PLUGIN_FULLNAME)
+ $(STRIP) $(PLUGIN_FULLNAME)
+ $(INSTALL_LIB)
+
+uninstall:
+ $(UNINSTALL_LIB)
+
+clean:
+ rm -f $(OBJS) $(SRCS:%.c=%.d) $(PLUGIN_FULLNAME)
--- /dev/null
+++ b/lib/filtergw/src/olsrd_filtergw.c
@@ -0,0 +1,307 @@
+/*
+ * The olsr.org Optimized Link-State Routing daemon (olsrd)
+ *
+ * (c) by the OLSR project
+ *
+ * See our Git repository to find out who worked on this file
+ * and thus is a copyright holder on it.
+ *
+ * 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.
+ *
+ */
+
+#include <arpa/inet.h>
+
+#include "olsr_types.h"
+#include "olsrd_filtergw.h"
+#include "olsr.h"
+#include "defs.h"
+#include "ipcalc.h"
+#include "scheduler.h"
+#include "log.h"
+#include "routing_table.h"
+#include "olsr_cfg.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/time.h>
+#include <net/route.h>
+#include <unistd.h>
+#include <errno.h>
+#include <time.h>
+
+static int is_allowlist = 0;
+
+static struct filter_list * add_to_filter_list(const char *, struct filter_list *);
+
+struct originator_list {
+ union olsr_ip_addr originator;
+ struct originator_list * next;
+};
+
+struct filter_group {
+ struct originator_list * originator_list;
+ struct hna_group * next;
+};
+
+static struct filter_group * filter_groups = NULL;
+
+/* -------------------------------------------------------------------------
+ * Function : add_to_originator_list
+ * Description: Add a new ip to originator list
+ * Input : originator_address - the address of originator
+ * the_originator_list - the list of originators
+ * Output : none
+ * Return : a pointer to the newly added originator, i.e. start of the list
+ * Data Used : none
+ * ------------------------------------------------------------------------- */
+/* add the valid IPs to the head of the list */
+static struct originator_list *
+add_to_originator_list(union olsr_ip_addr * originator_address, struct originator_list *the_originator_list)
+{
+ struct originator_list *new = calloc(1, sizeof(struct originator_list));
+ if (!new) {
+ olsr_exit("FILTERGW: Out of memory", EXIT_FAILURE);
+ }
+ memcpy(&new->originator, originator_address, olsr_cnf->ipsize);
+ new->next = the_originator_list;
+ return new;
+}
+
+/**
+ * read config file parameters
+ */
+static int
+set_plugin_filter(const char *value, void *data __attribute__ ((unused)), set_plugin_parameter_addon addon __attribute__ ((unused)))
+{
+ union olsr_ip_addr addr;
+
+ if (inet_pton(olsr_cnf->ip_version, value, &addr) <= 0) {
+ OLSR_PRINTF(0, "Illegal IP address \"%s\"", value);
+ return 1;
+ }
+
+ if (filter_groups == NULL) {
+ struct filter_group *new = calloc(1, sizeof(struct filter_group));
+ if (new == NULL) {
+ olsr_exit("FILTERGW: Out of memory", EXIT_FAILURE);
+ }
+ filter_groups = new;
+ new->next = filter_groups;
+ }
+
+ filter_groups->originator_list = add_to_originator_list(&addr, filter_groups->originator_list);
+
+ return 0;
+}
+
+/* -------------------------------------------------------------------------
+ * Function : olsrd_filtergw_parser
+ * Description: Function to be passed to the parser engine. This function
+ * processes the incoming message and filters gw hna's.
+ * Input : m - message to parse
+ * in_if - interface to use (unused in this application)
+ * ipaddr - IP-address to use (unused in this application)
+ * Output : none
+ * Return : false if message should be supressed, true otherwise
+ * Data Used : none
+ * ------------------------------------------------------------------------- */
+bool
+olsrd_filtergw_parser(
+ union olsr_message *m,
+ struct interface_olsr *in_if __attribute__ ((unused)),
+ union olsr_ip_addr *ipaddr __attribute__ ((unused))
+){
+
+ uint8_t olsr_msgtype;
+ olsr_reltime vtime;
+ uint16_t olsr_msgsize;
+ union olsr_ip_addr originator;
+
+ int hnasize;
+ const uint8_t *curr, *curr_end;
+ uint8_t *olsr_msgsize_p, *curr_hna, *temp_msgsize;
+
+ struct ipaddr_str buf;
+#ifdef DEBUG
+ OLSR_PRINTF(5, "Processing HNA\n");
+#endif
+
+ /* Check if everyting is ok */
+ if (!m) {
+ return false;
+ }
+ curr = (const uint8_t *)m;
+
+ /* olsr_msgtype */
+ pkt_get_u8(&curr, &olsr_msgtype);
+ if (olsr_msgtype != HNA_MESSAGE) {
+ OLSR_PRINTF(1, "not a HNA message!\n");
+ return false;
+ }
+ /* Get vtime */
+ pkt_get_reltime(&curr, &vtime);
+
+ /* olsr_msgsize */
+ pkt_get_u16(&curr, &olsr_msgsize);
+
+ /* validate originator */
+ pkt_get_ipaddress(&curr, &originator);
+ /*printf("HNA from %s\n\n", olsr_ip_to_string(&buf, &originator)); */
+
+ if(!should_filter(&originator))
+ {
+ return true;
+ }
+
+ /* ttl */
+ pkt_ignore_u8(&curr);
+
+ /* hopcnt */
+ pkt_ignore_u8(&curr);
+
+ /* seqno */
+ pkt_ignore_u16(&curr);
+
+ /* msgtype(1) + vtime(1) + msgsize(2) + ttl(1) + hopcnt(1) + seqno(2) = 8 */
+ olsr_msgsize_p = (uint8_t *)m + 2;
+ curr_hna = (uint8_t *)m + 8 + olsr_cnf->ipsize;
+ curr_end = (const uint8_t *)m + olsr_msgsize;
+ hnasize = olsr_msgsize - 8 - olsr_cnf->ipsize;
+
+ if ((hnasize % (2 * olsr_cnf->ipsize)) != 0) {
+ OLSR_PRINTF(1, "Illegal HNA message from %s with size %d!\n",
+ olsr_ip_to_string(&buf, &originator), olsr_msgsize);
+ return false;
+ }
+
+ while (curr < curr_end) {
+ struct olsr_ip_prefix prefix;
+ union olsr_ip_addr mask;
+
+ pkt_get_ipaddress(&curr, &prefix.prefix);
+ pkt_get_ipaddress(&curr, &mask);
+ prefix.prefix_len = olsr_netmask_to_prefix(&mask);
+
+ if (is_prefix_inetgw(&prefix)) {
+ hnasize -= 2 * olsr_cnf->ipsize;
+ if (0 < hnasize) {
+ /* move the rest of the message forward over the gw HNA */
+ memmove(curr_hna, curr, curr_end - curr);
+ curr_end -= 2 * olsr_cnf->ipsize;
+ curr = curr_hna;
+
+ /* update the message size */
+ temp_msgsize = olsr_msgsize_p;
+ olsr_msgsize -= 2 * olsr_cnf->ipsize;
+ pkt_put_u16(&temp_msgsize, olsr_msgsize);
+ continue;
+ }
+ return false;
+ }
+ else
+ {
+ curr_hna += 2 * olsr_cnf->ipsize;
+ }
+ }
+ return true;
+}
+
+static const struct olsrd_plugin_parameters plugin_parameters[] = {
+ {.name = "originator", .set_plugin_parameter = &set_plugin_filter, .data = NULL},
+ {.name = "allowlist", .set_plugin_parameter = &set_plugin_int, .data = &is_allowlist},
+};
+
+void
+olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size)
+{
+ *params = plugin_parameters;
+ *size = sizeof(plugin_parameters) / sizeof(*plugin_parameters);
+}
+
+int
+olsrd_plugin_init(void)
+{
+ olsr_parser_add_function(&olsrd_filtergw_parser, HNA_MESSAGE);
+ return 1;
+}
+
+void olsrd_plugin_fini(void) {
+ while(filter_groups) {
+
+ while (filter_groups->originator_list) {
+ struct originator_list* next = filter_groups->originator_list->next;
+ // free(&filter_groups->originator_list->originator);
+ free(filter_groups->originator_list);
+ filter_groups->originator_list = next;
+ }
+
+ struct filter_group* next = filter_groups->next;
+ free(filter_groups);
+ }
+}
+
+/* -------------------------------------------------------------------------
+ * Function : should_filter
+ * Description: Function used by the parse engine to see if filter applies
+ * to given originator address.
+ * Input : originator - ip addr of originator that should be checked
+ * Output : none
+ * Return : false if gw should note be supressed, true otherwise
+ * Data Used : none
+ * ------------------------------------------------------------------------- */
+int should_filter(union olsr_ip_addr * originator)
+{
+ int found = 0;
+
+ if(filter_groups == NULL)
+ {
+ /* if it is allow list but no entry, filter every GW announcement */
+ return is_allowlist;
+ }
+
+ /* for now we only have 1 list entry */
+ struct originator_list *list = filter_groups->originator_list;
+ for (list = filter_groups->originator_list; list; list = list->next) {
+ if(ipequal(&list->originator, originator))
+ {
+ found = 1;
+ break;
+ }
+ }
+ return is_allowlist ? !found : found;
+}
\ No newline at end of file
--- /dev/null
+++ b/lib/filtergw/src/olsrd_filtergw.h
@@ -0,0 +1,60 @@
+/*
+ * The olsr.org Optimized Link-State Routing daemon (olsrd)
+ *
+ * (c) by the OLSR project
+ *
+ * See our Git repository to find out who worked on this file
+ * and thus is a copyright holder on it.
+ *
+ * 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.
+ *
+ */
+
+#ifndef _OLSRD_FILTERGW_H
+#define _OLSRD_FILTERGW_H
+
+#include "olsrd_plugin.h"
+#include "plugin_util.h"
+
+int olsrd_plugin_init(void);
+
+void olsrd_plugin_fini(void);
+
+int olsrd_plugin_interface_version(void);
+
+void olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size);
+
+#endif /* _OLSRD_FILTERGW_H */
\ No newline at end of file
--- /dev/null
+++ b/lib/filtergw/src/olsrd_plugin.c
@@ -0,0 +1,97 @@
+/*
+ * The olsr.org Optimized Link-State Routing daemon (olsrd)
+ *
+ * (c) by the OLSR project
+ *
+ * See our Git repository to find out who worked on this file
+ * and thus is a copyright holder on it.
+ *
+ * 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.
+ *
+ */
+
+#include "olsrd_plugin.h"
+#include "olsrd_filtergw.h"
+#include "olsr.h"
+#include "builddata.h"
+#include <stdio.h>
+
+#define PLUGIN_NAME "OLSRD filtergw plugin"
+#define PLUGIN_INTERFACE_VERSION 5
+
+/**
+ * "Private" declarations
+ */
+
+static void my_init(void) __attribute__ ((constructor));
+static void my_fini(void) __attribute__ ((destructor));
+
+/*
+ * Defines the version of the plugin interface that is used
+ * THIS IS NOT THE VERSION OF YOUR PLUGIN!
+ * Do not alter unless you know what you are doing!
+ */
+int
+olsrd_plugin_interface_version(void)
+{
+ return PLUGIN_INTERFACE_VERSION;
+}
+
+/**
+ *Constructor
+ */
+void
+my_init(void)
+{
+ /* Print plugin info to stdout */
+ olsr_printf(0, "%s (%s)\n", PLUGIN_NAME, git_descriptor);
+}
+
+/**
+ *Destructor
+ */
+void
+my_fini(void)
+{
+ olsrd_plugin_fini();
+}
+
+/*
+ * Local Variables:
+ * c-basic-offset: 2
+ * indent-tabs-mode: nil
+ * End:
+ */
--- /dev/null
+++ b/lib/filtergw/version-script.txt
@@ -0,0 +1,10 @@
+VERS_1.0
+{
+ global:
+ olsrd_plugin_interface_version;
+ olsrd_plugin_init;
+ olsrd_get_plugin_parameters;
+
+ local:
+ *;
+};