Merge branch 'batman-adv'
authorJo-Philipp Wich <jow@openwrt.org>
Thu, 18 Apr 2013 16:54:45 +0000 (18:54 +0200)
committerJo-Philipp Wich <jow@openwrt.org>
Thu, 18 Apr 2013 16:54:45 +0000 (18:54 +0200)
16 files changed:
README [new file with mode: 0644]
batman/Makefile [new file with mode: 0644]
batman/files/etc/config/batmand [new file with mode: 0644]
batman/files/etc/config/vis [new file with mode: 0644]
batman/files/etc/init.d/batmand [new file with mode: 0644]
batman/files/etc/init.d/vis [new file with mode: 0644]
batman/patches/100-2.6.36.patch [new file with mode: 0644]
bmxd/Makefile [new file with mode: 0644]
bmxd/files/etc/config/bmxd [new file with mode: 0644]
bmxd/files/etc/init.d/bmxd [new file with mode: 0644]
olsrd/Makefile [new file with mode: 0644]
olsrd/files/olsrd.config [new file with mode: 0644]
olsrd/files/olsrd.init [new file with mode: 0644]
olsrd/files/olsrd.pud.position.conf [new file with mode: 0644]
olsrd/files/olsrd.sgw.speed.conf [new file with mode: 0644]
olsrd/files/olsrd_secure_key [new file with mode: 0644]

