Merge pull request #861 from ynezz/master
[project/luci.git] / contrib / package / meshwizard / files / usr / bin / meshwizard / helpers / setup_olsrd.sh
index d298828..01a9387 100755 (executable)
 #!/bin/sh
 # Sets up olsrd
-# arg $1 = net
-
-net=$1
-
-. /etc/functions.sh
 
+. /lib/functions.sh
 . $dir/functions.sh
 
-# Clean or delete interface defaults
-handle_interfacedefaults() {
-       if [ "$cleanup" == 1 ]; then
-               section_cleanup olsrd.$1
-       else
-               if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then
-                       section_rename olsrd $1 InterfaceDefaults
-                fi
-       fi
-}
-
-config_load olsrd
-config_foreach handle_interfacedefaults InterfaceDefaults
-
-# Setup new InterfaceDefaults
+protocols="4"
+if [ "$ipv6_enabled" = 1 ] && [ "$has_ipv6" == "1" ]; then
+    protocols="4 6"
+fi
 
-echo "    + Setup InterfaceDefaults"
-uci set olsrd.InterfaceDefaults=InterfaceDefaults
-set_defaults "olsr_interfacedefaults_" olsrd.InterfaceDefaults
+clean_config() {
+    # Clean the config, remove interface wlan
+    handle_interface() {
+            config_get interface "$1" interface
+            if [ "$interface" = "wlan" ]; then
+                    uci delete $cfg.$1
+            fi
+    }
+    config_foreach handle_interface Interface
+}
 
