Merge branch 'master' into bmx6_testing
authorAxel Neumann <neumann@cgws.de>
Wed, 27 Nov 2013 10:55:52 +0000 (11:55 +0100)
committerAxel Neumann <neumann@cgws.de>
Wed, 27 Nov 2013 10:55:52 +0000 (11:55 +0100)
30 files changed:
MAINTAINERS [new file with mode: 0644]
ahcpd/Makefile [new file with mode: 0644]
ahcpd/files/ahcpd.config [new file with mode: 0644]
ahcpd/files/ahcpd.init [new file with mode: 0644]
alfred/Config.in
alfred/Makefile
alfred/files/alfred.config
alfred/files/alfred.init
alfred/files/bat-hosts.lua [new file with mode: 0644]
alfred/patches/0001-alfred-gpsd-add-lm-to-linker-flags-for-libgps.patch [new file with mode: 0644]
babeld/Makefile [new file with mode: 0644]
babeld/files/babeld.conf [new file with mode: 0644]
babeld/files/babeld.config [new file with mode: 0644]
babeld/files/babeld.init [new file with mode: 0755]
batman-adv/Makefile
batman-adv/patches/0001-batman-adv-avoid-openwrt_metadata_stripping [deleted file]
batman-adv/patches/0001-batman-adv-fix-potential-kernel-paging-errors-for-un.patch [deleted file]
bird/Makefile [new file with mode: 0644]
bird/files/bird4.conf [new file with mode: 0644]
bird/files/bird4.init [new file with mode: 0644]
bird/files/bird4loop [new file with mode: 0644]
bird/files/bird6.conf [new file with mode: 0644]
bird/files/bird6.init [new file with mode: 0644]
bird/files/bird6loop [new file with mode: 0644]
luci-app-bmx6/files/usr/lib/lua/luci/view/bmx6/nodes_j.htm
ndppd/Makefile
ndppd/patches/0001-Fix-issue-2-ndppd-d-monizes-too-early.patch [new file with mode: 0644]
olsrd/Makefile
olsrd/files/olsrd.hotplug.sh [new file with mode: 0755]
olsrd/files/olsrd.init

diff --git a/MAINTAINERS b/MAINTAINERS
new file mode 100644 (file)
index 0000000..f2f6d64
--- /dev/null
@@ -0,0 +1,23 @@
+#  _______                     ________        __
+# |       |.-----.-----.-----.|  |  |  |.----.|  |_
+# |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
+# |_______||   __|_____|__|__||________||__|  |____|
+#          |__| W I R E L E S S   F R E E D O M
+#
+# People listed here are managing the OpenWrt routing feed,
+# use alphabetical order when updating the list.
+
+Axel "axn" Neumann <neumann@cgws.de>
+Bastian Bittorf <bittorf@bluebottle.com>
+Corinna "Elektra" Aichele <onelektra@gmx.net>
+Gabriel Kerneis <gabriel@kerneis.info>
+Gui Iribarren <gui@altermundi.net>
+Jo-Philipp Wich <jow@openwrt.org>
+Luka Perkov <luka@openwrt.org>
+Marek Lindner <mareklindner@neomailbox.ch>
+Moritz Warning <moritzwarning@web.de>
+Nicolás Echániz <nicoechaniz@altermundi.net>
+Pau Escrich <pau@dabax.net>
+Saverio Proto <zioproto@gmail.com>
+Simon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de>
+Vasilis "acinonyx" Tsiligiannis <acinonyx@openwrt.gr>
diff --git a/ahcpd/Makefile b/ahcpd/Makefile
new file mode 100644 (file)
index 0000000..38c3dac
--- /dev/null
@@ -0,0 +1,53 @@
+# 
+# Copyright (C) 2007-2011 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:=ahcpd
+PKG_VERSION:=0.53
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://www.pps.univ-paris-diderot.fr/~jch/software/files/
+PKG_MD5SUM:=a1a610bf20965aa522cd766bf3d5829a
+
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/ahcpd
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=Ad-Hoc Configuration Protocol daemon
+  URL:=http://www.pps.univ-paris-diderot.fr/~jch/software/ahcp/
+  MAINTAINER:=Gabriel Kerneis <gabriel@kerneis.info>
+  DEPENDS:=+kmod-ipv6 +ip +librt
+endef
+
+define Package/ahcpd/description
+ Ahcpd is a daemon for configuring an IPv6 network using the Ad-Hoc
+ Configuration Protocol (AHCP).  AHCP is designed for wireless mesh
+ networks, where IPv6 autoconfiguration and DHCPv6 do not work, but may
+ also be used on wired networks.
+endef
+
+define Package/ahcpd/conffiles
+/etc/config/ahcpd
+endef
+
+define Package/ahcpd/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_DIR) $(1)/etc/ahcp
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/ahcp-config.sh $(1)/etc/ahcp/
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/ahcpd $(1)/usr/sbin/
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) ./files/ahcpd.config $(1)/etc/config/ahcpd
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/ahcpd.init $(1)/etc/init.d/ahcpd
+endef
+
+$(eval $(call BuildPackage,ahcpd))
diff --git a/ahcpd/files/ahcpd.config b/ahcpd/files/ahcpd.config
new file mode 100644 (file)
index 0000000..0996251
--- /dev/null
@@ -0,0 +1,32 @@
+package ahcpd
+
+config ahcpd
+       # Choose ahcp mode: client (default), server or forwarder
+       ## option 'mode' 'client'
+       # Uncomment the following lines to enable ahcpd on the desired
+       # interfaces.
+       ## list 'interface' 'lan'
+       ## list 'interface' 'wlan'
+
+       # The following only makes sense in 'server' mode.
+       # Tweak to suit your needs.
+       ## list 'prefix' 'fde6:20f5:c9ac:358::/64'
+       ## list 'prefix' '192.168.4.128/25'
+       ## list 'name_server' 'fde6:20f5:c9ac:358::1'
+       ## list 'name_server' '192.168.4.1'
+       ## list 'ntp_server' '192.168.4.2'
+       ## option 'lease_dir' '/var/lib/leases'
+
+       # option 'id_file' '/var/lib/ahcp-unique-id'
+       # option 'log_file' '/var/log/ahcpd.log'
+       # The configuration file is not necessary since you can configure
+       # everything from this file.  But still, you might prefer using it.
+       ## option 'conf_file' '/etc/ahcp/ahcp.conf'
+
+       # option 'multicast_address' 'ff02::cca6:c0f9:e182:5359'
+       # option 'port' '5359'
+       # option 'ipv4_only' 'false'
+       # option 'ipv6_only' 'false'
+       # option 'lease_time' '3666'
+       # option 'debug' '1'
+
diff --git a/ahcpd/files/ahcpd.init b/ahcpd/files/ahcpd.init
new file mode 100644 (file)
index 0000000..dee21c4
--- /dev/null
@@ -0,0 +1,109 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2007-2011 OpenWrt.org
+
+START=71
+
+SERVICE_USE_PID=1
+
+EXTRA_COMMANDS="status"
+EXTRA_HELP="        status Print ahcpd's status to the log file."
+
+append_bool() {
+       local section="$1"
+       local option="$2"
+       local value="$3"
+       local _loctmp
+       config_get_bool _loctmp "$section" "$option" 0
+       [ "$_loctmp" -gt 0 ] && append args "$value"
+}
+
+append_parm() {
+       local section="$1"
+       local option="$2"
+       local switch="$3"
+       local _loctmp
+       config_get _loctmp "$section" "$option"
+       [ -z "$_loctmp" ] && return 0
+       append args "$switch $_loctmp"
+}
+
+append_stmt() {
+       local name="$1"
+       local switch="$2"
+       append args "-C '$switch $name'"
+}
+
+append_opt_stmt() {
+       local section="$1"
+       local option="$2"
+       local switch="$3"
+       local _loctmp
+       config_get _loctmp "$section" "$option"
+       [ -z "$_loctmp" ] && return 0
+       append args "-C '$switch $_loctmp'"
+}
+
+ahcp_addif() {
+       local ifname=$(uci_get_state network "$1" ifname "$1")
+       append interfaces "$ifname"
+}
+
+ahcp_server() {
+       local cfg="$1"
+
+       append_opt_stmt "$cfg" 'mode' 'mode'
+       append_opt_stmt "$cfg" 'lease_dir' 'lease-dir'
+       config_list_foreach "$cfg" 'prefix' append_stmt 'prefix'
+       config_list_foreach "$cfg" 'name_server' append_stmt 'name-server'
+       config_list_foreach "$cfg" 'ntp_server' append_stmt 'ntp-server'
+
+       append_parm "$cfg" 'id_file' '-i'
+       append_parm "$cfg" 'log_file' '-L'
+}
+
+ahcp_config() {
+       local cfg="$1"
+       local interface
+       local _loctmp
+
+       config_list_foreach "$cfg" 'interface' ahcp_addif
+
+       # Add interfaces with "option proto ahcp" in /etc/config/network
+       # (only for client mode)
+       config_get _loctmp "$cfg" "mode"
+       if [ -z "$_loctmp" -o "$_loctmp" = "client" ]; then
+               for interface in $(uci -P /var/state show network|grep proto=ahcp|cut -d. -f2); do
+                       ahcp_addif $interface
+               done
+       fi
+
+       append_bool "$cfg" 'ipv4_only' '-4'
+       append_bool "$cfg" 'ipv6_only' '-6'
+       append_bool "$cfg" 'no_dns' '-N'
+
+       append_parm "$cfg" 'multicast_address' '-m'
+       append_parm "$cfg" 'port' '-p'
+       append_parm "$cfg" 'lease_time' '-t'
+       append_parm "$cfg" 'debug' '-d'
+       append_parm "$cfg" 'conf_file' '-c'
+       append_parm "$cfg" 'script' '-s'
+}
+
+start() {
+       mkdir -p /var/lib
+       config_load ahcpd
+       unset args
+       unset interfaces
+       config_foreach ahcp_config ahcpd
+       config_foreach ahcp_server ahcpd
+       [ -z "$interfaces" ] && return 0
+       eval "service_start /usr/sbin/ahcpd -D $args $interfaces"
+}
+
+stop() {
+       service_stop /usr/sbin/ahcpd
+}
+
+status() {
+       SERVICE_SIG="USR1" service_signal /usr/sbin/ahcpd
+}
index fd664ca4e37eb0b57f10810acae149876323970b..97f9ea21f8b67ad8266462d36a2a203b0f78e0ae 100644 (file)
@@ -1,7 +1,22 @@
+config ALFRED_NEEDS_lua
+       bool
+
+config ALFRED_NEEDS_libgps
+       bool
 
 config PACKAGE_ALFRED_VIS
        bool "enable vis server for alfred"
        depends on PACKAGE_alfred
        default y
 