diff --git a/README b/README
new file mode 100644 (file)
index 0000000..aa22408
--- /dev/null
+++ b/README
@@ -0,0 +1,18 @@
+This is an OpenWrt package feed containing community maintained routing packages.
+
+To use these packages, add the following line to the feeds.conf
+in the OpenWrt buildroot:
+
+  src-git openwrt-routing git://github.com/openwrt-routing/packages.git
+  
+Update the feed:
+
+  ./scripts/feeds update openwrt-routing
+  
+Activate the package:
+
+  ./scripts/feeds install -a -p openwrt-routing
+  
+The routing packages should now appear in menuconfig.
+
+
diff --git a/batman/Makefile b/batman/Makefile
new file mode 100644 (file)
index 0000000..4026496
--- /dev/null
@@ -0,0 +1,152 @@
+#
+# Copyright (C) 2008-2011 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/kernel.mk
+
+PKG_NAME:=batmand
+PKG_REV:=1439
+PKG_VERSION:=r$(PKG_REV)
+PKG_RELEASE:=2
+PKG_EXTRA_CFLAGS=-DDEBUG_MALLOC -DMEMORY_USAGE -DPROFILE_DATA -DREVISION_VERSION=\"\ rv$(PKG_REV)\"
+
+PKG_SOURCE_PROTO:=svn
+PKG_SOURCE_VERSION:=$(PKG_REV)
+PKG_SOURCE_SUBDIR:=$(if $(PKG_BRANCH),$(PKG_BRANCH),$(PKG_NAME))-$(PKG_VERSION)
+PKG_SOURCE_URL:=http://downloads.open-mesh.org/svn/batman/trunk/
+PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
+PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
+
+PKG_KMOD_BUILD_DIR:=$(PKG_BUILD_DIR)/batman/linux/modules
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/batmand/Default
+  URL:=http://www.open-mesh.org/
+  MAINTAINER:=Marek Lindner <lindner_marek@yahoo.de>
+endef
+
+define Package/batmand
+$(call Package/batmand/Default)
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Routing and Redirection
+  DEPENDS:=+libpthread +kmod-tun
+  TITLE:=B.A.T.M.A.N. layer 3 routing daemon
+endef
+
+define Package/batmand/description
+B.A.T.M.A.N. layer 3 routing daemon
+endef
+
+define Package/vis
+$(call Package/batmand/Default)
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Routing and Redirection
+  DEPENDS:=+libpthread
+  TITLE:=visualization server for B.A.T.M.A.N. layer 3
+endef
+        
+define Package/vis/description
+visualization server for B.A.T.M.A.N. layer 3
+endef
+
+define KernelPackage/batgat
+$(call Package/batmand/Default)
+  SUBMENU:=Network Support
+  DEPENDS:=+batmand @BROKEN
+  TITLE:=B.A.T.M.A.N. gateway module
+  FILES:=$(PKG_KMOD_BUILD_DIR)/batgat.$(LINUX_KMOD_SUFFIX)
+  AUTOLOAD:=$(call AutoLoad,50,batgat)
+endef
+
+
+define KernelPackage/batgat/description
+Kernel gateway module for B.A.T.M.A.N. for better tunnel performance
+endef
+
+MAKE_BATMAND_ARGS += \
+       EXTRA_CFLAGS='$(TARGET_CFLAGS) $(PKG_EXTRA_CFLAGS)' \
+       CCFLAGS="$(TARGET_CFLAGS)" \
+       OFLAGS="$(TARGET_CFLAGS)" \
+       REVISION="$(PKG_REV)" \
+       CC="$(TARGET_CC)" \
+       NODEBUG=1 \
+       UNAME="Linux" \
+       INSTALL_PREFIX="$(PKG_INSTALL_DIR)" \
+       STRIP="/bin/true" \
+       batmand install
+       
+MAKE_VIS_ARGS += \
+       EXTRA_CFLAGS='$(TARGET_CFLAGS) $(PKG_EXTRA_CFLAGS)' \
+       CCFLAGS="$(TARGET_CFLAGS)" \
+       OFLAGS="$(TARGET_CFLAGS)" \
+       REVISION="$(PKG_REV)" \
+       CC="$(TARGET_CC)" \
+       NODEBUG=1 \
+       UNAME="Linux" \
+       INSTALL_PREFIX="$(PKG_INSTALL_DIR)" \
+       STRIP="/bin/true" \
+       vis install
+
+MAKE_BATGAT_ARGS += \
+       CROSS_COMPILE="$(TARGET_CROSS)" \
+       ARCH="$(LINUX_KARCH)" \
+       PATH="$(TARGET_PATH)" \
+       SUBDIRS="$(PKG_KMOD_BUILD_DIR)" \
+       LINUX_VERSION="$(LINUX_VERSION)" \
+       REVISION="$(PKG_REV)" modules   
+
+
+define Build/Configure
+endef
+
+ifneq ($(DEVELOPER)$(CONFIG_PACKAGE_batmand),)
+       BUILD_BATMAND := $(MAKE) -C $(PKG_BUILD_DIR)/batman $(MAKE_BATMAND_ARGS)
+endif
+
+ifneq ($(DEVELOPER)$(CONFIG_PACKAGE_vis),)
+       BUILD_VIS := $(MAKE) -C $(PKG_BUILD_DIR)/vis $(MAKE_VIS_ARGS)
+endif
+       
+ifneq ($(DEVELOPER)$(CONFIG_PACKAGE_kmod-batgat),)
+       BUILD_BATGAT := $(MAKE) -C "$(LINUX_DIR)" $(MAKE_BATGAT_ARGS)
+endif
+               
+define Build/Compile
+       $(BUILD_BATMAND)
+       $(BUILD_VIS)
+       cp $(PKG_KMOD_BUILD_DIR)/Makefile.kbuild $(PKG_KMOD_BUILD_DIR)/Makefile
+       $(BUILD_BATGAT)
+endef
+
+define Package/batmand/install
+       $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/config $(1)/etc/init.d
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/batmand $(1)/usr/sbin/
+       $(INSTALL_BIN) ./files/etc/init.d/batmand $(1)/etc/init.d
+       $(INSTALL_DATA) ./files/etc/config/batmand $(1)/etc/config
+endef
+
+define Package/batmand/conffiles
+/etc/config/batmand
+endef
+
+define Package/vis/install
+       $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/config $(1)/etc/init.d
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/vis $(1)/usr/sbin/
+       $(INSTALL_BIN) ./files/etc/init.d/vis $(1)/etc/init.d
+       $(INSTALL_DATA) ./files/etc/config/vis $(1)/etc/config
+endef
+
+define Package/vis/conffiles
+/etc/config/vis
+endef
+
+$(eval $(call BuildPackage,batmand))
+$(eval $(call BuildPackage,vis))
+$(eval $(call KernelPackage,batgat))
diff --git a/batman/files/etc/config/batmand b/batman/files/etc/config/batmand
new file mode 100644 (file)
index 0000000..6d1f3be
--- /dev/null
@@ -0,0 +1,12 @@
+config batmand general
+       option interface                ath0
+       option hna                      
+       option gateway_class            
+       option originator_interval
+       option preferred_gateway        
+       option routing_class
+       option visualisation_srv
+       option policy_routing_script
+       option disable_client_nat
+       option disable_aggregation
+       
diff --git a/batman/files/etc/config/vis b/batman/files/etc/config/vis
new file mode 100644 (file)
index 0000000..6d30023
--- /dev/null
@@ -0,0 +1,3 @@
+config vis general
+       option interface                ath0
+       
diff --git a/batman/files/etc/init.d/batmand b/batman/files/etc/init.d/batmand
new file mode 100644 (file)
index 0000000..403e9f3
--- /dev/null
@@ -0,0 +1,66 @@
+#!/bin/sh /etc/rc.common
+START=90
+
+start () {
+       interface=$(uci get batmand.general.interface)
+       if [ "$interface" = "" ]; then
+               echo $1 Error, you must specify at least a network interface
+               exit
+       fi
+       hnas=$(uci get batmand.general.hna)
+       gateway_class=$(uci get batmand.general.gateway_class)
+       originator_interval=$(uci get batmand.general.originator_interval)
+       preferred_gateway=$(uci get batmand.general.preferred_gateway)
+       routing_class=$(uci get batmand.general.routing_class)
+       visualisation_srv=$(uci get batmand.general.visualisation_srv)
+       policy_routing_script=$(uci get batmand.general.policy_routing_script)
+       disable_client_nat=$(uci get batmand.general.disable_client_nat)
+       disable_aggregation=$(uci get batmand.general.disable_aggregation)
+       batman_args=""
+
+       for hna in $hnas
+          do
+             batman_args=${batman_args}'-a '$hna' '
+          done
+
+       if [ $gateway_class ]; then
+               batman_args=${batman_args}'-g '$gateway_class' '
+       fi
+
+       if [ $originator_interval ]; then
+               batman_args=${batman_args}'-o '$originator_interval' '
+       fi
+
+       if [ $preferred_gateway ]; then
+               batman_args=${batman_args}'-p '$preferred_gateway' '
+       fi
+
+       if [ $routing_class ]; then
+               batman_args=${batman_args}'-r '$routing_class' '
+       fi
+               
+       if [ $visualisation_srv ]; then
+               batman_args=${batman_args}'-s '$visualisation_srv' '
+       fi
+       
+       if [ $policy_routing_script ]; then
+               batman_args=${batman_args}'--policy-routing-script '$policy_routing_script' '
+       fi
+       
+       if [ $disable_client_nat ]; then
+               batman_args=${batman_args}'--disable-client-nat '
+       fi
+       
+       if [ $disable_aggregation ]; then
+               batman_args=${batman_args}'--disable-aggregation '
+       fi
+
+       batman_args=${batman_args}$interface
+       batmand $batman_args >/dev/null 2>&1
+}
+
+stop () {
+        killall batmand
+}
+
+        
diff --git a/batman/files/etc/init.d/vis b/batman/files/etc/init.d/vis
new file mode 100644 (file)
index 0000000..ef18eb7
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/sh /etc/rc.common
+START=90
+
+start () {
+       interface=$(uci get vis.general.interface)
+       if [ "$interface" = "" ]; then
+               echo $1 Error, you must specify at least a network interface
+               exit
+       fi
+       vis_args=$interface
+
+       vis $vis_args >/dev/null 2>&1
+}
+
+stop () {
+        killall vis
+}
+
+        
diff --git a/batman/patches/100-2.6.36.patch b/batman/patches/100-2.6.36.patch
new file mode 100644 (file)
index 0000000..566c23b
--- /dev/null
@@ -0,0 +1,47 @@
+---
+ batman/linux/modules/gateway.c |   19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+--- batmand-r1439.orig/batman/linux/modules/gateway.c
++++ batmand-r1439/batman/linux/modules/gateway.c
+@@ -29,6 +29,7 @@ static struct class *batman_class;
+ static int batgat_open(struct inode *inode, struct file *filp);
+ static int batgat_release(struct inode *inode, struct file *file);
+ static int batgat_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg );
++static long batgat_ioctl_unlocked(struct file *file, unsigned int cmd, unsigned long arg );
+ static void udp_data_ready(struct sock *sk, int len);
+@@ -53,7 +54,11 @@ static int proc_clients_read(char *buf,
+ static struct file_operations fops = {
+       .open = batgat_open,
+       .release = batgat_release,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)
++      .unlocked_ioctl = batgat_ioctl_unlocked,
++#else
+       .ioctl = batgat_ioctl,
++#endif
+ };
+@@ -166,6 +171,20 @@ static int batgat_release(struct inode *
+ }
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)
++#include <linux/smp_lock.h>
++static long batgat_ioctl_unlocked(struct file *file, unsigned int cmd, unsigned long arg )
++{
++      int ret;
++
++      lock_kernel();
++      ret = batgat_ioctl(file->f_path.dentry->d_inode, file, cmd, arg);
++      unlock_kernel();
++
++      return ret;
++}
++#endif
++
+ static int batgat_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg )
+ {
+       uint8_t tmp_ip[4];
diff --git a/bmxd/Makefile b/bmxd/Makefile
new file mode 100644 (file)
index 0000000..5dfd7f9
--- /dev/null
@@ -0,0 +1,75 @@
+#
+# Copyright (C) 2008 Freifunk Leipzig
+# Copyright (C) 2008-2010 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=bmxd
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=git://github.com/axn/bmxd.git
+PKG_REV:=9c1d12b554dccd2efde249f5e44a7d4de59ce1a8
+PKG_VERSION:=r2012011001
+#PKG_RELEASE:=1
+PKG_SOURCE_VERSION:=$(PKG_REV)
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
+
+PKG_EXTRA_CFLAGS:=-DNODEBUGALL
+
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/bmxd/Default
+  URL:=http://www.bmx6.net/
+  MAINTAINER:=Axel Neumann <neumann@cgws.de>
+endef
+
+define Package/bmxd
+$(call Package/bmxd/Default)
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Routing and Redirection
+  DEPENDS:=+kmod-tun
+  TITLE:=B.a.t.M.a.n. eXperimental (BMX) layer 3 routing daemon
+endef
+
+define Package/bmxd/conffiles
+/etc/config/bmxd
+endef
+
+
+define Package/bmxd/description
+B.a.t.M.a.n. eXperimental (BMX) layer 3 routing daemon
+endef
+
+MAKE_ARGS += \
+       EXTRA_CFLAGS="$(TARGET_CFLAGS) $(PKG_EXTRA_CFLAGS)" \
+       CCFLAGS="$(TARGET_CFLAGS)" \
+       OFLAGS="$(TARGET_CFLAGS)" \
+       REVISION="$(PKG_REV)" \
+       CC="$(TARGET_CC)" \
+       NODEBUG=1 \
+       UNAME="Linux" \
+       INSTALL_PREFIX="$(PKG_INSTALL_DIR)" \
+       STRIP="/bin/true" \
+       bmxd install
+
+define Build/Compile
+       mkdir -p $(PKG_INSTALL_DIR)/usr/sbin
+       $(MAKE) -C $(PKG_BUILD_DIR) $(MAKE_ARGS)
+endef
+
+define Package/bmxd/install
+       $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/config $(1)/etc/init.d
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/bmxd $(1)/usr/sbin/bmxd
+       $(INSTALL_BIN) ./files/etc/init.d/bmxd $(1)/etc/init.d
+       $(INSTALL_DATA) ./files/etc/config/bmxd $(1)/etc/config
+endef
+
+$(eval $(call BuildPackage,bmxd))
diff --git a/bmxd/files/etc/config/bmxd b/bmxd/files/etc/config/bmxd
new file mode 100644 (file)
index 0000000..c8619e9
--- /dev/null
@@ -0,0 +1,9 @@
+config bmxd general
+       option interface                'ath0'
+#      option announce                 
+#      option gateway_class            
+#      option originator_interval      
+#      option preferred_gateway        
+#      option routing_class            
+#      option visualisation_srv        
+#      option misc                     'base-port=14305'       
diff --git a/bmxd/files/etc/init.d/bmxd b/bmxd/files/etc/init.d/bmxd
new file mode 100644 (file)
index 0000000..d23b4c8
--- /dev/null
@@ -0,0 +1,51 @@
+#!/bin/sh /etc/rc.common
+START=91
+. /lib/config/uci.sh
+uci_load bmxd
+start () {
+       interface="$(uci get bmxd.general.interface)"
+       if [ "$interface" = "" ]; then
+               echo $1 Error, you must specify at least a network interface
+               exit
+       fi
+       announce=$(uci get bmxd.general.announce)
+       gateway_class=$(uci get bmxd.general.gateway_class)
+       originator_interval=$(uci get bmxd.general.originator_interval)
+       preferred_gateway=$(uci get bmxd.general.preferred_gateway)
+       routing_class=$(uci get bmxd.general.routing_class)
+       visualisation_srv=$(uci get bmxd.general.visualisation_srv)
+       misc="$(uci get bmxd.general.misc)"
+       bmx_args=""
+
+       if [ $announce ]; then
+               bmx_args=${bmx_args}'-a '$announce' '
+       fi
+
+       if [ $gateway_class ]; then
+               bmx_args=${bmx_args}'-g '$gateway_class' '
+       fi
+
+       if [ $originator_interval ]; then
+               bmx_args=${bmx_args}'-o '$originator_interval' '
+       fi
+
+       if [ $preferred_gateway ]; then
+               bmx_args=${bmx_args}'-p '$preferred_gateway' '
+       fi
+
+       if [ $routing_class ]; then
+               bmx_args=${bmx_args}'-r '$routing_class' '
+       fi
+               
+       if [ $visualisation_srv ]; then
+               bmx_args=${bmx_args}'-s '$visualisation_srv' '
+       fi
+       
+
+       bmx_args="$misc ${bmx_args} $interface"
+       bmxd $bmx_args >/dev/null 2>&1
+}
+
+stop () {
+       killall bmxd
+}
diff --git a/olsrd/Makefile b/olsrd/Makefile
new file mode 100644 (file)
index 0000000..e5be87b
--- /dev/null
@@ -0,0 +1,290 @@
+# 
+# Copyright (C) 2009-2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=olsrd
+PKG_VERSION:=0.6.5.2
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=http://www.olsr.org/releases/0.6
+
+PKG_MD5SUM:=190e3c763656f71d3ca6868db7658f43
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+TARGET_CFLAGS += $(FPIC)
+
+define Package/olsrd/template
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Routing and Redirection
+  MAINTAINER:=Saverio Proto <zioproto@gmail.com>
+  TITLE:=OLSR (Optimized Link State Routing) daemon
+  URL:=http://www.olsr.org/
+endef
+
+define Package/olsrd
+  $(call Package/olsrd/template)
+  MENU:=1
+  DEPENDS:=+libpthread
+endef
+
+define Package/olsrd/conffiles
+/etc/config/olsrd
+endef
+
+define Package/olsrd-mod-arprefresh
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd
+  TITLE:=Kernel ARP cache refresh plugin
+endef
+
+define Package/olsrd-mod-dot-draw
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd
+  TITLE:=Dot topology information plugin
+endef
+
+define Package/olsrd-mod-bmf
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd +kmod-tun
+  TITLE:=Basic multicast forwarding plugin
+endef
+
+define Package/olsrd-mod-dyn-gw
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd
+  TITLE:=Dynamic internet gateway plugin
+endef
+
+define Package/olsrd-mod-dyn-gw-plain
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd
+  TITLE:=Dynamic internet gateway plain plugin
+endef
+
+define Package/olsrd-mod-httpinfo
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd
+  TITLE:=Small informative web server plugin
+endef
+
+define Package/olsrd-mod-jsoninfo
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd
+  TITLE:=Small informative plugin with JSON output
+endef
+
+define Package/olsrd-mod-mdns
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd
+  TITLE:=MDNS/Zeroconf/Bonjour packet distribution 
+endef
+
+define Package/olsrd-mod-nameservice
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd
+  TITLE:=Lightweight hostname resolver plugin
+endef
+
+define Package/olsrd-mod-p2pd
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd
+  TITLE:=Peer to Peer Discovery plugin
+endef
+
+
+define Package/olsrd-mod-pgraph
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd
+  TITLE:=output network topology for pgraph
+endef
+
+define Package/olsrd-mod-pud
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd
+  TITLE:=Position Update Distribution plugin
+endef
+
+define Package/olsrd-mod-quagga
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd
+  TITLE:=Quagga plugin
+endef
+
+define Package/olsrd-mod-secure
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd
+  TITLE:=Message signing plugin to secure routing domain
+endef
+
+define Package/olsrd-mod-sgwdynspeed
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd
+  TITLE:=Smart Gateway dynamic speed plugin
+endef
+
+define Package/olsrd-mod-txtinfo
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd
+  TITLE:=Small informative web server plugin
+endef
+
+define Package/olsrd-mod-watchdog
+  $(call Package/olsrd/template)
+  DEPENDS:=olsrd
+  TITLE:=Watchdog plugin
+endef
+
+define Package/olsrd-mod-pud/conffiles
+/etc/olsrd.d/olsrd.pud.position.conf
+endef
+
+define Package/olsrd-mod-secure/conffiles
+/etc/olsrd.d/olsrd_secure_key
+endef
+
+define Package/olsrd-mod-sgwdynspeed/conffiles
+/etc/olsrd.d/olsrd.sgw.speed.conf
+endef
+
+MAKE_FLAGS+= \
+       NO_DEBUG_MESSAGES=1 \
+       OS="linux" \
+       DESTDIR="$(PKG_INSTALL_DIR)" \
+       STRIP="true" \
+       INSTALL_LIB="true" \
+       SUBDIRS="arprefresh bmf dot_draw dyn_gw dyn_gw_plain httpinfo jsoninfo mdns nameservice p2pd pgraph pud quagga secure sgwdynspeed txtinfo watchdog"
+
+define Build/Compile
+       $(call Build/Compile/Default,all)
+       $(call Build/Compile/Default,libs)
+endef
+
+define Package/olsrd/install
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_DATA) ./files/olsrd.config $(1)/etc/config/olsrd
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/olsrd $(1)/usr/sbin/
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/olsrd.init $(1)/etc/init.d/olsrd
+endef
+
+define Package/olsrd-mod-arprefresh/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/arprefresh/olsrd_arprefresh.so.* $(1)/usr/lib/
+endef
+
+define Package/olsrd-mod-dot-draw/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/dot_draw/olsrd_dot_draw.so.* $(1)/usr/lib/
+endef
+
+define Package/olsrd-mod-bmf/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/bmf/olsrd_bmf.so.* $(1)/usr/lib/
+endef
+
+define Package/olsrd-mod-dyn-gw/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/dyn_gw/olsrd_dyn_gw.so.* $(1)/usr/lib/
+endef
+
+define Package/olsrd-mod-dyn-gw-plain/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/dyn_gw_plain/olsrd_dyn_gw_plain.so.* $(1)/usr/lib/
+endef
+
+define Package/olsrd-mod-httpinfo/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/httpinfo/olsrd_httpinfo.so.* $(1)/usr/lib/
+endef
+
+define Package/olsrd-mod-jsoninfo/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/jsoninfo/olsrd_jsoninfo.so.* $(1)/usr/lib/
+endef
+
+define Package/olsrd-mod-mdns/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/mdns/olsrd_mdns.so.* $(1)/usr/lib/
+endef
+
+define Package/olsrd-mod-nameservice/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/nameservice/olsrd_nameservice.so.* $(1)/usr/lib/
+endef
+
+define Package/olsrd-mod-p2pd/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/p2pd/olsrd_p2pd.so.* $(1)/usr/lib/
+endef
+
+define Package/olsrd-mod-pgraph/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/pgraph/olsrd_pgraph.so.* $(1)/usr/lib/
+endef
+
+define Package/olsrd-mod-pud/install
+       $(INSTALL_DIR) $(1)/etc/olsrd.d
+       $(CP) ./files/olsrd.pud.position.conf $(1)/etc/olsrd.d/
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/pud/nmealib/lib/libnmea.so $(1)/usr/lib/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/pud/wireformat/lib/libOlsrdPudWireFormat.so $(1)/usr/lib/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/pud/olsrd_pud.so.* $(1)/usr/lib/
+endef
+
+define Package/olsrd-mod-quagga/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/quagga/olsrd_quagga.so.* $(1)/usr/lib/
+endef
+
+define Package/olsrd-mod-secure/install
+       $(INSTALL_DIR) $(1)/etc/olsrd.d
+       $(CP) ./files/olsrd_secure_key $(1)/etc/olsrd.d/
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/secure/olsrd_secure.so.* $(1)/usr/lib/
+endef
+
+define Package/olsrd-mod-sgwdynspeed/install
+       $(INSTALL_DIR) $(1)/etc/olsrd.d
+       $(CP) ./files/olsrd.sgw.speed.conf $(1)/etc/olsrd.d/
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/sgwdynspeed/olsrd_sgwdynspeed.so.* $(1)/usr/lib/
+endef
+
+define Package/olsrd-mod-txtinfo/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/txtinfo/olsrd_txtinfo.so.* $(1)/usr/lib/
+endef
+
+define Package/olsrd-mod-watchdog/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/watchdog/olsrd_watchdog.so.* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,olsrd))
+$(eval $(call BuildPackage,olsrd-mod-arprefresh))
+$(eval $(call BuildPackage,olsrd-mod-dot-draw))
+$(eval $(call BuildPackage,olsrd-mod-bmf))
+$(eval $(call BuildPackage,olsrd-mod-dyn-gw))
+$(eval $(call BuildPackage,olsrd-mod-dyn-gw-plain))
+$(eval $(call BuildPackage,olsrd-mod-httpinfo))
+$(eval $(call BuildPackage,olsrd-mod-jsoninfo))
+$(eval $(call BuildPackage,olsrd-mod-mdns))
+$(eval $(call BuildPackage,olsrd-mod-nameservice))
+$(eval $(call BuildPackage,olsrd-mod-p2pd))
+$(eval $(call BuildPackage,olsrd-mod-pgraph))
+$(eval $(call BuildPackage,olsrd-mod-pud))
+$(eval $(call BuildPackage,olsrd-mod-quagga))
+$(eval $(call BuildPackage,olsrd-mod-secure))
+$(eval $(call BuildPackage,olsrd-mod-sgwdynspeed))
+$(eval $(call BuildPackage,olsrd-mod-txtinfo))
+$(eval $(call BuildPackage,olsrd-mod-watchdog))
diff --git a/olsrd/files/olsrd.config b/olsrd/files/olsrd.config
new file mode 100644 (file)
index 0000000..9a19eb9
--- /dev/null
@@ -0,0 +1,26 @@
+config olsrd
+       # uncomment the following line to use a custom config file instead:
+       #option config_file '/etc/olsrd.conf'
+
+       option IpVersion '4'
+
+config LoadPlugin
+       option library 'olsrd_arprefresh.so.0.1'
+
+config LoadPlugin
+       option library 'olsrd_dyn_gw.so.0.5'
+
+config LoadPlugin
+       option library 'olsrd_httpinfo.so.0.1'
+       option port '1978'
+       list Net '0.0.0.0 0.0.0.0'
+
+config LoadPlugin
+       option library 'olsrd_nameservice.so.0.3'
+
+config LoadPlugin
+       option library 'olsrd_txtinfo.so.0.1'
+       option accept '0.0.0.0'
+
+config Interface
+       list interface 'wlan'
diff --git a/olsrd/files/olsrd.init b/olsrd/files/olsrd.init
new file mode 100644 (file)
index 0000000..1172623
--- /dev/null
@@ -0,0 +1,850 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2008-2012 OpenWrt.org
+
+START=65
+
+SERVICE_DAEMONIZE=1
+SERVICE_WRITE_PID=1
+
+CONF=/var/etc/olsrd.conf
+PID=/var/run/olsrd.pid
+PID6=/var/run/olsrd.ipv6.pid
+
+OLSRD_OLSRD_SCHEMA='ignore:internal config_file:internal DebugLevel=0 AllowNoInt=yes'
+OLSRD_IPCCONNECT_SCHEMA='ignore:internal Host:list Net:list2'
+OLSRD_LOADPLUGIN_SCHEMA='ignore:internal library:internal Host4:list Net4:list2 Host:list Net:list2 Host6:list Net6:list2 Ping:list redistribute:list NonOlsrIf:list name:list lat lon latlon_infile HNA:list2 hosts:list2'
+OLSRD_INTERFACE_SCHEMA='ignore:internal interface:internal AutoDetectChanges:bool'
+OLSRD_INTERFACE_DEFAULTS_SCHEMA='AutoDetectChanges:bool'
+
+T='    '
+N='
+'
+
+log()
+{
+       logger -t olsrd -p daemon.info -s "$1"
+}
+
+validate_varname() {
+       local varname="$1"
+       [ -z "$varname" -o "$varname" != "${varname%%[!A-Za-z0-9_]*}" ] && return 1
+       return 0
+}
+
+validate_olsrd_option() {
+       local str="$1"
+       [ -z "$str" -o "$str" != "${str%%[!     0-9A-Za-z./|:_-]*}" ] && return 1
+       return 0
+}
+
+system_config() {
+       local cfg="$1"
+       local cfgt
+       local hostname
+       local latlon
+
+       config_get cfgt "$cfg" TYPE
+
+       if [ "$cfgt" = "system" ]; then
+               config_get hostname "$cfg" hostname
+               hostname="${hostname:-OpenWrt}"
+               SYSTEM_HOSTNAME="$hostname"
+       fi
+
+       if [ -z "$SYSTEM_LAT" -o -z "$SYSTEM_LON" ]; then
+               config_get latlon "$cfg" latlon
+               IFS=" ${T}${N},"
+               set -- $latlon
+               unset IFS
+               SYSTEM_LAT="$1"
+               SYSTEM_LON="$2"
+       fi
+
+       if [ -z "$SYSTEM_LAT" -o -z "$SYSTEM_LON" ]; then
+               config_get latlon "$cfg" latitude
+               SYSTEM_LAT="$latlon"
+               config_get latlon "$cfg" longitude
+               SYSTEM_LON="$latlon"
+       fi
+}
+
+olsrd_find_config_file() {
+       local cfg="$1"
+       validate_varname "$cfg" || return 0
+
+       config_get_bool ignore "$cfg" ignore 0
+       [ "$ignore" -ne 0 ] && return 0
+       config_get OLSRD_CONFIG_FILE "$cfg" config_file
+
+       return 0
+}
+
+warning_invalid_value() {
+       local funcname="warning_invalid_value"
+       local package="$1"
+       validate_varname "$package" || package=
+       local config="$2"
+       validate_varname "$config" || config=
+       local option="$3"
+       validate_varname "$option" || option=
+
+       if [ -n "$package" -a -n "$config" ]; then
+               log "$funcname() in option '$package.$config${option:+.}$option', skipped"
+       else
+               log "$funcname() skipped"
+       fi
+
+       return 0
+}
+
+olsrd_write_option() {
+       local param="$1"
+       local cfg="$2"
+       validate_varname "$cfg" || return 1
+       local option="$3"
+       validate_varname "$option" || return 1
+       local value="$4"
+       local option_type="$5"
+
+       if [ "$option_type" = bool ]; then
+               case "$value" in
+                       1|on|true|enabled|yes) value=yes;;
+                       0|off|false|disabled|no) value=no;;
+                       *) warning_invalid_value olsrd "$cfg" "$option"; return 1;;
+               esac
+       fi
+
+       if ! validate_olsrd_option "$value"; then
+               warning_invalid_value olsrd "$cfg" "$option"
+               return 1
+       fi
+
+       if [ "$value" != "${value%%[G-Zg-z_-]*}" ]; then
+               if [ "$option" != "Ip6AddrType" -a "$option" != "LinkQualityMult" -a "$value" != "yes" -a "$value" != "no" ]; then
+                       value="\"$value\""
+               fi
+       fi
+
+       echo -n "${N}$param$option $value"
+
+       return 0
+}
+
+olsrd_write_plparam() {
+       local funcname="olsrd_write_plparam"
+       local param="$1"
+       local cfg="$2"
+       validate_varname "$cfg" || return 1
+       local option="$3"
+       validate_varname "$option" || return 1
+       local value="$4"
+       local option_type="$5"
+       local _option
+
+       if [ "$option_type" = bool ]; then
+               case "$value" in
+                       1|on|true|enabled|yes) value=yes;;
+                       0|off|false|disabled|no) value=no;;
+                       *) warning_invalid_value olsrd "$cfg" "$option"; return 1;;
+               esac
+       fi
+
+       if ! validate_olsrd_option "$value"; then
+               warning_invalid_value olsrd "$cfg" "$option"
+               return 1
+       fi
+
+       IFS='-_'
+       set -- $option
+       option="$*"
+       unset IFS
+       _option="$option"
+       if [ "$option" = 'hosts' ]; then
+               set -- $value
+               option="$1"
+               shift
+               value="$*"
+       fi
+       if [ "$option" = 'NonOlsrIf' ]; then
+               if validate_varname "$value"; then
+                       if network_get_device ifname "$value"; then
+                               log "$funcname() Info: mdns Interface '$value' ifname '$ifname' found"
+                       else
+                               log "$funcname() Warning: mdns Interface '$value' not found, skipped"
+                       fi
+               else
+                       warning_invalid_value olsrd "$cfg" "NonOlsrIf"
+               fi
+               [ -z "$ifname" ] || value=$ifname
+       fi
+
+       echo -n "${N}${param}PlParam \"$option\" \"$value\""
+
+       return 0
+}
+
+config_update_schema() {
+       unset IFS
+       local schema_varname="$1"
+       validate_varname "$schema_varname" || return 1
+       local command="$2"
+       validate_varname "$command" || return 1
+       local option="$3"
+       validate_varname "$option" || return 1
+       local value="$4"
+       local schema
+       local cur_option
+
+       case "$varname" in
+               *_LENGTH) return 0;;
+               *_ITEM*) return 0;;
+       esac
+
+       eval "export -n -- \"schema=\${$schema_varname}\""
+
+       for cur_option in $schema; do
+               [ "${cur_option%%[:=]*}" = "$option" ] && return 0
+       done
+
+       if [ "$command" = list ]; then
+               set -- $value
+               if [ "$#" -ge "3" ]; then
+                       schema_entry="$option:list3"
+               elif [ "$#" -ge "2" ]; then
+                       schema_entry="$option:list2"
+               else
+                       schema_entry="$option:list"
+               fi
+       else
+               schema_entry="$option"
+       fi
+
+       append "$schema_varname" "$schema_entry"
+
+       return 0
+}
+
+config_write_options() {
+       local funcname="config_write_options"
+       unset IFS
+       local schema="$1"
+       local cfg="$2"
+       validate_varname "$cfg" || return 1
+       local write_func="$3"
+       [ -z "$write_func" ] && output_func=echo
+       local write_param="$4"
+
+       local schema_entry
+       local option
+       local option_length
+       local option_type
+       local default
+       local value
+       local list_size
+       local list_item
+       local list_value
+       local i
+       local position
+       local speed
+       local list_speed_vars="HelloInterval HelloValidityTime TcInterval TcValidityTime MidInterval MidValidityTime HnaInterval HnaValidityTime"
+
+       get_value_for_entry()
+       {
+               local schema_entry="$1"
+
+               default="${schema_entry#*[=]}"
+               [ "$default" = "$schema_entry" ] && default=
+               option="${schema_entry%%[=]*}"
+
+               IFS=':'; set -- $option; unset IFS
+               option="$1"
+               option_type="$2"
+
+               validate_varname "$option" || return 1
+               [ -z "$option_type" ] || validate_varname "$option_type" || return 1
+               [ "$option_type" = internal ] && return 1
+
+               config_get value "$cfg" "$option"
+               [ "$option" = "speed" ] && return 1
+
+               return 0
+       }
+
+       already_in_schema()
+       {
+               case " $schema " in
+                       *" $1 "*)
+                               return 0
+                       ;;
+                       *)
+                               return 1
+                       ;;
+               esac
+       }
+
+       already_in_schema "speed" && {
+               get_value_for_entry "speed"
+
+               if [ 2>/dev/null $value -gt 0 -a $value -le 20 ]; then
+                       speed="$value"
+               else
+                       log "$funcname() Warning: invalid speed-value: '$value' - allowed integers: 1...20, fallback to 6"
+                       speed=6
+               fi
+
+               for schema_entry in $list_speed_vars; do {
+                       already_in_schema "$schema_entry" || schema="$schema $schema_entry"
+               } done
+       }
+
+       for schema_entry in $schema; do
+               if [ -n "$speed" ]; then                # like sven-ola freifunk firmware fff-1.7.4
+                       case "$schema_entry" in
+                               HelloInterval)
+                                       value="$(( $speed / 2 + 1 )).0"
+                               ;;
+                               HelloValidityTime)
+                                       value="$(( $speed * 25 )).0"
+                               ;;
+                               TcInterval)     # todo: not fisheye? -> $(( $speed * 2 ))
+                                       value=$(( $speed / 2 ))
+                                       [ $value -eq 0 ] && value=1
+                                       value="$value.0"
+                               ;;
+                               TcValidityTime)
+                                       value="$(( $speed * 100 )).0"
+                               ;;
+                               MidInterval)
+                                       value="$(( $speed * 5 )).0"
+                               ;;
+                               MidValidityTime)
+                                       value="$(( $speed * 100 )).0"
+                               ;;
+                               HnaInterval)
+                                       value="$(( $speed * 2 )).0"
+                               ;;
+                               HnaValidityTime)
+                                       value="$(( $speed * 25 )).0"
+                               ;;
+                               *)
+                                       get_value_for_entry "$schema_entry" || continue
+                               ;;
+                       esac
+
+                       is_speed_var()
+                       {
+                               case " $list_speed_vars " in
+                                       *" $1 "*)
+                                               return 0
+                                       ;;
+                                       *)
+                                               return 1
+                                       ;;
+                               esac
+                       }
+
+                       is_speed_var "$schema_entry" && option="$schema_entry"
+               else
+                       get_value_for_entry "$schema_entry" || continue
+               fi
+
+               if [ -z "$value" ]; then
+                       IFS='+'
+                       set -- $default
+                       unset IFS
+                       value=$*
+               elif [ "$value" = '-' -a -n "$default" ]; then
+                       continue
+               fi
+
+               [ -z "$value" ] && continue
+
+               case "$option_type" in
+                       list) list_size=1;;
+                       list2) list_size=2;;
+                       list3) list_size=3;;
+                       *) list_size=0;;
+               esac
+
+               if [ "$list_size" -gt 0 ]; then
+                       config_get option_length "$cfg" "${option}_LENGTH"
+                       if [ -n "$option_length" ]; then
+                               i=1
+                               while [ "$i" -le "$option_length" ]; do
+                                       config_get list_value "$cfg" "${option}_ITEM$i"
+                                       "$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type" || break
+                                       i=$((i + 1))
+                               done
+                       else
+                               list_value=
+                               i=0
+                               for list_item in $value; do
+                                       append "list_value" "$list_item"
+                                       i=$((i + 1))
+                                       position=$((i % list_size))
+                                       if [ "$position" -eq 0 ]; then
+                                               "$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type" || break
+                                               list_value=
+                                       fi
+                               done
+                               [ "$position" -ne 0 ] && "$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type"
+                       fi
+               else
+                       "$write_func" "$write_param" "$cfg" "$option" "$value" "$option_type"
+               fi
+       done
+
+       return 0
+}
+
+olsrd_write_olsrd() {
+       local cfg="$1"
+       validate_varname "$cfg" || return 0
+       local ignore
+
+       config_get_bool ignore "$cfg" ignore 0
+       [ "$ignore" -ne 0 ] && return 0
+
+       [ "$OLSRD_COUNT" -gt 0 ] && return 0
+
+       config_get ipversion "$cfg" IpVersion
+       if [ "$ipversion" = "6and4" ]; then
+               OLSRD_IPVERSION_6AND4=1
+               config_set "$cfg" IpVersion '6'
+       fi
+       config_get smartgateway "$cfg" SmartGateway
+       config_get smartgatewayuplink "$cfg" SmartGatewayUplink
+
+       config_write_options "$OLSRD_OLSRD_SCHEMA" "$cfg" olsrd_write_option
+       echo
+       OLSRD_COUNT=$((OLSRD_COUNT + 1))
+       return 0
+}
+
+olsrd_write_ipcconnect() {
+       local cfg="$1"
+       validate_varname "$cfg" || return 0
+       local ignore
+
+       config_get_bool ignore "$cfg" ignore 0
+       [ "$ignore" -ne 0 ] && return 0
+
+       [ "$IPCCONNECT_COUNT" -gt 0 ] && return 0
+
+       echo -n "${N}IpcConnect${N}{"
+       config_write_options "$OLSRD_IPCCONNECT_SCHEMA" "$cfg" olsrd_write_option "${T}"
+       echo "${N}}"
+       IPCCONNECT_COUNT=$((IPCCONNECT_COUNT + 1))
+
+       return 0
+}
+
+olsrd_write_hna4() {
+       local cfg="$1"
+       validate_varname "$cfg" || return 0
+       local ignore
+
+       config_get_bool ignore "$cfg" ignore 0
+       [ "$ignore" -ne 0 ] && return 0
+
+       config_get netaddr "$cfg" netaddr
+       if ! validate_olsrd_option "$netaddr"; then
+               warning_invalid_value olsrd "$cfg" "netaddr"
+               return 0
+       fi
+
+       config_get netmask "$cfg" netmask
+       if ! validate_olsrd_option "$netmask"; then
+               warning_invalid_value olsrd "$cfg" "netmask"
+               return 0
+       fi
+
+       [ "$HNA4_COUNT" -le 0 ] && echo -n "${N}Hna4${N}{"
+       echo -n "${N}${T}${T}$netaddr $netmask"
+       HNA4_COUNT=$((HNA4_COUNT + 1))
+
+       return 0
+}
+
+olsrd_write_hna6() {
+       local cfg="$1"
+       validate_varname "$cfg" || return 0
+       local ignore
+
+       config_get_bool ignore "$cfg" ignore 0
+       [ "$ignore" -ne 0 ] && return 0
+
+       config_get netaddr "$cfg" netaddr
+       if ! validate_olsrd_option "$netaddr"; then
+               warning_invalid_value olsrd "$cfg" "netaddr"
+               return 0
+       fi
+
+       config_get prefix "$cfg" prefix
+       if ! validate_olsrd_option "$prefix"; then
+               warning_invalid_value olsrd "$cfg" "prefix"
+               return 0
+       fi
+
+       [ "$HNA6_COUNT" -le 0 ] && echo -n "${N}Hna6${N}{"
+       echo -n "${N}${T}${T}$netaddr $prefix"
+       HNA6_COUNT=$((HNA6_COUNT + 1))
+
+       return 0
+}
+
+olsrd_write_loadplugin() {
+       local funcname="olsrd_write_loadplugin"
+       local cfg="$1"
+       validate_varname "$cfg" || return 0
+       local ignore
+       local name
+       local suffix
+       local lat
+       local lon
+       local latlon_infile
+
+       config_get_bool ignore "$cfg" ignore 0
+       [ "$ignore" -ne 0 ] && return 0
+
+       config_get library "$cfg" library
+       if ! validate_olsrd_option "$library"; then
+               warning_invalid_value olsrd "$cfg" "library"
+               return 0
+       fi
+       if ! [ -x "/lib/$library" -o -x "/usr/lib/$library" -o -x "/usr/local/lib/$library" ]; then
+               log "$funcname() Warning: Plugin library '$library' not found, skipped"
+               return 0
+       fi
+
+       case "$library" in
+               olsrd_nameservice.*)
+                       config_get name "$cfg" name
+                       [ -z "$name" ] && config_set "$cfg" name $SYSTEM_HOSTNAME
+
+                       config_get suffix "$cfg" suffix
+                       [ -z "$suffix" ] && config_set "$cfg" suffix '.olsr'
+
+                       config_get lat "$cfg" lat
+                       config_get lon "$cfg" lon
+                       config_get latlon_infile "$cfg" latlon_infile
+                       if [ \( -z "$lat" -o -z "$lat" \) -a -z "$latlon_infile" ]; then
+                               if [ -f '/var/run/latlon.txt' ]; then
+                                       config_set "$cfg" lat ''
+                                       config_set "$cfg" lon ''
+                                       config_set "$cfg" latlon_infile '/var/run/latlon.txt'
+                               else
+                                       config_set "$cfg" lat "$SYSTEM_LAT"
+                                       config_set "$cfg" lon "$SYSTEM_LON"
+                               fi
+                       fi
+
+                       for f in latlon_file hosts_file services_file resolv_file macs_file; do
+                               config_get $f "$cfg" $f
+                       done
+
+                       [ -z "$latlon_file" ] && config_set "$cfg" latlon_file '/var/run/latlon.js'
+               ;;
+               olsrd_watchdog.*)
+                       config_get wd_file "$cfg" file
+               ;;
+       esac
+
+       echo -n "${N}LoadPlugin \"$library\"${N}{"
+       config_write_options "$OLSRD_LOADPLUGIN_SCHEMA" "$cfg" olsrd_write_plparam "${T}"
+       echo "${N}}"
+
+       return 0
+}
+
+olsrd_write_interface() {
+       local funcname="olsrd_write_interface"
+       local cfg="$1"
+       validate_varname "$cfg" || return 0
+       local ignore
+       local interfaces
+       local interface
+       local ifnames
+
+       config_get_bool ignore "$cfg" ignore 0
+       [ "$ignore" -ne 0 ] && return 0
+
+       ifnames=
+       config_get interfaces "$cfg" interface
+
+       for interface in $interfaces; do
+               if validate_varname "$interface"; then
+                       if network_get_device IFNAME "$interface"; then
+                               ifnames="$ifnames \"$IFNAME\""
+                               ifsglobal="$ifsglobal $IFNAME"
+                       else
+                               log "$funcname() Warning: Interface '$interface' not found, skipped"
+                       fi
+               else
+                       warning_invalid_value olsrd "$cfg" "interface"
+               fi
+       done
+
+       [ -z "$ifnames" ] && return 0
+
+       echo -n "${N}Interface$ifnames${N}{"
+       config_write_options "$OLSRD_INTERFACE_SCHEMA" "$cfg" olsrd_write_option "${T}"
+       echo "${N}}"
+       INTERFACES_COUNT=$((INTERFACES_COUNT + 1))
+
+       return 0
+}
+
+olsrd_write_interface_defaults() {
+       local cfg="$1"
+       validate_varname "$cfg" || return 0
+
+       echo -n "${N}InterfaceDefaults$ifnames${N}{"
+       config_write_options "$OLSRD_INTERFACE_DEFAULTS_SCHEMA" "$cfg" olsrd_write_option "${T}"
+       echo "${N}}"
+
+       return 1
+}
+
+olsrd_update_schema() {
+       local command="$1"
+       validate_varname "$command" || return 0
+       local varname="$2"
+       validate_varname "$varname" || return 0
+       local value="$3"
+       local cfg="$CONFIG_SECTION"
+       local cfgt
+       local cur_varname
+
+       config_get cfgt "$cfg" TYPE
+       case "$cfgt" in
+               olsrd) config_update_schema OLSRD_OLSRD_SCHEMA "$command" "$varname" "$value";;
+               IpcConnect) config_update_schema OLSRD_IPCCONNECT_SCHEMA "$command" "$varname" "$value";;
+               LoadPlugin) config_update_schema OLSRD_LOADPLUGIN_SCHEMA "$command" "$varname" "$value";;
+               Interface) config_update_schema OLSRD_INTERFACE_SCHEMA "$command" "$varname" "$value";;
+               InterfaceDefaults) config_update_schema OLSRD_INTERFACE_DEFAULTS_SCHEMA "$command" "$varname" "$value";;
+       esac
+
+       return 0
+}
+
+olsrd_write_config() {
+       OLSRD_IPVERSION_6AND4=0
+       OLSRD_COUNT=0
+       config_foreach olsrd_write_olsrd olsrd
+       IPCCONNECT_COUNT=0
+       config_foreach olsrd_write_ipcconnect IpcConnect
+       HNA4_COUNT=0
+       config_foreach olsrd_write_hna4 Hna4
+       [ "$HNA4_COUNT" -gt 0 ] && echo "${N}}"
+       HNA6_COUNT=0
+       config_foreach olsrd_write_hna6 Hna6
+       [ "$HNA6_COUNT" -gt 0 ] && echo "${N}}"
+       config_foreach olsrd_write_loadplugin LoadPlugin
+       INTERFACES_COUNT=0
+       config_foreach olsrd_write_interface_defaults InterfaceDefaults
+       config_foreach olsrd_write_interface Interface
+       echo
+
+       return 0
+}
+
+get_wan_ifnames()
+{
+       local wanifnames word catch_next
+
+       which ip >/dev/null || return 1
+
+       set -- $( ip route list exact 0.0.0.0/0 table all )
+       for word in $*; do
+               case "$word" in
+                       dev)
+                               catch_next="true"
+                       ;;
+                       *)
+                               [ -n "$catch_next" ] && {
+                                       case "$wanifnames" in
+                                               *" $word "*)
+                                               ;;
+                                               *)
+                                                       wanifnames="$wanifnames $word "
+                                               ;;
+                                       esac
+
+                                       catch_next=
+                               }
+                       ;;
+               esac
+       done
+
+       echo "$wanifnames"
+}
+
+olsrd_setup_smartgw_rules() {
+       local funcname="olsrd_setup_smartgw_rules"
+       # Check if ipip is installed
+       [ -e /etc/modules.d/[0-9]*-ipip ] || {
+               log "$funcname() Warning: kmod-ipip is missing. SmartGateway will not work until you install it."
+               return 1
+       }
+
+       local wanifnames="$( get_wan_ifnames )"
+
+       if [ -z "$wanifnames" ]; then
+               nowan=1
+       else
+               nowan=0
+       fi
+
+       IP4T=$(which iptables)
+       IP6T=$(which ip6tables)
+
+       # Delete smartgw firewall rules first
+       for IPT in $IP4T $IP6T; do
+               while $IPT -D forwarding_rule -o tnl_+ -j ACCEPT 2> /dev/null; do :;done
+               for IFACE in $wanifnames; do
+                       while $IPT -D forwarding_rule -i tunl0 -o $IFACE -j ACCEPT 2> /dev/null; do :; done
+               done
+               for IFACE in $ifsglobal; do
+                       while $IPT -D input_rule -i $IFACE -p 4 -j ACCEPT 2> /dev/null; do :; done
+               done
+       done
+       while $IP4T -t nat -D postrouting_rule -o tnl_+ -j MASQUERADE 2> /dev/null; do :;done
+
+       if [ "$smartgateway" == "yes" ]; then
+               log "$funcname() Notice: Inserting firewall rules for SmartGateway"
+               if [ ! "$smartgatewayuplink" == "none" ]; then
+                       if [ "$smartgatewayuplink" == "ipv4" ]; then
+                               # Allow everything to be forwarded to tnl_+ and use NAT for it
+                               $IP4T -I forwarding_rule -o tnl_+ -j ACCEPT
+                               $IP4T -t nat -I postrouting_rule -o tnl_+ -j MASQUERADE
+                               # Allow forwarding from tunl0 to (all) wan-interfaces
+                               if [ "$nowan"="0" ]; then
+                                       for IFACE in $wanifnames; do
+                                               $IP4T -A forwarding_rule -i tunl0 -o $IFACE -j ACCEPT
+                                       done
+                               fi
+                               # Allow incoming ipip on all olsr-interfaces
+                               for IFACE in $ifsglobal; do
+                                       $IP4T -I input_rule -i $IFACE -p 4 -j ACCEPT
+                               done
+                       elif [ "$smartgatewayuplink" == "ipv6" ]; then
+                               $IP6T -I forwarding_rule -o tnl_+ -j ACCEPT
+                               if [ "$nowan"="0" ]; then
+                                       for IFACE in $wanifnames; do
+                                               $IP6T -A forwarding_rule -i tunl0 -o $IFACE -j ACCEPT
+                                       done
+                               fi
+                               for IFACE in $ifsglobal; do
+                                       $IP6T -I input_rule -i $IFACE -p 4 -j ACCEPT
+                               done
+                       else
+                               for IPT in $IP4T $IP6T; do
+                                       $IPT -I forwarding_rule -o tnl_+ -j ACCEPT
+                                       $IPT -t nat -I postrouting_rule -o tnl_+ -j MASQUERADE
+                                       if [ "$nowan"="0" ]; then
+                                               for IFACE in $wanifnames; do
+                                                       $IPT -A forwarding_rule -i tunl0 -o $IFACE -j ACCEPT
+                                               done
+                                       fi
+                                       for IFACE in $ifsglobal; do
+                                               $IPT -I input_rule -i $IFACE -p 4 -j ACCEPT
+                                       done
+                               done
+                       fi
+               fi
+       fi
+}
+
+error() {
+       log "error() ${initscript}: $@"
+}
+
+start() {
+       SYSTEM_HOSTNAME=
+       SYSTEM_LAT=
+       SYSTEM_LON=
+       config_load system
+       config_foreach system_config system
+
+       option_cb() {
+               olsrd_update_schema "option" "$@"
+       }
+
+       list_cb() {
+               olsrd_update_schema "list" "$@"
+       }
+
+       . /lib/functions/network.sh
+
+       config_load olsrd
+       reset_cb
+
+       OLSRD_CONFIG_FILE=
+       config_foreach olsrd_find_config_file olsrd
+
+       if [ -z "$OLSRD_CONFIG_FILE" ]; then
+               mkdir -p -- /var/etc/
+               olsrd_write_config > /var/etc/olsrd.conf
+               if [ "$INTERFACES_COUNT" -gt 0 -a "$OLSRD_COUNT" -gt 0 ]; then
+                       OLSRD_CONFIG_FILE=/var/etc/olsrd.conf
+               fi
+       fi
+
+       [ -z "$OLSRD_CONFIG_FILE" ] && return 1
+
+       local bindv6only='0'
+       if [ "$OLSRD_IPVERSION_6AND4" -ne 0 ]; then
+               bindv6only="$(sysctl -n net.ipv6.bindv6only)"
+               sysctl -w net.ipv6.bindv6only=1 > /dev/null
+               sed -e '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/d' < "$OLSRD_CONFIG_FILE" > /var/etc/olsrd.conf.ipv6
+               sed -e 's/^IpVersion[ ][ ]*6$/IpVersion 4/' -e 's/^\t\t[A-Fa-f0-9.:]*[:][A-Fa-f0-9.:]*[ ][0-9]*$//' < "$OLSRD_CONFIG_FILE" > /var/etc/olsrd.conf.ipv4
+               rm $OLSRD_CONFIG_FILE
+
+               # some filenames should get the suffix .ipv6
+               for file in $latlon_file $hosts_file $services_file $resolv_file $macs_file $wd_file;do
+                       f=$(echo $file|sed 's/\//\\\//g')
+                       sed -i "s/$f/$f.ipv6/g" /var/etc/olsrd.conf.ipv6
+               done
+
+               SERVICE_PID_FILE="$PID6"
+               if service_check /usr/sbin/olsrd; then
+                       error "there is already an IPv6 instance of olsrd running (pid: '$(cat $PID6)'), not starting."
+               else
+                       service_start /usr/sbin/olsrd -f /var/etc/olsrd.conf.ipv6 -nofork
+               fi
+
+               SERVICE_PID_FILE="$PID"
+               if service_check /usr/sbin/olsrd; then
+                       error "there is already an IPv4 instance of olsrd running (pid: '$(cat $PID)'), not starting."
+               else
+                       service_start /usr/sbin/olsrd -f /var/etc/olsrd.conf.ipv4 -nofork
+               fi
+
+               sleep 3
+               sysctl -w net.ipv6.bindv6only="$bindv6only" > /dev/null
+
+       else
+
+               if [ "$ipversion" = "6" ]; then
+                       sed -i '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/d' "$OLSRD_CONFIG_FILE"
+               fi
+
+               SERVICE_PID_FILE="$PID"
+               if service_check /usr/sbin/olsrd; then
+                       error "there is already an IPv4 instance of olsrd running (pid: '$(cat $PID)'), not starting."
+                       return 1
+               else
+                       service_start /usr/sbin/olsrd -f "$OLSRD_CONFIG_FILE" -nofork
+               fi
+       fi
+       olsrd_setup_smartgw_rules
+}
+
+stop() {
+       SERVICE_PID_FILE="$PID"
+       service_stop /usr/sbin/olsrd
+
+       SERVICE_PID_FILE="$PID6"
+       service_stop /usr/sbin/olsrd
+}
diff --git a/olsrd/files/olsrd.pud.position.conf b/olsrd/files/olsrd.pud.position.conf
new file mode 100644 (file)
index 0000000..0ab0fb7
--- /dev/null
@@ -0,0 +1,51 @@
+#
+# OLSrd PUD plugin position configuration file
+#
+
+# GPS operating mode.
+# Values : bad, 2d, 3d
+# Default: bad
+# Note   : a value of 'bad' will make the resulting position information invalid
+#          (the mask will indicate that all other information is not present)
+#fix = bad
+
+# GPS quality indicator.
+# Values : bad, low, mid, high
+# Default: high
+#sig = high
+
+# HDOP (Horizontal Dilution Of Precision)
+# Values : floating point value
+# Default: 0.0
+# Note   : From HDOP, VDOP and PDOP are determined: VDOP = HDOP, and PDOP = sqrt(2) * HDOP.
+#hdop = 0.0
+
+# Latitude
+# Values : floating point value
+#          Unit is NMEA like latitude: ddmm.sssss (d=degrees, m=minutes, s=seconds)
+# Default: 0000.00000
+#lat = 0000.00000
+
+# Longitude
+# Values: floating point value
+#          Unit is NMEA like longitude: dddmm.sssss (d=degrees, m=minutes, s=seconds)
+# Default: 00000.00000
+#lon = 00000.00000
+
+# Elevation
+# Values: floating point value
+#         Unit is meters above the mean sea level (geoid)
+# Default: 0.0
+#elv = 0.0
+
+# Speed
+# Values: floating point value
+#         Unit is over the ground in kph
+# Default: 0.0
+#speed = 0.0
+
+# Direction/Track
+# Values: floating point value
+#         Unit is (compass) degrees
+# Default: 0.0
+#direction = 0.0
diff --git a/olsrd/files/olsrd.sgw.speed.conf b/olsrd/files/olsrd.sgw.speed.conf
new file mode 100644 (file)
index 0000000..ae795d8
--- /dev/null
@@ -0,0 +1,14 @@
+#
+# OLSrd Smart Gateway uplink speed configuration file
+#
+
+
+#
+# Upstream speed in kilobit/s
+# Default: 128
+#upstream=128
+
+#
+# Downstream speed in kilobit/s
+# Default: 1024
+#downstream=1024
diff --git a/olsrd/files/olsrd_secure_key b/olsrd/files/olsrd_secure_key
new file mode 100644 (file)
index 0000000..4a7d725
--- /dev/null
@@ -0,0 +1 @@
+1234567890123456
\ No newline at end of file