summaryrefslogtreecommitdiff
path: root/files/etc/init.d/batman-adv
blob: 6ecb7ea9b5ee209e340201b0590dae1e4ac146bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/bin/sh /etc/rc.common
START=90

is_module_loaded() {

	if [ ! -d "/sys/module/batman_adv" ]; then
		echo "batman-adv module directory not found - was the kernel module loaded ?" >&2
		return 0
	fi

	return 1
}

start_mesh () {
	local meshif="$1"
	local interfaces orig_interval log_level aggregated_ogms bonding vis_mode

	is_module_loaded
	[ $? -ne 1 ] && return

	config_get interfaces "$meshif" interfaces
	config_get orig_interval "$meshif" orig_interval
	config_get log_level "$meshif" log_level
	config_get aggregated_ogms "$meshif" aggregated_ogms
	config_get bonding "$meshif" bonding
	config_get gw_mode "$meshif" gw_mode

	config_get vis_mode "$meshif" vis_mode

	if [ "$interfaces" = "" ]; then
		echo Error, you must specify at least a network interface
		return
	fi

	for interface in $interfaces
	   do
		[ ! -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
	   done

	if [ $orig_interval ]; then
		echo $orig_interval > /sys/class/net/$meshif/mesh/orig_interval
	fi

	if [ $log_level ]; then
		echo $log_level > /sys/class/net/$meshif/mesh/log_level 2>&-
	fi

	if [ $aggregated_ogms ]; then
		echo $aggregated_ogms > /sys/class/net/$meshif/mesh/aggregated_ogms
	fi
	
	if [ $bonding ]; then
		echo $bonding > /sys/class/net/$meshif/mesh/bonding
	fi

	if [ $vis_mode ]; then
		echo $vis_mode > /sys/class/net/$meshif/mesh/vis_mode
	fi
	
	if [ $gw_mode ]; then
		echo $gw_mode > /sys/class/net/$meshif/mesh/gw_mode
	fi
}

stop_mesh() {
	local meshif="$1"

	is_module_loaded
	[ $? -ne 1 ] && return

	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
}


contact: Jan Huwald // Impressum