#!/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
}