+config PACKAGE_ALFRED_BATHOSTS
+       bool "enable autogeneration of /etc/bat-hosts"
+       depends on PACKAGE_alfred
+       select ALFRED_NEEDS_lua
+       default n
 
+config PACKAGE_ALFRED_GPSD
+       bool "enable gpsd service for alfred"
+       depends on PACKAGE_alfred
+       select ALFRED_NEEDS_libgps
+       default n
index db9c71f106ec21d27f6aadd820b712295fe7f24b..ffc80267066bdc05a74e15581885acc3eceff927 100644 (file)
@@ -11,9 +11,9 @@ include $(TOPDIR)/rules.mk
 # The latest alfred git hash in PKG_REV can be obtained from http://git.open-mesh.org/alfred.git
 #
 PKG_NAME:=alfred
-PKG_VERSION:=2013.3.0
-PKG_RELEASE:=0
-PKG_MD5SUM:=018ef6262cdd11e900af31d71a864b13
+PKG_VERSION:=2013.4.0
+PKG_RELEASE:=1
+PKG_MD5SUM:=3891697e127b1037cfc9349fd96e9993
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://downloads.open-mesh.org/batman/releases/batman-adv-$(PKG_VERSION)
@@ -27,7 +27,9 @@ define Package/alfred
   SECTION:=net
   CATEGORY:=Network
   TITLE:=A.L.F.R.E.D. - Almighty Lightweight Fact Remote Exchange Daemon
-  DEPENDS:= +libc +IPV6:kmod-ipv6 +librt
+  DEPENDS:= +libc +IPV6:kmod-ipv6 +librt \
+         +ALFRED_NEEDS_lua:lua \
+         +ALFRED_NEEDS_libgps:libgps
 endef
 
 define Package/alfred/description
@@ -55,7 +57,8 @@ define Package/alfred/config
 endef
 
 MAKE_ALFRED_FLAGS=\
-       CONFIG_ALFRED_VIS=$(if $(CONFIG_PACKAGE_ALFRED_VIS),y,n)
+       CONFIG_ALFRED_VIS=$(if $(CONFIG_PACKAGE_ALFRED_VIS),y,n) \
+       CONFIG_ALFRED_GPSD=$(if $(CONFIG_PACKAGE_ALFRED_GPSD),y,n)
 
 TARGET_CFLAGS  += -ffunction-sections -fdata-sections -flto
 TARGET_LDFLAGS += -Wl,--gc-sections -fuse-linker-plugin
@@ -69,11 +72,14 @@ endef
 define Package/alfred/install
        $(INSTALL_DIR) $(1)/usr/sbin
        cp -fpR  $(PKG_BUILD_DIR)/alfred $(1)/usr/sbin/
-       [ "x$(CONFIG_PACKAGE_ALFRED_VIS)" == "xy" ] && cp -fpR  $(PKG_BUILD_DIR)/vis/vis $(1)/usr/sbin/ ; true
+       [ "x$(CONFIG_PACKAGE_ALFRED_VIS)" == "xy" ] && cp -fpR  $(PKG_BUILD_DIR)/vis/batadv-vis $(1)/usr/sbin/ ; true
+       [ "x$(CONFIG_PACKAGE_ALFRED_GPSD)" == "xy" ] && cp -fpR  $(PKG_BUILD_DIR)/vis/alfred-gpsd $(1)/usr/sbin/ ; true
        $(INSTALL_DIR) $(1)/etc/init.d
        $(INSTALL_BIN) ./files/alfred.init $(1)/etc/init.d/alfred
        $(INSTALL_DIR) $(1)/etc/config
        $(INSTALL_DATA) ./files/alfred.config $(1)/etc/config/alfred
+       $(INSTALL_DIR) $(1)/etc/alfred
+       [ "x$(CONFIG_PACKAGE_ALFRED_BATHOSTS)" == "xy" ] && $(INSTALL_BIN) ./files/bat-hosts.lua $(1)/etc/alfred/bat-hosts.lua ; true
 endef
 
 $(eval $(call BuildPackage,alfred))
index b8fa9b2882d32161081c68a610679a9333fd7441..9d3fff6801ad1a0272d8af301e0129090010dcea 100644 (file)
@@ -3,5 +3,6 @@ config 'alfred' 'alfred'
        option mode 'master'
        option batmanif 'bat0'
        option start_vis '1'
+       option run_facters '1'
 # REMOVE THIS LINE TO ENABLE ALFRED
        option disabled '1'
index 56818d84ccb5c91815c934a857527b7ecec82f20..e52a7bd48b1eb3de7f1cd08bd5495979761a664a 100755 (executable)
@@ -11,6 +11,7 @@ START=99
 STOP=99
 alfred_args=""
 vis_args=""
+facters_dir="/etc/alfred"
 pid_file_alfred="/var/run/alfred.pid"
 pid_file_vis="/var/run/vis.pid"
 enable=0
@@ -48,6 +49,8 @@ alfred_start()
                 append vis_args "-i $batmanif -s"
         fi
 
+       config_get_bool run_facters "$section" run_facters 0
+
        return 0
 }
 
@@ -63,12 +66,20 @@ start()
        SERVICE_PID_FILE="$pid_file_alfred"
        service_start /usr/sbin/alfred ${alfred_args}
 
