109 lines
2.2 KiB
Plaintext
109 lines
2.2 KiB
Plaintext
|
#!/bin/sh /etc/rc.common
|
||
|
START=90
|
||
|
|
||
|
MODULE_DIR="/sys/module/batman_adv"
|
||
|
|
||
|
detect_version() {
|
||
|
local version
|
||
|
|
||
|
if [ ! -d "$MODULE_DIR" ]; then
|
||
|
echo "batman-adv module directory not found - is the module loaded ?" >&2
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
version=$(cat $MODULE_DIR/version)
|
||
|
|
||
|
if [ "$version" != "${version#0.3*}" ]; then
|
||
|
BAT_VER="0.3"
|
||
|
elif [ "$version" != "${version#0.2*}" ]; then
|
||
|
BAT_VER="0.2"
|
||
|
else
|
||
|
echo "Error - unknown version encountered: $version" >&2
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
start_mesh () {
|
||
|
local meshif="$1"
|
||
|
|
||
|
detect_version
|
||
|
[ $? -ne 0 ] && return 1
|
||
|
|
||
|
config_get interfaces "$meshif" interfaces
|
||
|
config_get orig_interval "$meshif" orig_interval
|
||
|
config_get log_level "$meshif" log_level
|
||
|
|
||
|
if [ "$interfaces" = "" ]; then
|
||
|
echo Error, you must specify at least a network interface
|
||
|
return
|
||
|
fi
|
||
|
|
||
|
for interface in $interfaces
|
||
|
do
|
||
|
if [ "$BAT_VER" = "0.2" ]; then
|
||
|
echo $interface > /proc/net/batman-adv/interfaces
|
||
|
else
|
||
|
[ ! -f "/sys/class/net/$interface/batman_adv/mesh_iface" ] && echo "Can't add interface $interface - ignoring" && continue
|
||
|
echo $meshif > /sys/class/net/$interface/batman_adv/mesh_iface
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
if [ $orig_interval ]; then
|
||
|
if [ "$BAT_VER" = "0.2" ]; then
|
||
|
echo $orig_interval > /proc/net/batman-adv/orig_interval
|
||
|
else
|
||
|
echo $orig_interval > /sys/class/net/$meshif/batman_adv/originator_interval
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
if [ $log_level ]; then
|
||
|
echo $log_level > /sys/module/batman_adv/parameters/debug 2>&-
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
stop_mesh() {
|
||
|
local meshif="$1"
|
||
|
|
||
|
detect_version
|
||
|
[ $? -ne 0 ] && return 1
|
||
|
|
||
|
if [ "$BAT_VER" = "0.2" ]; then
|
||
|
echo "" > /proc/net/batman-adv/interfaces
|
||
|
return
|
||
|
fi
|
||
|
|
||
|
for iface in $(ls /sys/class/net/*)
|
||
|
do
|
||
|
[ ! -f "$iface/batman_adv/mesh_iface" ] && continue
|
||
|
[ "$(head -1 $iface/batman_adv/mesh_iface)" != "status: $meshif" ] && continue
|
||
|
|
||
|
echo "none" > $iface/batman_adv/mesh_iface
|
||
|
done
|
||
|
}
|
||
|
|
||
|
# can also be used with "batman-adv start bat0"
|
||
|
start() {
|
||
|
config_load batman-adv
|
||
|
|
||
|
if [ -n "$1" ]; then
|
||
|
start_mesh $1
|
||
|
else
|
||
|
config_foreach start_mesh mesh
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# can also be used with "batman-adv stop bat0"
|
||
|
stop () {
|
||
|
config_load batman-adv
|
||
|
|
||
|
if [ -n "$1" ]; then
|
||
|
stop_mesh $1
|
||
|
else
|
||
|
config_foreach stop_mesh mesh
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
|