contrib/meshwizard: use seperate config files for olsrd4 and olsrd6

This commit is contained in:
Manuel Munz 2014-08-08 21:20:56 +00:00
parent 6f8daab6eb
commit 7c0b1137ef
2 changed files with 191 additions and 133 deletions

View file

@ -4,100 +4,142 @@
. /lib/functions.sh
. $dir/functions.sh
local protocols="4"
if [ "$ipv6_enabled" = 1 ] && [ "$has_ipv6" == "1" ]; then
protocols="4 6"
fi
clean_config() {
# Clean the config, remove interface wlan
handle_interface() {
config_get interface "$1" interface
if [ "$interface" = "wlan" ]; then
uci delete olsrd.$1
uci delete $cfg.$1
fi
}
config_load olsrd
config_foreach handle_interface Interface
}
rename_olsrd() {
#Rename olsrd basic settings
handle_olsrd() {
if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then
section_rename olsrd $1 olsrd
section_rename $cfg $1 olsrd
fi
}
config_foreach handle_olsrd olsrd
}
rename_interface_defaults() {
# Rename interface defaults
handle_interfacedefaults() {
if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then
section_rename olsrd $1 InterfaceDefaults
section_rename $cfg $1 InterfaceDefaults
fi
}
config_foreach handle_interfacedefaults InterfaceDefaults
}
# Set basic olsrd settings
if [ "$ipv6_enabled" = 1 ] && [ "$has_ipv6" == "1" ]; then
uci set olsrd.olsrd.IpVersion="6and4"
fi
# Setup new InterfaceDefaults
uci set olsrd.InterfaceDefaults=InterfaceDefaults
set_defaults "olsr_interfacedefaults_" olsrd.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 olsrd "$1" "$new"
section_rename $cfg "$1" "$new"
fi
}
config_foreach handle_plugin LoadPlugin
uci -q delete olsrd.olsrd_httpinfo
uci -q delete olsrd.olsrd_dyn_gw
uci_commitverbose "Cleanup olsrd config" olsrd
uci -q delete $cfg.olsrd_httpinfo
uci -q delete $cfg.olsrd_dyn_gw
}
setup_nameservice() {
# 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.services_file="/var/run/services_olsr"
set olsrd.olsrd_nameservice.suffix="$suffix"
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" olsrd
uci_commitverbose "Setup olsr nameservice plugin" $cfg
}
setup_dyngw_plain() {
# Setup dyngw_plain
# If Sharing of Internet is enabled then enable dyngw_plain plugin
if [ "$general_sharenet" == 1 ]; then
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"
uci_commitverbose "Setup olsrd_dyngw_plain plugin" olsrd
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 watchdog
uci batch << EOF
set olsrd.olsrd_watchdog=LoadPlugin
set olsrd.olsrd_watchdog.library="olsrd_watchdog.so.0.1"
set olsrd.olsrd_watchdog.file="/var/run/olsrd.watchdog"
set olsrd.olsrd_watchdog.interval=30
EOF
uci_commitverbose "Setup olsr watchdog plugin" olsrd
}
# Setup jsoninfo
uci batch << EOF
set olsrd.olsrd_jsoninfo=LoadPlugin
set olsrd.olsrd_jsoninfo.library="olsrd_jsoninfo.so.0.0"
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 jsoninfo plugin" olsrd
uci_commitverbose "Setup olsr watchdog plugin" $cfg
}
setup_jsoninfo() {
# Setup jsoninfo
uci batch <<- EOF
set $cfg.olsrd_jsoninfo=LoadPlugin
set $cfg.olsrd_jsoninfo.library="olsrd_jsoninfo.so.0.0"
EOF
uci_commitverbose "Setup olsr jsoninfo 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
done

View file

@ -7,12 +7,22 @@ net=$1
. /lib/functions.sh
. $dir/functions.sh
local protocols="4"
if [ "$ipv6_enabled" = 1 ] && [ "$has_ipv6" == "1" ]; then
protocols="4 6"
fi
for proto in $protocols; do
cfg="olsrd"
[ "$proto" == "6" ] && cfg="olsrd6"
# Rename interface for $netrenamed
handle_interface() {
config_get interface "$1" Interface
if [ "$interface" == "$netrenamed" ]; then
if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then
section_rename olsrd $1 $netrenamed
section_rename $cfg $1 $netrenamed
fi
fi
}
@ -21,40 +31,46 @@ config_foreach handle_interface Interface
# Setup new interface for $netrenamed
uci set olsrd.$netrenamed=Interface
set_defaults "olsr_interface_" olsrd.$net
uci set olsrd.$netrenamed.interface="$netrenamed"
uci set $cfg.$netrenamed=Interface
set_defaults "olsr_interface_" $cfg.$net
uci set $cfg.$netrenamed.interface="$netrenamed"
uci_commitverbose "Setup olsr interface for $netrenamed." olsrd
uci_commitverbose "Setup olsr interface for $netrenamed." $cfg
if [ "$proto" = "4" ]; then
# If dhcp-network is inside the mesh_network then add HNA for it
dhcprange=$(uci -q get meshwizard.netconfig.$net\_dhcprange)
uci -q delete olsrd.${netrenamed}clients
uci -q delete $cfg.${netrenamed}clients
if [ -n "$dhcprange" ]; then
meshnet="$(uci get profile_$community.profile.mesh_network)"
dhcpinmesh="$($dir/helpers/check-range-in-range.sh $dhcprange $meshnet)"
if [ "$dhcpinmesh" == 1 ] && [ -n "$meshnet" ]; then
uci set olsrd.${netrenamed}clients="Hna4"
uci set $cfg.${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"
uci_commitverbose "Setup HNA for network $dhcprange" olsrd
uci set $cfg.${netrenamed}clients.netaddr="$NETWORK"
uci set $cfg.${netrenamed}clients.netmask="$NETMASK"
uci_commitverbose "Setup HNA for network $dhcprange" $cfg
fi
fi
fi
if [ "$proto" = "6" ]; then
# Set Hna entry for ipv6 net for static ipv6 config
uci -q delete olsrd.${netrenamed}static
if [ "$ipv6_enabled" = "1" ] && [ "$ipv6_config" = "static" ]; then
uci -q delete $cfg.${netrenamed}static
if [ "$ipv6_config" = "static" ]; then
local v6range="$(uci -q get meshwizard.netconfig.$net\_ip6addr)"
local v6net="$(echo $v6range | cut -d '/' -f 1)"
local v6mask="$(echo $v6range | cut -d '/' -f 2)"
if [ -n "$v6net" ] && [ -n "$v6mask" ]; then
uci set olsrd.${netrenamed}static="Hna6"
uci set olsrd.${netrenamed}static.netaddr="$v6net"
uci set olsrd.${netrenamed}static.prefix="$v6mask"
uci_commitverbose "Setup HNA for network $v6range" olsrd
uci set $cfg.${netrenamed}static="Hna6"
uci set $cfg.${netrenamed}static.netaddr="$v6net"
uci set $cfg.${netrenamed}static.prefix="$v6mask"
uci_commitverbose "Setup HNA for network $v6range" $cfg
fi
fi
fi
done