-        if [ "$vis_enable" = "0" ]; then
-                exit 0
-        fi
-        echo "${initscript}: starting vis"
-       SERVICE_PID_FILE="$pid_file_vis"
-        service_start /usr/sbin/vis ${vis_args}
+       if [ "$vis_enable" = "1" ]; then
+               echo "${initscript}: starting vis"
+               SERVICE_PID_FILE="$pid_file_vis"
+               service_start /usr/sbin/vis ${vis_args}
+       fi
+
+       if [ "$run_facters" = "1" ]; then
+               ( for file in $facters_dir/* ; do [ -x $file ] && $file ; done )
+               if ! ( grep -q "for file in $facters_dir/\* ; do " /etc/crontabs/root 2>/dev/null ) ; then
+                       echo "*/5 * * * * ( for file in $facters_dir/* ; do [ -x \$file ] && \$file ; done )" >> /etc/crontabs/root
+                       /etc/init.d/cron enable
+                       /etc/init.d/cron restart
+               fi
+       fi
 }
 
 stop()
@@ -77,5 +88,6 @@ stop()
        service_stop /usr/sbin/alfred
        SERVICE_PID_FILE="$pid_file_vis"
        [ -x /usr/sbin/vis ] && service_stop /usr/sbin/vis
-
+       sed "\|for file in $facters_dir/\* ; do |d" -i /etc/crontabs/root
+       /etc/init.d/cron restart
 }
diff --git a/alfred/files/bat-hosts.lua b/alfred/files/bat-hosts.lua
new file mode 100644 (file)
index 0000000..8648caf
--- /dev/null
@@ -0,0 +1,107 @@
+#!/usr/bin/lua
+
+local type_id = 64 -- bat-hosts
+
+function get_hostname()
+  local hostfile = io.open("/proc/sys/kernel/hostname", "r")
+  local ret_string = hostfile:read()
+  hostfile:close()
+  return ret_string
+end
+
+function get_interfaces_names()
+  local ret = {}
+
+  for name in io.popen("ls -1 /sys/class/net/"):lines() do
+    table.insert(ret, name)
+  end
+
+  return ret
+end
+
+function get_interface_address(name)
+  local addressfile = io.open("/sys/class/net/"..name.."/address", "r")
+  local ret_string = addressfile:read()
+  addressfile:close()
+  return ret_string
+end
+
+
+local function generate_bat_hosts()
+-- get hostname and interface macs/names
+-- then return a table containing valid bat-hosts lines
+  local n, i
+  local ifaces, ret = {}, {}
+
+  local hostname = get_hostname()
+
+  for n, i in ipairs(get_interfaces_names()) do
+    local address = get_interface_address(i)
+    if not ifaces[address] then ifaces[address] = i end
+  end
+
+  for mac, iname in pairs(ifaces) do
+    if mac:match("^%x%x:%x%x:%x%x:%x%x:%x%x:%x%x$") and not mac:match("00:00:00:00:00:00") then
+      table.insert(ret, mac.." "..hostname.."_"..iname.."\n")
+    end
+  end
+
+  return ret
+end
+
+local function publish_bat_hosts()
+-- pass a raw chunk of data to alfred
+  local fd = io.popen("alfred -s " .. type_id, "w")
+  if fd then
+    local ret = generate_bat_hosts()
+    if ret then
+      fd:write(table.concat(ret))
+    end
+    fd:close()
+  end
+end
+
+local function write_bat_hosts(rows)
+  local content = { "### /tmp/bat-hosts generated by alfred-bat-hosts\n",
+                    "### /!\\ This file is overwritten every 5 minutes /!\\\n",
+                    "### (To keep manual changes, replace /etc/bat-hosts symlink with a static file)\n" }
+
+  -- merge the chunks from all nodes, de-escaping newlines
+  for _, row in ipairs(rows) do
+    local node, value = unpack(row)
+    table.insert(content, "# Node ".. node .. "\n")
+    table.insert(content, value:gsub("\x0a", "\n") .. "\n")
+  end
+
+  -- write parsed content down to disk
+  local fd = io.open("/tmp/bat-hosts", "w")
+  if fd then
+    fd:write(table.concat(content))
+    fd:close()
+  end
+
+  -- try to make a symlink in /etc pointing to /tmp,
+  -- if it exists, ln will do nothing.
+  os.execute("ln -ns /tmp/bat-hosts /etc/bat-hosts 2>/dev/null")
+end
+
+local function receive_bat_hosts()
+-- read raw chunks from alfred, convert them to a nested table and call write_bat_hosts
+  local fd = io.popen("alfred -r " .. type_id)
+    --[[ this command returns something like
+    { "54:e6:fc:b9:cb:37", "00:11:22:33:44:55 ham_wlan0\x0a00:22:33:22:33:22 ham_eth0\x0a" },
+    { "90:f6:52:bb:ec:57", "00:22:33:22:33:23 spam\x0a" },
+    ]]--
+
+  if fd then
+    local output = fd:read("*a")
+    if output then
+      assert(loadstring("rows = {" .. output .. "}"))()
+      write_bat_hosts(rows)
+    end
+    fd:close()
+  end
+end
+
+publish_bat_hosts()
+receive_bat_hosts()
diff --git a/alfred/patches/0001-alfred-gpsd-add-lm-to-linker-flags-for-libgps.patch b/alfred/patches/0001-alfred-gpsd-add-lm-to-linker-flags-for-libgps.patch
new file mode 100644 (file)
index 0000000..3be7169
--- /dev/null
@@ -0,0 +1,33 @@
+From dbaaf2b294af120e42a0e95644640b128044a568 Mon Sep 17 00:00:00 2001
+From: Simon Wunderlich <sw@simonwunderlich.de>
+Date: Wed, 23 Oct 2013 01:17:36 +0200
+Subject: [PATCH] alfred-gpsd: add -lm to linker flags for libgps
+
+Appearently applications using libgps must link -lm themselves. A patch
+was submitted [1] to change this unusual behaviour upstream, but was
+never applied. Therefore link to -lm to alfred-gpsd too as this should
+not hurt anyway.
+
+[1] https://lists.berlios.de/pipermail/gpsd-dev/2011-August/009451.html
+
+Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
+---
+ gpsd/Makefile |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gpsd/Makefile b/gpsd/Makefile
+index 9b21652..92e690f 100644
+--- a/gpsd/Makefile
++++ b/gpsd/Makefile
+@@ -49,7 +49,7 @@ ifeq ($(origin LIBGPS_CFLAGS) $(origin LIBGPS_LDLIBS), undefined undefined)
+     $(error No $(LIBGPS_NAME) development libraries found!)
+   endif
+   LIBGPS_CFLAGS += $(shell $(PKG_CONFIG) --cflags $(LIBGPS_NAME))
+-  LIBGPS_LDLIBS +=  $(shell $(PKG_CONFIG) --libs $(LIBGPS_NAME))
++  LIBGPS_LDLIBS +=  $(shell $(PKG_CONFIG) --libs $(LIBGPS_NAME)) -lm
+ endif
+ CFLAGS += $(LIBGPS_CFLAGS)
+ LDLIBS += $(LIBGPS_LDLIBS)
+-- 
+1.7.10.4
+
diff --git a/babeld/Makefile b/babeld/Makefile
new file mode 100644 (file)
index 0000000..d858ad6
--- /dev/null
@@ -0,0 +1,59 @@
+#
+# Copyright (C) 2007-2009 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:=babeld
+PKG_VERSION:=1.4.2
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://www.pps.univ-paris-diderot.fr/~jch/software/files/
+PKG_MD5SUM:=a48e8129f221f66640ae1ccf73190991
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/babeld
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Routing and Redirection
+  TITLE:=A loop-free distance-vector routing protocol
+  URL:=http://www.pps.univ-paris-diderot.fr/~jch/software/babel/
+  MAINTAINER:=Gabriel Kerneis <gabriel@kerneis.info>
+  DEPENDS:=+kmod-ipv6 +librt
+endef
+
+define Package/babeld/description
+ Babel is a loop-avoiding distance-vector routing protocol roughly based
+ on DSDV and AODV, but with provisions for link cost estimation and
+ redistribution of routes from other routing protocols.
+ While it is optimised for wireless mesh networks, Babel will also work
+ efficiently on wired networks. It will generate between 1.2 and 2.4 times
+ the amount of routing traffic that RIPng would generate, while
+ never counting to infinity.
+endef
+
+define Package/babeld/conffiles
+/etc/babeld.conf
+/etc/config/babeld
+endef
+
+MAKE_FLAGS+= \
+       CFLAGS="$(TARGET_CFLAGS)" \
+
+define Package/babeld/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/babeld $(1)/usr/sbin/
+       $(INSTALL_DIR) $(1)/etc
+       $(INSTALL_CONF) ./files/babeld.conf $(1)/etc/
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) ./files/babeld.config $(1)/etc/config/babeld
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/babeld.init $(1)/etc/init.d/babeld
+endef
+
+$(eval $(call BuildPackage,babeld))
diff --git a/babeld/files/babeld.conf b/babeld/files/babeld.conf
new file mode 100644 (file)
index 0000000..746139d
--- /dev/null
@@ -0,0 +1,38 @@
+# babel config file
+#
+# This config file simply documents sample entries. 
+# "redistribute" means: redistribute routes from other routing protocols
+# into babel. "local" means addresses assigned to local interfaces.
+#
+# You do not need to edit this file: you can use /etc/config/babeld
+# instead (sections "interface" and "filter").  Both files can be used
+# simultaneously (the rules of this file are executed first).
+
+# the default rules are:
+#
+## redistribute local 
+## redistribute deny
+#
+# this says, redistribute local addresses but no other routes
+
+
+# redistribute IPv4 default route into babel 
+## redistribute local ip 0.0.0.0/0 le 0 metric 128
+
+# same but for IPv6
+## redistribute local ip ::/0 le 0 metric 128
+
+
+# don't redistribute all local addresses, only selected ones
+# after the first line, the "deny" rules kicks in. After the "deny"
+# no redistribute local rules are going to match
+## redistribute local ip 192.160.4.0/24 
+## redistribute local deny
+
+
+# Babel refuses to redistribute routes with a protocol number of "boot";
+# this is standard practice, and means that you cannot easily
+# redistribute the default route installed by dhcp.  It is however
+# possible to redistribute such route by explicitly specifying "proto 3"
+# on the redistribute line.
+## redistribute ip 0.0.0.0/0 le 0 proto 3 metric 128
diff --git a/babeld/files/babeld.config b/babeld/files/babeld.config
new file mode 100644 (file)
index 0000000..a4f00e6
--- /dev/null
@@ -0,0 +1,72 @@
+package babeld
+
+config general
+       # option 'multicast_address' 'ff02:0:0:0:0:0:1:6'
+       # option 'port' '6696'
+       # option 'state_file' '/var/lib/babel-state'
+       # option 'hello_interval' '4'
+       # option 'wired_hello_interval' '20'
+       # option 'diversity' '0,128'
+       # option 'smoothing_half_time' '4'
+       # option 'kernel_priority' '0'
+       # Do not use this option unless you know what you are doing, as it can
+       # cause persistent route flapping.
+       ## option 'duplication_priority' '0'
+       # option 'carrier_sense' 'false'
+       # option 'assume_wireless' 'false'
+       # option 'no_split_horizon' 'false'
+       # option 'debug' '0'
+       # Listen for connections from a front-end, e.g. on port 33123.
+       ## option 'local_server' '33123'
+       # option 'random_router_id' 'false'
+       # Keep unfeasible routes
+       ## option 'keep_unfeasible' 'false'
+       # Use the given kernel routing table for routes inserted by babeld.
+       ## option 'export_table' '0'
+       # Export routes from the given kernel routing tables.
+       ## list 'import_table' '0'
+       ## list 'import_table' '42'
+       # The configuration file is not necessary since you can do everything
+       # from this file.
+       # option 'conf_file' '/etc/babeld.conf'
+       # option 'log_file' '/var/log/babeld.log'
+
+# You can use aliases (like lan, wlan) or real names (like eth0.0).
+# If you use an alias, it must be already defined when babeld starts.
+# Otherwise, the name is taken literally and the interface can be
+# brought up later (useful for tunnels for instance).
+config interface wlan
+       # Remove this line to enable babeld on this interface
+       option 'ignore' 'true'
+       # option 'wired' 'auto'
+       # option 'link_quality' 'auto'
+       # option 'split_horizon' 'auto'
+       # The default is 96 for wired interfaces, and 256 for wireless ones
+       ## option 'rxcost' '256'
+       # The default is specified with the -h and -H command-line flags.
+       ## option 'hello_interval' '4'
+       # This can be set to a fairly large  value,  unless significant
+       # packet loss is expected.  The default is four times the hello
+       # interval.
+       ## option 'update_interval' '16'
+
+config interface lan
+       option 'ignore' 'true'
+
+# A filter consists in a type ('in', 'out' or 'redistribute'), an action
+# ('allow', 'deny' or 'metric xxx') and a set of selectors ('ip', 'eq',
+# etc.).  See /etc/babeld.conf for more details.
+# Here is a sample filter wich redistributes the default route if its
+# protocol number is "boot", e.g. when it installed by dhcp.  It is
+# disabled by default.
+config filter
+       option 'ignore' 'true'
+       # Type
+       option 'type' 'redistribute'
+       # Selectors: ip, eq, le, ge, neigh, id, proto, local, if
+       option 'ip' '0.0.0.0/0' 
+       option 'le' '0'
+       option 'proto' '3'
+       # Action 
+       option 'action' 'metric 128'
+
diff --git a/babeld/files/babeld.init b/babeld/files/babeld.init
new file mode 100755 (executable)
index 0000000..f2cf50a
--- /dev/null
@@ -0,0 +1,150 @@
+#!/bin/sh /etc/rc.common
+
+START=70
+
+pidfile='/var/run/babeld.pid'
+EXTRA_COMMANDS="status"
+EXTRA_HELP="        status Dump Babel's table to the log file."
+
+listen_ifname() {
+       local ifname=$(uci_get_state network "$1" ifname "$1")
+       local switch="$2"
+       append args "$switch $ifname"
+       append interfaces "$ifname"
+}
+
+append_ifname() {
+       local section="$1"
+       local option="$2"
+       local switch="$3"
+       local _name
+       config_get _name "$section" "$option"
+       [ -z "$_name" ] && return 0
+       local ifname=$(uci_get_state network "$_name" ifname "$_name")
+       append args "$switch $ifname"
+}
+
+append_bool() {
+       local section="$1"
+       local option="$2"
+       local value="$3"
+       local _loctmp
+       config_get_bool _loctmp "$section" "$option" 0
+       [ "$_loctmp" -gt 0 ] && append args "$value"
+}
+
+append_switch() {
+       local value="$1"
+       local switch="$2"
+       append args "$switch $value"
+}
+
+append_parm() {
+       local section="$1"
+       local option="$2"
+       local switch="$3"
+       local _loctmp
+       config_get _loctmp "$section" "$option"
+       [ -z "$_loctmp" ] && return 0
+       append args "$switch $_loctmp"
+}
+
+babel_filter() {
+       local cfg="$1"
+       local _loctmp
+
+       local _ignored
+       config_get_bool _ignored "$cfg" 'ignore' 0
+       [ "$_ignored" -eq 1 ] && return 0
+       
+       append args "-C '"
+
+       append_parm "$cfg" 'type' ''
+
+       append_bool "$cfg" 'local' 'local'
+
+       append_parm "$cfg" 'ip' 'ip'
+       append_parm "$cfg" 'eq' 'eq'
+       append_parm "$cfg" 'le' 'le'
+       append_parm "$cfg" 'ge' 'ge'
+       append_parm "$cfg" 'neigh' 'neigh'
+       append_parm "$cfg" 'id' 'id'
+       append_parm "$cfg" 'proto' 'proto'
+
+       append_ifname "$cfg" 'if' 'if'
+
+       append_parm "$cfg" 'action' ''
+
+       append args ' ' "'"
+}
+
+babel_addif() {
+       local cfg="$1"
+
+       local _ignored
+       config_get_bool _ignored "$cfg" 'ignore' 0
+       [ "$_ignored" -eq 1 ] && return 0
+       
+       listen_ifname "$cfg" "-C 'interface"
+
+       append_parm "$cfg" 'wired' 'wired'
+       append_parm "$cfg" 'link_quality' 'link-quality'
+       append_parm "$cfg" 'split_horizon' 'split-horizon'
+       append_parm "$cfg" 'rxcost' 'rxcost'
+       append_parm "$cfg" 'hello_interval' 'hello-interval'
+       append_parm "$cfg" 'update_interval' 'update-interval'
+
+       append args ' ' "'"
+}
+
+babel_config() {
+       local cfg="$1"
+
+       append_bool "$cfg" 'carrier_sense' '-l'
+       append_bool "$cfg" 'assume_wireless' '-w'
+       append_bool "$cfg" 'no_split_horizon' '-s'
+       append_bool "$cfg" 'keep_unfeasible' '-u'
+       append_bool "$cfg" 'random_router_id' '-r'
+
+       append_parm "$cfg" 'multicast_address' '-m'
+       append_parm "$cfg" 'port' '-p'
+       append_parm "$cfg" 'state_file' '-S'
+       append_parm "$cfg" 'hello_interval' '-h'
+       append_parm "$cfg" 'wired_hello_interval' '-H'
+       append_parm "$cfg" 'diversity' '-z'
+       append_parm "$cfg" 'smoothing_half_time' '-M'
+       append_parm "$cfg" 'kernel_priority' '-k'
+       append_parm "$cfg" 'duplication_priority' '-A'
+       append_parm "$cfg" 'debug' '-d'
+       append_parm "$cfg" 'local_server' '-g'
+       append_parm "$cfg" 'export_table' '-t'
+       config_list_foreach "$cfg" 'import_table' append_switch '-T'
+       append_parm "$cfg" 'conf_file' '-c'
+       append_parm "$cfg" 'log_file' '-L'
+}
+
+start() {
+       mkdir -p /var/lib
+       config_load babeld
+       unset args
+       unset interfaces
+       config_foreach babel_config general
+       config_foreach babel_addif interface
+       config_foreach babel_filter filter
+       [ -z "$interfaces" ] && return 0
+       eval "/usr/sbin/babeld -D -I $pidfile $args $interfaces"
+}
+
+stop() {
+       [ -f "$pidfile" ] && kill $(cat $pidfile)
+  # avoid race-condition on restart: wait for
+  # babeld to die for real.
+  [ -f "$pidfile" ] && sleep 1
+  [ -f "$pidfile" ] && sleep 1
+  [ -f "$pidfile" ] && sleep 1
+  [ -f "$pidfile" ] && exit 42
+}
+
+status() {
+       [ -f "$pidfile" ] && kill -USR1 $(cat $pidfile)
+}
index f8dfeadf028777d0f93d00cf19927c86a78b0bb5..e586b5dc599f055ee1c24f5b7c65d1b41d4e99c6 100644 (file)
@@ -10,11 +10,11 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=batman-adv
 
-PKG_VERSION:=2013.3.0
-BATCTL_VERSION:=2013.3.0
-PKG_RELEASE:=5
-PKG_MD5SUM:=d070c0879cd8fe8125315a4566fabd2d
-BATCTL_MD5SUM:=747535b0296f0013a6f99373a51d41fc
+PKG_VERSION:=2013.4.0
+BATCTL_VERSION:=2013.4.0
+PKG_RELEASE:=1
+PKG_MD5SUM:=6590caa324709289e3cb142273a5ff57
+BATCTL_MD5SUM:=42e269cc710bbc9a8fd17628201d4258
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://downloads.open-mesh.org/batman/releases/batman-adv-$(PKG_VERSION)
@@ -114,6 +114,13 @@ define Build/Patch
        $(BATCTL_PATCH)
 endef
 
+define Build/Prepare
+       $(call Build/Prepare/Default)
+       $(SED) '/#define _NET_BATMAN_ADV_MAIN_H_/a\#undef CONFIG_MODULE_STRIPPED' \
+               $(PKG_BUILD_DIR)/main.h
+endef
+
+
 define Build/Compile
        $(MAKE) -C "$(PKG_BUILD_DIR)" $(MAKE_BATMAN_ADV_ARGS)
        $(BATCTL_BUILD)
diff --git a/batman-adv/patches/0001-batman-adv-avoid-openwrt_metadata_stripping b/batman-adv/patches/0001-batman-adv-avoid-openwrt_metadata_stripping
deleted file mode 100644 (file)
index 471a7ae..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-Date: Fri,  6 Sep 2013 15:14:41 +0200
-From: Antonio Quartulli <ordex@autistici.org>
-To: b.a.t.m.a.n@lists.open-mesh.org
-Cc: Antonio Quartulli <ordex@autistici.org>
-Subject: [B.A.T.M.A.N.] [PATCH openwrt-feed only] batman-adv: fix metadata stripping
-
-a new optimisation in openwrt is stripping some metadata information, invluding
-the module version which is used by batctl to tell the user which version
-batman-adv the node is currently running.
-
-Un-define this constant to prevent the metadata from being stripped
-
-Signed-off-by: Antonio Quartulli <ordex@autistici.org>
----
- main.h | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/main.h b/main.h
-index 834b1a0..b329e79 100644
---- a/main.h
-+++ b/main.h
-@@ -20,6 +20,8 @@
- #ifndef _NET_BATMAN_ADV_MAIN_H_
- #define _NET_BATMAN_ADV_MAIN_H_
-+#undef CONFIG_MODULE_STRIPPED
-+
- #define BATADV_DRIVER_AUTHOR "Marek Lindner <lindner_marek@yahoo.de>, " \
-                            "Simon Wunderlich <siwu@hrz.tu-chemnitz.de>"
- #define BATADV_DRIVER_DESC   "B.A.T.M.A.N. advanced"
--- 
-1.8.1.5
-
diff --git a/batman-adv/patches/0001-batman-adv-fix-potential-kernel-paging-errors-for-un.patch b/batman-adv/patches/0001-batman-adv-fix-potential-kernel-paging-errors-for-un.patch
deleted file mode 100644 (file)
index d16dce4..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-From c98c3e521913b8dd5fee4d3b90dc9ed7a47e5bee Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Linus=20L=C3=BCssing?= <linus.luessing@web.de>
-Date: Tue, 6 Aug 2013 20:21:15 +0200
-Subject: [PATCH] batman-adv: fix potential kernel paging errors for unicast
- transmissions
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-There are several functions which might reallocate skb data. Currently
-some places keep reusing their old ethhdr pointer regardless of whether
-they became invalid after such a reallocation or not. This potentially
-leads to kernel paging errors.
-
-This patch fixes these by refetching the ethdr pointer after the
-potential reallocations.
-
-Signed-off-by: Linus Lüssing <linus.luessing@web.de>
-Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
----
- bridge_loop_avoidance.c |    2 ++
- gateway_client.c        |   13 ++++++++++++-
- gateway_client.h        |    3 +--
- soft-interface.c        |    9 ++++++++-
- unicast.c               |   13 ++++++++++---
- 5 files changed, 33 insertions(+), 7 deletions(-)
-
-diff --git a/bridge_loop_avoidance.c b/bridge_loop_avoidance.c
-index e14531f..264de88 100644
---- a/bridge_loop_avoidance.c
-+++ b/bridge_loop_avoidance.c
-@@ -1529,6 +1529,8 @@ out:
-  * in these cases, the skb is further handled by this function and
-  * returns 1, otherwise it returns 0 and the caller shall further
-  * process the skb.
-+ *
-+ * This call might reallocate skb data.
-  */
- int batadv_bla_tx(struct batadv_priv *bat_priv, struct sk_buff *skb,
-                 unsigned short vid)
-diff --git a/gateway_client.c b/gateway_client.c
-index f105219..7614af3 100644
---- a/gateway_client.c
-+++ b/gateway_client.c
-@@ -508,6 +508,7 @@ out:
-       return 0;
- }
-+/* this call might reallocate skb data */
- static bool batadv_is_type_dhcprequest(struct sk_buff *skb, int header_len)
- {
-       int ret = false;
-@@ -568,6 +569,7 @@ out:
-       return ret;
- }
-+/* this call might reallocate skb data */
- bool batadv_gw_is_dhcp_target(struct sk_buff *skb, unsigned int *header_len)
- {
-       struct ethhdr *ethhdr;
-@@ -619,6 +621,12 @@ bool batadv_gw_is_dhcp_target(struct sk_buff *skb, unsigned int *header_len)
-       if (!pskb_may_pull(skb, *header_len + sizeof(*udphdr)))
-               return false;
-+
-+      /* skb->data might have been reallocated by pskb_may_pull() */
-+      ethhdr = (struct ethhdr *)skb->data;
-+      if (ntohs(ethhdr->h_proto) == ETH_P_8021Q)
-+              ethhdr = (struct ethhdr *)(skb->data + VLAN_HLEN);
-+
-       udphdr = (struct udphdr *)(skb->data + *header_len);
-       *header_len += sizeof(*udphdr);
-@@ -634,12 +642,14 @@ bool batadv_gw_is_dhcp_target(struct sk_buff *skb, unsigned int *header_len)
-       return true;
- }
-+/* this call might reallocate skb data */
- bool batadv_gw_out_of_range(struct batadv_priv *bat_priv,
--                          struct sk_buff *skb, struct ethhdr *ethhdr)
-+                          struct sk_buff *skb)
- {
-       struct batadv_neigh_node *neigh_curr = NULL, *neigh_old = NULL;
-       struct batadv_orig_node *orig_dst_node = NULL;
-       struct batadv_gw_node *curr_gw = NULL;
-+      struct ethhdr *ethhdr;
-       bool ret, out_of_range = false;
-       unsigned int header_len = 0;
-       uint8_t curr_tq_avg;
-@@ -648,6 +658,7 @@ bool batadv_gw_out_of_range(struct batadv_priv *bat_priv,
-       if (!ret)
-               goto out;
-+      ethhdr = (struct ethhdr *)skb->data;
-       orig_dst_node = batadv_transtable_search(bat_priv, ethhdr->h_source,
-                                                ethhdr->h_dest);
-       if (!orig_dst_node)
-diff --git a/gateway_client.h b/gateway_client.h
-index 039902d..1037d75 100644
---- a/gateway_client.h
-+++ b/gateway_client.h
-@@ -34,7 +34,6 @@ void batadv_gw_node_delete(struct batadv_priv *bat_priv,
- void batadv_gw_node_purge(struct batadv_priv *bat_priv);
- int batadv_gw_client_seq_print_text(struct seq_file *seq, void *offset);
- bool batadv_gw_is_dhcp_target(struct sk_buff *skb, unsigned int *header_len);
--bool batadv_gw_out_of_range(struct batadv_priv *bat_priv,
--                          struct sk_buff *skb, struct ethhdr *ethhdr);
-+bool batadv_gw_out_of_range(struct batadv_priv *bat_priv, struct sk_buff *skb);
- #endif /* _NET_BATMAN_ADV_GATEWAY_CLIENT_H_ */
-diff --git a/soft-interface.c b/soft-interface.c
-index 700d0b4..0f04e1c 100644
---- a/soft-interface.c
-+++ b/soft-interface.c
-@@ -180,6 +180,9 @@ static int batadv_interface_tx(struct sk_buff *skb,
-       if (batadv_bla_tx(bat_priv, skb, vid))
-               goto dropped;
-+      /* skb->data might have been reallocated by batadv_bla_tx() */
-+      ethhdr = (struct ethhdr *)skb->data;
-+
-       /* Register the client MAC in the transtable */
-       if (!is_multicast_ether_addr(ethhdr->h_source))
-               batadv_tt_local_add(soft_iface, ethhdr->h_source, skb->skb_iif);
-@@ -220,6 +223,10 @@ static int batadv_interface_tx(struct sk_buff *skb,
-               default:
-                       break;
-               }
-+
-+              /* reminder: ethhdr might have become unusable from here on
-+               * (batadv_gw_is_dhcp_target() might have reallocated skb data)
-+               */
-       }
-       /* ethernet packet should be broadcasted */
-@@ -266,7 +273,7 @@ static int batadv_interface_tx(struct sk_buff *skb,
-       /* unicast packet */
-       } else {
-               if (atomic_read(&bat_priv->gw_mode) != BATADV_GW_MODE_OFF) {
--                      ret = batadv_gw_out_of_range(bat_priv, skb, ethhdr);
-+                      ret = batadv_gw_out_of_range(bat_priv, skb);
-                       if (ret)
-                               goto dropped;
-               }
-diff --git a/unicast.c b/unicast.c
-index dc8b5d4..688a041 100644
---- a/unicast.c
-+++ b/unicast.c
-@@ -326,7 +326,9 @@ static bool batadv_unicast_push_and_fill_skb(struct sk_buff *skb, int hdr_size,
-  * @skb: the skb containing the payload to encapsulate
-  * @orig_node: the destination node
-  *
-- * Returns false if the payload could not be encapsulated or true otherwise
-+ * Returns false if the payload could not be encapsulated or true otherwise.
-+ *
-+ * This call might reallocate skb data.
-  */
- static bool batadv_unicast_prepare_skb(struct sk_buff *skb,
-                                      struct batadv_orig_node *orig_node)
-@@ -343,7 +345,9 @@ static bool batadv_unicast_prepare_skb(struct sk_buff *skb,
-  * @orig_node: the destination node
-  * @packet_subtype: the batman 4addr packet subtype to use
-  *
-- * Returns false if the payload could not be encapsulated or true otherwise
-+ * Returns false if the payload could not be encapsulated or true otherwise.
-+ *
-+ * This call might reallocate skb data.
-  */
- bool batadv_unicast_4addr_prepare_skb(struct batadv_priv *bat_priv,
-                                     struct sk_buff *skb,
-@@ -401,7 +405,7 @@ int batadv_unicast_generic_send_skb(struct batadv_priv *bat_priv,
-       struct batadv_neigh_node *neigh_node;
-       int data_len = skb->len;
-       int ret = NET_RX_DROP;
--      unsigned int dev_mtu;
-+      unsigned int dev_mtu, header_len;
-       /* get routing information */
-       if (is_multicast_ether_addr(ethhdr->h_dest)) {
-@@ -429,10 +433,12 @@ find_router:
-       switch (packet_type) {
-       case BATADV_UNICAST:
-               batadv_unicast_prepare_skb(skb, orig_node);
-+              header_len = sizeof(struct batadv_unicast_packet);
-               break;
-       case BATADV_UNICAST_4ADDR:
-               batadv_unicast_4addr_prepare_skb(bat_priv, skb, orig_node,
-                                                packet_subtype);
-+              header_len = sizeof(struct batadv_unicast_4addr_packet);
-               break;
-       default:
-               /* this function supports UNICAST and UNICAST_4ADDR only. It
-@@ -441,6 +447,7 @@ find_router:
-               goto out;
-       }
-+      ethhdr = (struct ethhdr *)(skb->data + header_len);
-       unicast_packet = (struct batadv_unicast_packet *)skb->data;
-       /* inform the destination node that we are still missing a correct route
--- 
-1.7.10.4
-
diff --git a/bird/Makefile b/bird/Makefile
new file mode 100644 (file)
index 0000000..dfccbba
--- /dev/null
@@ -0,0 +1,160 @@
+# 
+# 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:=bird
+PKG_VERSION:=1.3.11
+PKG_RELEASE:=1
+
+PKG_SOURCE:=bird-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=ftp://bird.network.cz/pub/bird
+PKG_MD5SUM:=8ad2eb997fb8251bc5b24cf32619571b
+PKG_BUILD_DEPENDS:=libncurses libreadline
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/bird/Default
+  TITLE:=The BIRD Internet Routing Daemon
+  URL:=http://bird.network.cz/
+  DEPENDS:=
+endef
+
+define Package/birdc/Default
+  TITLE:=The BIRD command-line client
+  URL:=http://bird.network.cz/
+  DEPENDS:= +libreadline +libncurses
+endef
+
+define Package/bird/Default/description1
+BIRD is an internet routing daemon which manages TCP/IP routing tables
+with support of modern routing protocols, easy to use configuration
+interface and powerful route filtering language. It is lightweight and
+efficient and therefore appropriate for small embedded routers.
+
+endef
+
+define Package/bird/Default/description2
+In BGP, BIRD supports communities, multiprotocol extensions, MD5
+authentication, 32bit AS numbers and could act as a route server or a
+route reflector. BIRD also supports multiple RIBs, multiple kernel
+routing tables and redistribution between the protocols with a powerful
+configuration syntax.
+
+endef
+
+define Package/bird/Default/description3
+This is a BIRD command-line client. It is used to send commands to BIRD,
+commands can perform simple actions such as enabling/disabling of
+protocols, telling BIRD to show various information, telling it to show
+a routing table filtered by a filter, or asking BIRD to reconfigure.
+
+Unless you can't afford dependency on ncurses and readline, you
+should install BIRD command-line client together with BIRD.
+
+endef
+
+define Package/bird4
+$(call Package/bird/Default)
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Routing and Redirection
+  TITLE+= (IPv4)
+endef
+
+define Package/birdc4
+$(call Package/birdc/Default)
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Routing and Redirection
+  TITLE+= (IPv4)
+  DEPENDS+= +bird4
+endef
+
+define Package/bird6
+$(call Package/bird/Default)
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE+= (IPv6)
+endef
+
+define Package/birdc6
+$(call Package/birdc/Default)
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE+= (IPv6)
+  DEPENDS+= +bird6
+endef
+
+define Package/bird4/description
+$(call Package/bird/Default/description1)
+This is IPv4 version of BIRD, it supports OSPFv2, RIPv2 and BGP
+protocols.
+
+$(call Package/bird/Default/description2)
+endef
+
+define Package/birdc4/description
+$(call Package/bird/Default/description1)
+$(call Package/bird/Default/description3)
+endef
+
+define Package/bird6/description
+$(call Package/bird/Default/description1)
+This is IPv6 version of BIRD, it supports OSPFv3, RIPng and BGP
+protocols.
+
+$(call Package/bird/Default/description2)
+endef
+
+define Package/birdc6/description
+$(call Package/bird/Default/description1)
+$(call Package/bird/Default/description3)
+endef
+
+CONFIGURE_ARGS += --with-linux-headers="$(LINUX_DIR)"
+
+define Build/Template
+
+$(STAMP_BUILT)-$(2): $(STAMP_PREPARED)
+       $(call Build/Configure/Default,$(3))
+       $(call Build/Compile/Default,)
+       ( cd $(PKG_BUILD_DIR); mv -f bird bird$(2); mv -f birdc birdc$(2) )
+       -$(MAKE) -C $(PKG_BUILD_DIR) clean
+       touch $$@
+
+$(STAMP_BUILT): $(STAMP_BUILT)-$(2)
+
+define Package/bird$(2)/install
+       $(INSTALL_DIR)  $$(1)/usr/sbin
+       $(INSTALL_BIN)  $$(PKG_BUILD_DIR)/bird$(2) $$(1)/usr/sbin/
+       $(INSTALL_BIN)  ./files/bird$(2)loop $$(1)/usr/sbin/
+       $(INSTALL_DIR)  $$(1)/etc
+       $(INSTALL_DATA) ./files/bird$(2).conf $$(1)/etc/
+       $(INSTALL_DIR)  $$(1)/etc/init.d
+       $(INSTALL_BIN)  ./files/bird$(2).init $$(1)/etc/init.d/bird$(2)
+
+endef
+
+define Package/bird$(2)/conffiles
+/etc/bird$(2).conf
+endef
+
+define Package/birdc$(2)/install
+       $(INSTALL_DIR) $$(1)/usr/sbin
+       $(INSTALL_BIN) $$(PKG_BUILD_DIR)/birdc$(2) $$(1)/usr/sbin/
+endef
+
+endef
+
+
+$(eval $(call Build/Template,bird4,4, --disable-ipv6))
+$(eval $(call Build/Template,bird6,6, --enable-ipv6))
+
+$(eval $(call BuildPackage,bird4))
+$(eval $(call BuildPackage,birdc4))
+$(eval $(call BuildPackage,bird6))
+$(eval $(call BuildPackage,birdc6))
diff --git a/bird/files/bird4.conf b/bird/files/bird4.conf
new file mode 100644 (file)
index 0000000..8616a0a
--- /dev/null
@@ -0,0 +1,121 @@
+
+# THIS CONFIG FILE IS NOT A COMPLETE DOCUMENTATION
+# PLEASE LOOK IN THE BIRD DOCUMENTATION FOR MORE INFO
+
+# However, most of options used here are just for example
+# and will be removed in real-life configs.
+
+log syslog all;
+
+# Override router ID
+#router id 192.168.0.1;
+
+# Turn on global debugging of all protocols
+#debug protocols all;
+
+
+# Define a route filter...
+# filter test_filter {
+#      if net ~ 10.0.0.0/16 then accept;
+#      else reject;
+# }
+
+# The direct protocol automatically generates device routes to all network
+# interfaces. Can exist in as many instances as you wish if you want to
+# populate multiple routing tables with device routes. Because device routes
+# are handled by Linux kernel, this protocol is  usually not needed.
+# protocol direct {
+#      interface "*";  # Restrict network interfaces it works with
+# }
+
+# This pseudo-protocol performs synchronization between BIRD's routing
+# tables and the kernel. You can run multiple instances of the kernel
+# protocol and synchronize different kernel tables with different BIRD tables.
+protocol kernel {
+#      learn;                  # Learn all alien routes from the kernel
+#      persist;                # Don't remove routes on bird shutdown
+       scan time 20;           # Scan kernel routing table every 20 seconds
+#      import none;            # Default is import all
+#      export all;             # Default is export none
+}
+
+# This pseudo-protocol watches all interface up/down events.
+protocol device {
+       scan time 10;           # Scan interfaces every 10 seconds
+}
+
+# Static routes (again, there can be multiple instances, so that you
+# can disable/enable various groups of static routes on the fly).
+protocol static {
+#      export all;             # Default is export none
+#      route 0.0.0.0/0 via 62.168.0.13;
+#      route 10.0.0.0/8 reject;
+#      route 192.168.0.0/16 reject;
+}
+
+
+#protocol rip {
+#      disabled;
+#      import all;
+#      export all;
+#      export filter test_filter;
+
+#      port 1520;
+#      period 7;
+#      infinity 16;
+#      garbage time 60;
+#      interface "*" { mode broadcast; };
+#      honor neighbor;
+#      honor always;
+#      honor never;
+#      authentication none;
+#}
+
+
+#protocol ospf {
+#      disabled;
+#      import all;
+#      export all;
+#      export where source = RTS_STATIC;
+
+#      area 0 {
+#              interface "eth*" {
+#                      cost 10;
+#                      hello 3;
+#                      retransmit 2;
+#                      wait 5;
+#                      dead 20;
+#                      type broadcast;
+#                      authentication simple;
+#                      password "pass";
+#              };
+#      };
+#}
+
+
+#protocol bgp {
+#      disabled;
+#      import all;
+#      export all;
+#      export where source = RTS_STATIC;
+
+#      local as 65000;
+#      neighbor 192.168.1.1 as 65001;
+#      multihop 20 via 192.168.2.1;
+
+#      hold time 240;
+#      startup hold time 240;
+#      connect retry time 120;
+#      keepalive time 80;      # defaults to hold time / 3
+#      start delay time 5;     # How long do we wait before initial connect
+#      error wait time 60, 300;# Minimum and maximum time we wait after an error (when consecutive
+#                              # errors occur, we increase the delay exponentially ...
+#      error forget time 300;  # ... until this timeout expires)
+#      disable after error;    # Disable the protocol automatically when an error occurs
+#      next hop self;          # Disable next hop processing and always advertise our local address as nexthop
+#      source address 62.168.0.14;     # What local address we use for the TCP connection
+#      password "secret"       # Password used for MD5 authentication
+#      rr client;              # I am a route reflector and the neighor is my client
+#      rr cluster id 1.0.0.1   # Use this value for cluster id instead of my router id 
+#      };
+#}
diff --git a/bird/files/bird4.init b/bird/files/bird4.init
new file mode 100644 (file)
index 0000000..18243bb
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2010-2011 OpenWrt.org
+
+START=99
+STOP=10
+
+SERVICE_DAEMONIZE=1
+SERVICE_WRITE_PID=1
+
+BIRD="/usr/sbin/bird4 -c /etc/bird4.conf"
+
+start() {
+       service_start $BIRD -d
+#      ( SERVICE_MATCH_NAME=1 service_start /usr/sbin/bird4loop )
+}
+
+stop() {
+#      ( SERVICE_MATCH_NAME=1 service_stop /usr/sbin/bird4loop )
+       service_stop $BIRD
+}
+
+reload() {
+       service_reload $BIRD
+}
diff --git a/bird/files/bird4loop b/bird/files/bird4loop
new file mode 100644 (file)
index 0000000..8154902
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+BIRD="/usr/sbin/bird4 -c /etc/bird4.conf"
+
+$BIRD -p || return 1
+
+. /lib/functions.sh
+. /lib/functions/service.sh
+
+SERVICE_DAEMONIZE=1
+SERVICE_WRITE_PID=1
+
+sig_handler() {
+       running=0
+       service_stop $BIRD
+}
+
+running=1
+trap sig_handler INT
+trap sig_handler TERM
+while [ $running -gt 0 ]; do
+       service_check $BIRD || service_start $BIRD -d "$@"
+       sleep 3
+done
diff --git a/bird/files/bird6.conf b/bird/files/bird6.conf
new file mode 100644 (file)
index 0000000..8616a0a
--- /dev/null
@@ -0,0 +1,121 @@
+
+# THIS CONFIG FILE IS NOT A COMPLETE DOCUMENTATION
+# PLEASE LOOK IN THE BIRD DOCUMENTATION FOR MORE INFO
+
+# However, most of options used here are just for example
+# and will be removed in real-life configs.
+
+log syslog all;
+
+# Override router ID
+#router id 192.168.0.1;
+
+# Turn on global debugging of all protocols
+#debug protocols all;
+
+
+# Define a route filter...
+# filter test_filter {
+#      if net ~ 10.0.0.0/16 then accept;
+#      else reject;
+# }
+
+# The direct protocol automatically generates device routes to all network
+# interfaces. Can exist in as many instances as you wish if you want to
+# populate multiple routing tables with device routes. Because device routes
+# are handled by Linux kernel, this protocol is  usually not needed.
+# protocol direct {
+#      interface "*";  # Restrict network interfaces it works with
+# }
+
+# This pseudo-protocol performs synchronization between BIRD's routing
+# tables and the kernel. You can run multiple instances of the kernel
+# protocol and synchronize different kernel tables with different BIRD tables.
+protocol kernel {
+#      learn;                  # Learn all alien routes from the kernel
+#      persist;                # Don't remove routes on bird shutdown
+       scan time 20;           # Scan kernel routing table every 20 seconds
+#      import none;            # Default is import all
+#      export all;             # Default is export none
+}
+
+# This pseudo-protocol watches all interface up/down events.
+protocol device {
+       scan time 10;           # Scan interfaces every 10 seconds
+}
+
+# Static routes (again, there can be multiple instances, so that you
+# can disable/enable various groups of static routes on the fly).
+protocol static {
+#      export all;             # Default is export none
+#      route 0.0.0.0/0 via 62.168.0.13;
+#      route 10.0.0.0/8 reject;
+#      route 192.168.0.0/16 reject;
+}
+
+
+#protocol rip {
+#      disabled;
+#      import all;
+#      export all;
+#      export filter test_filter;
+
+#      port 1520;
+#      period 7;
+#      infinity 16;
+#      garbage time 60;
+#      interface "*" { mode broadcast; };
+#      honor neighbor;
+#      honor always;
+#      honor never;
+#      authentication none;
+#}
+
+
+#protocol ospf {
+#      disabled;
+#      import all;
+#      export all;
+#      export where source = RTS_STATIC;
+
+#      area 0 {
+#              interface "eth*" {
+#                      cost 10;
+#                      hello 3;
+#                      retransmit 2;
+#                      wait 5;
+#                      dead 20;
+#                      type broadcast;
+#                      authentication simple;
+#                      password "pass";
+#              };
+#      };
+#}
+
+
+#protocol bgp {
+#      disabled;
+#      import all;
+#      export all;
+#      export where source = RTS_STATIC;
+
+#      local as 65000;
+#      neighbor 192.168.1.1 as 65001;
+#      multihop 20 via 192.168.2.1;
+
+#      hold time 240;
+#      startup hold time 240;
+#      connect retry time 120;
+#      keepalive time 80;      # defaults to hold time / 3
+#      start delay time 5;     # How long do we wait before initial connect
+#      error wait time 60, 300;# Minimum and maximum time we wait after an error (when consecutive
+#                              # errors occur, we increase the delay exponentially ...
+#      error forget time 300;  # ... until this timeout expires)
+#      disable after error;    # Disable the protocol automatically when an error occurs
+#      next hop self;          # Disable next hop processing and always advertise our local address as nexthop
+#      source address 62.168.0.14;     # What local address we use for the TCP connection
+#      password "secret"       # Password used for MD5 authentication
+#      rr client;              # I am a route reflector and the neighor is my client
+#      rr cluster id 1.0.0.1   # Use this value for cluster id instead of my router id 
+#      };
+#}
diff --git a/bird/files/bird6.init b/bird/files/bird6.init
new file mode 100644 (file)
index 0000000..67b32f1
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2010-2011 OpenWrt.org
+
+START=99
+STOP=10
+
+SERVICE_DAEMONIZE=1
+SERVICE_WRITE_PID=1
+
+BIRD="/usr/sbin/bird6 -c /etc/bird6.conf"
+
+start() {
+       service_start $BIRD -d
+#      ( SERVICE_MATCH_NAME=1 service_start /usr/sbin/bird6loop )
+}
+
+stop() {
+#      ( SERVICE_MATCH_NAME=1 service_stop /usr/sbin/bird6loop )
+       service_stop $BIRD
+}
+
+reload() {
+       service_reload $BIRD
+}
diff --git a/bird/files/bird6loop b/bird/files/bird6loop
new file mode 100644 (file)
index 0000000..510add4
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+BIRD="/usr/sbin/bird6 -c /etc/bird6.conf"
+
+$BIRD -p || return 1
+
+. /lib/functions.sh
+. /lib/functions/service.sh
+
+SERVICE_DAEMONIZE=1
+SERVICE_WRITE_PID=1
+
+sig_handler() {
+       running=0
+       service_stop $BIRD
+}
+
+running=1
+trap sig_handler INT
+trap sig_handler TERM
+while [ $running -gt 0 ]; do
+       service_check $BIRD || service_start $BIRD -d "$@"
+       sleep 3
+done
index 04356558bf03a1ea2f3ca5e70e5abed58ed22ebf..730fd29bf9309f98c2c916182a35b9c989bcebe9 100644 (file)
                                hna6 = extensions[e].HNA6_EXTENSION;
                                if ( extensions[e].TUN4IN6_NET_EXTENSION )
                                tun4in6 = extensions[e].TUN4IN6_NET_EXTENSION;
+                               tun6in6 = extensions[e].TUN6IN6_NET_EXTENSION;
                                }
 
                        // Gateways
                                else
                                        gateways += "<li>"+tun4in6[t].network+'/'+tun4in6[t].networklen + ' | ' + tun4in6[t].bandwidth+'</li>';
                                }
+
+                       for ( var t = 0; t < tun6in6.length; t++)
+                               {
+                               if ( tun6in6[t].networklen == "128" )
+                                       gateways += '<li><a href="http://' + tun6in6[t].network + '">' + tun6in6[t].network + '</a></li>';
+                               else
+                                       gateways += "<li>"+tun6in6[t].network+'/'+tun6in6[t].networklen + ' | ' + tun6in6[t].bandwidth+'</li>';
+                               }
+
                        gateways += '</ul>';
 
                        //Adding HNAs with prefix=128 as main address
index b7c3282c32bacdc5555a6a926e8b6e48c4f95f0f..c5f1d20339ad93b7142d1ccca5fec653e6854fab 100644 (file)
@@ -8,14 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=ndppd
-PKG_VERSION:=0.2.2
-PKG_RELEASE:=2
+PKG_VERSION:=0.2.3
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 
 # Latest release
 PKG_SOURCE_URL:=http://www.priv.nu/projects/ndppd/files/
-PKG_MD5SUM:=d90c4b65777a62274c1837dba341e5a8
+PKG_MD5SUM:=d6f3243bb7fc04c8085371c9acddc50e
 
 # Development snapshot
 #PKG_SOURCE_URL=git://github.com/Tuhox/ndppd.git
@@ -30,7 +30,7 @@ define Package/ndppd
   CATEGORY:=Network
   TITLE:=NDP Proxy Daemon
   URL:=http://www.priv.nu/projects/ndppd/
-  MAINTAINER:=Gabriel Kerneis <kerneis@pps.jussieu.fr>
+  MAINTAINER:=Gabriel Kerneis <gabriel@kerneis.info>
   DEPENDS:=+kmod-ipv6 $(CXX_DEPENDS)
 endef
 
diff --git a/ndppd/patches/0001-Fix-issue-2-ndppd-d-monizes-too-early.patch b/ndppd/patches/0001-Fix-issue-2-ndppd-d-monizes-too-early.patch
new file mode 100644 (file)
index 0000000..dad23f5
--- /dev/null
@@ -0,0 +1,53 @@
+From 00da8bf7bab88a3827af4110fb27df9cde542e32 Mon Sep 17 00:00:00 2001
+From: Daniel Adolfsson <daniel@priv.nu>
+Date: Tue, 12 Feb 2013 13:25:22 +0100
+Subject: [PATCH] =?UTF-8?q?Fix=20issue=20#2=20-=20ndppd=20d=C3=A6monizes=20t?=
+ =?UTF-8?q?oo=20early?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+---
+ src/ndppd.cc |   18 ++++++++----------
+ 1 file changed, 8 insertions(+), 10 deletions(-)
+
+diff --git a/src/ndppd.cc b/src/ndppd.cc
+index 6ac19e8..20ced6f 100644
+--- a/src/ndppd.cc
++++ b/src/ndppd.cc
+@@ -201,15 +201,6 @@ int main(int argc, char* argv[], char* env[])
+         }
+     }
+-    if (daemon) {
+-        logger::syslog(true);
+-
+-        if (daemonize() < 0) {
+-            logger::error() << "Failed to daemonize process";
+-            return 1;
+-        }
+-    }
+-
+     if (!pidfile.empty()) {
+         std::ofstream pf;
+         pf.open(pidfile.c_str(), std::ios::out | std::ios::trunc);
+@@ -225,8 +216,15 @@ int main(int argc, char* argv[], char* env[])
+     if (!configure(config_path))
+         return -1;
++    
++    if (daemon) {
++        logger::syslog(true);
+-    //route::load("/proc/net/ipv6_route");
++        if (daemonize() < 0) {
++            logger::error() << "Failed to daemonize process";
++            return 1;
++        }
++    }
+     // Time stuff.
+-- 
+1.7.10.4
+
index 364dea5e8a555b1f7f01985b58123e1cdfcd6855..e7f4615448970e1dc0970a607a0e4fa6cc1d8a58 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=olsrd
 PKG_VERSION:=0.6.6
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=http://www.olsr.org/releases/0.6
@@ -175,6 +175,8 @@ define Package/olsrd/install
        $(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
+       $(INSTALL_DIR) $(1)/etc/hotplug.d/iface
+       $(INSTALL_BIN) ./files/olsrd.hotplug.sh $(1)/etc/hotplug.d/iface/50-olsrd
 endef
 
 define Package/olsrd-mod-arprefresh/install
diff --git a/olsrd/files/olsrd.hotplug.sh b/olsrd/files/olsrd.hotplug.sh
new file mode 100755 (executable)
index 0000000..8b110d4
--- /dev/null
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+olsrd_list_configured_interfaces()
+{
+       local i=0
+       local interface
+
+       while interface="$( uci -q get olsrd.@Interface[$i].interface )"; do {
+               case "$( uci -q get olsrd.@Interface[$i].ignore )" in
+                       1|on|true|enabled|yes)
+                               # is disabled
+                       ;;
+                       *)
+                               echo "$interface"
+                       ;;
+               esac
+
+               i=$(( $i + 1 ))
+       } done
+}
+
+olsrd_interface_needs_adding()
+{
+       local interface="$1"    # e.g. wlanadhocRADIO1
+       local device="$2"       # e.g. wlan1-1
+       local myif
+       local config="/var/etc/olsrd.conf"
+
+       for myif in $(olsrd_list_configured_interfaces); do {
+               [ "$myif" = "$interface" ] && {
+                       if grep -s ^'Interface ' "$config" | grep -q "\"$device\""; then
+                               logger -t olsrd_hotplug -p daemon.debug "[OK] already_active: $INTERFACE => $DEVICE"
+                               return 1
+                       else
+                               logger -t olsrd_hotplug -p daemon.info "[OK] ifup: $INTERFACE => $DEVICE"
+                               return 0
+                       fi
+               }
+       } done
+
+       logger -t olsrd_hotplug -p daemon.debug "[OK] interface $INTERFACE not used for olsrd"
+       return 1
+}
+
+case "$ACTION" in
+       ifup)
+               # only work after the first normal startup
+               # also: no need to test, if enabled
+               [ -e '/var/etc/olsrd.conf' ] && {
+                       olsrd_interface_needs_adding "$INTERFACE" "$DEVICE" && {
+                               . /etc/rc.common /etc/init.d/olsrd restart
+                       }
+               }
+       ;;
+esac
index 80f93ce7d40abceed85dcfbefbde36173d1e6830..21e8215ffffaae07f0f9e246d9beee123d071cd4 100644 (file)
@@ -13,7 +13,7 @@ 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_SCHEMA='ignore:internal interface:internal AutoDetectChanges:bool LinkQualityMult:list2'
 OLSRD_INTERFACE_DEFAULTS_SCHEMA='AutoDetectChanges:bool'
 
 T='    '