-# Delete old interface for $netrenamed
-handle_interface() {
-       config_get interface "$1" Interface
-       if [ "$interface" == "$netrenamed" ]; then
-               if [ "$cleanup" == 1 ]; then
-                       section_cleanup olsrd.$1
-               elif [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then
-                       section_rename olsrd $1 $netrenamed
-               fi
+rename_olsrd() {
+    #Rename olsrd basic settings
+    handle_olsrd() {
+       if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then
+               section_rename $cfg $1 olsrd
        fi
+    }
+    config_foreach handle_olsrd olsrd
 }
 
-config_foreach handle_interface Interface
-
-# Setup new interface for $netrenamed
-
-echo "    + Setup Interface"
-
-uci set olsrd.$netrenamed=Interface
-
-set_defaults "olsr_interface_" olsrd.$net
-
-uci set olsrd.$netrenamed.interface="$netrenamed"
-echo "    interface: $netrenamed"
-
-# If dhcp-network is inside the mesh_network then add HNA for it
-dhcprange=$(uci get meshwizard.netconfig.$net\_dhcprange)
-meshnet="$(uci get profile_$community.profile.mesh_network)"
-
-uci -q delete olsrd.${netrenamed}clients
-
-# check if the dhcprange is inside meshnet
-dhcpinmesh="$($dir/helpers/check-range-in-range.sh $dhcprange $meshnet)"
-
-if [ "$dhcpinmesh" == 1 ]; then
-       echo "    + Setting up HNA"
-       uci set olsrd.${netrenamed}clients="Hna4"
-       eval $(sh $dir/helpers/ipcalc-cidr.sh $dhcprange)
-       uci set olsrd.${netrenamed}clients.netaddr="$NETWORK"
-       uci set olsrd.${netrenamed}clients.netmask="$NETMASK"
-       echo "    netaddr: $NETWORK"
-       echo "    natmask: $NETMASK"
-fi
+rename_interface_defaults() {
+    # Rename interface defaults
+    handle_interfacedefaults() {
+            if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then
+                    section_rename $cfg $1 InterfaceDefaults
+            fi
+    }
+    config_foreach handle_interfacedefaults InterfaceDefaults
+}
 
+cleanup_plugins() {
+    # Rename nameservice, dyngw and httpinfo plugins
+    handle_plugin() {
+            config_get library "$1" library
+            if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then
+                    new="$(echo $library | cut -d '.' -f 1)"
+                    section_rename $cfg "$1" "$new"
+            fi
+    }
+    config_foreach handle_plugin LoadPlugin
+    uci -q delete $cfg.olsrd_httpinfo
+    uci -q delete $cfg.olsrd_dyn_gw
+}
 
-# Delete nameservice, dyngw and httpinfo plugins
-
-echo "    + Configure Plugins"
-handle_plugin() {
-        config_get library "$1" library
-       if [ "$cleanup" == 1 ]; then
-               case library in
-                       olsrd_*)
-                               section_cleanup olsrd.$1
-               esac
-       elif [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then
-               new="$(echo $library | cut -d '.' -f 1)"
-               section_rename olsrd $1 $new
-       fi              
+setup_nameservice() {
+    # Setup nameservice plugin
+    if [ -n "$profile_suffix" ]; then
+            suffix=".$profile_suffix"
+    else
+            suffix=".olsr"
+    fi
+    local llfile="/var/run/latlon.js"
+    local hosts="/var/etc/hosts.olsr"
+    local services="/var/run/services_olsr"
+
+    if [ "$proto" = "6" ]; then
+        local llfile="/var/run/latlon.js.ipv6"
+        local hosts="/var/etc/hosts.olsr.ipv6"
+        local services="/var/run/services_olsr.ipv6"
+    fi
+
+       uci batch <<- EOF
+               set $cfg.olsrd_nameservice=LoadPlugin
+               set $cfg.olsrd_nameservice.library="olsrd_nameservice.so.0.3"
+               set $cfg.olsrd_nameservice.latlon_file="$llfile"
+               set $cfg.olsrd_nameservice.hosts_file="$hosts"
+               set $cfg.olsrd_nameservice.sighup_pid_file="/var/run/dnsmasq.pid"
+               set $cfg.olsrd_nameservice.services_file="$services"
+               set $cfg.olsrd_nameservice.suffix="$suffix"
+       EOF
+
+    uci_commitverbose "Setup olsr nameservice plugin" $cfg
 }
-config_foreach handle_plugin LoadPlugin
 
-# Setup nameservice plugin
-if [ -n "$profile_suffix" ]; then
-       suffix=".$profile_suffix"
-else
-       suffix=".olsr"
-fi
-uci batch << EOF
-set olsrd.olsrd_nameservice=LoadPlugin
-set olsrd.olsrd_nameservice.library="olsrd_nameservice.so.0.3"
-set olsrd.olsrd_nameservice.latlon_file="/var/run/latlon.js"
-set olsrd.olsrd_nameservice.hosts_file="/var/etc/hosts.olsr"
-set olsrd.olsrd_nameservice.sighup_pid_file="/var/run/dnsmasq.pid"
-set olsrd.olsrd_nameservice.suffix="$suffix"
-EOF
+setup_dyngw_plain() {
+    # Setup dyngw_plain
+    # If Sharing of Internet is enabled then enable dyngw_plain plugin
 
-echo "    Nameservice Plugin configured."
+    if [ "$general_sharenet" == 1 ]; then
+       uci set $cfg.dyngw_plain=LoadPlugin
+       uci set $cfg.dyngw_plain.ignore=0
+       uci set $cfg.dyngw_plain.library="olsrd_dyn_gw_plain.so.0.4"
+       uci_commitverbose "Setup olsrd_dyngw_plain plugin" $cfg
+    fi
 
-# Setup dyngw_plain
+}
 
-# If Sharing of Internet is enabled then enable dyngw_plain plugin
-sharenet=$(uci -q get meshwizard.general.sharenet)
+setup_watchdog() {
+    # Setup watchdog
+    local watchdogfile="/var/run/olsrd.watchdog"
+    if [ "$proto" = "6" ]; then
+        watchdogfile="/var/run/olsrd.watchdog.ipv6"
+    fi
+
+       uci batch <<- EOF
+               set $cfg.olsrd_watchdog=LoadPlugin
+               set $cfg.olsrd_watchdog.library="olsrd_watchdog.so.0.1"
+               set $cfg.olsrd_watchdog.file="$watchdogfile"
+               set $cfg.olsrd_watchdog.interval=30
+       EOF
+    uci_commitverbose "Setup olsr watchdog plugin" $cfg
 
-if [ -n "$(uci -q get olsrd.dyngw_plain.library)" ]; then
-       section_cleanup olsrd.dyngw_plain
-fi
+}
 
-if [ "$sharenet" == 1 ]; then
-       echo "    + Setup dyngw_plain"
-       uci set olsrd.dyngw_plain=LoadPlugin
-       uci set olsrd.dyngw_plain.ignore=0
-       uci set olsrd.dyngw_plain.library="olsrd_dyn_gw_plain.so.0.4"
-fi
+setup_jsoninfo() {
+       proto="$1"
+       uci batch <<- EOF
+               set $cfg.olsrd_jsoninfo=LoadPlugin
+               set $cfg.olsrd_jsoninfo.library="olsrd_jsoninfo.so.0.0"
+       EOF
+       if [ "$proto" = "6" ]; then
+               uci set $cfg.olsrd_jsoninfo.ipv6only='1'
+       fi
+       uci_commitverbose "Setup olsr jsoninfo plugin" $cfg
+}
 
-uci commit
+setup_txtinfo() {
+       proto="$1"
+       uci batch <<- EOF
+           set $cfg.olsrd_txtinfo=LoadPlugin
+           set $cfg.olsrd_txtinfo.library="olsrd_txtinfo.so.0.1"
+       EOF
+       if [ "$proto" = "6" ]; then
+               uci set $cfg.olsrd_txtinfo.ipv6only='1'
+       fi
+       uci_commitverbose "Setup olsr txtinfo plugin" $cfg
+} 
+
+
+for proto in $protocols; do
+    cfg="olsrd"
+    [ "$proto" == "6" ] && cfg="olsrd6"
+    config_load $cfg
+    clean_config
+    rename_olsrd
+    cleanup_plugins
+
+    uci set $cfg.olsrd.IpVersion="$proto"
+    uci set $cfg.InterfaceDefaults=InterfaceDefaults
+    set_defaults "olsr_interfacedefaults_" $cfg.InterfaceDefaults
+    uci_commitverbose "Cleanup olsrd config" $cfg
+
+    setup_nameservice
+    setup_dyngw_plain
+    setup_watchdog
+    setup_jsoninfo $proto
+    setup_txtinfo $proto
+done