From: Jo-Philipp Wich Date: Thu, 18 Apr 2013 16:48:30 +0000 (+0200) Subject: move olsrd files into subdirectory X-Git-Url: http://git.openwrt.org/?p=feed%2Frouting.git;a=commitdiff_plain;h=0015a5a216914ddf35abccefb530b0f7c651c857 move olsrd files into subdirectory --- diff --git a/Makefile b/Makefile deleted file mode 100644 index e5be87b..0000000 --- a/Makefile +++ /dev/null @@ -1,290 +0,0 @@ -# -# 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 - 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/files/olsrd.config b/files/olsrd.config deleted file mode 100644 index 9a19eb9..0000000 --- a/files/olsrd.config +++ /dev/null @@ -1,26 +0,0 @@ -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/files/olsrd.init b/files/olsrd.init deleted file mode 100644 index 1172623..0000000 --- a/files/olsrd.init +++ /dev/null @@ -1,850 +0,0 @@ -#!/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/files/olsrd.pud.position.conf b/files/olsrd.pud.position.conf deleted file mode 100644 index 0ab0fb7..0000000 --- a/files/olsrd.pud.position.conf +++ /dev/null @@ -1,51 +0,0 @@ -# -# 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/files/olsrd.sgw.speed.conf b/files/olsrd.sgw.speed.conf deleted file mode 100644 index ae795d8..0000000 --- a/files/olsrd.sgw.speed.conf +++ /dev/null @@ -1,14 +0,0 @@ -# -# 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/files/olsrd_secure_key b/files/olsrd_secure_key deleted file mode 100644 index 4a7d725..0000000 --- a/files/olsrd_secure_key +++ /dev/null @@ -1 +0,0 @@ -1234567890123456 \ No newline at end of file diff --git a/olsrd/Makefile b/olsrd/Makefile new file mode 100644 index 0000000..e5be87b --- /dev/null +++ b/olsrd/Makefile @@ -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 + 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 index 0000000..9a19eb9 --- /dev/null +++ b/olsrd/files/olsrd.config @@ -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 index 0000000..1172623 --- /dev/null +++ b/olsrd/files/olsrd.init @@ -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 index 0000000..0ab0fb7 --- /dev/null +++ b/olsrd/files/olsrd.pud.position.conf @@ -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 index 0000000..ae795d8 --- /dev/null +++ b/olsrd/files/olsrd.sgw.speed.conf @@ -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 index 0000000..4a7d725 --- /dev/null +++ b/olsrd/files/olsrd_secure_key @@ -0,0 +1 @@ +1234567890123456 \ No newline at end of file