summaryrefslogtreecommitdiffstats
path: root/net/batman-adv/files/lib/netifd/proto/batadv.sh
blob: 4ef490d3d7d838c29fa6284e02b1f31b21d8c220 (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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/bin/sh

[ -n "$INCLUDE_ONLY" ] || {
	. /lib/functions.sh
	. ../netifd-proto.sh
	init_proto "$@"
}

proto_batadv_init_config() {
	no_device=1
	available=1

	proto_config_add_boolean 'aggregated_ogms:bool'
	proto_config_add_boolean 'ap_isolation:bool'
	proto_config_add_boolean 'bonding:bool'
	proto_config_add_boolean 'bridge_loop_avoidance:bool'
	proto_config_add_boolean 'distributed_arp_table:bool'
	proto_config_add_boolean 'fragmentation:bool'
	proto_config_add_string 'gw_bandwidth'
	proto_config_add_string 'gw_mode'
	proto_config_add_int 'gw_sel_class'
	proto_config_add_int 'hop_penalty'
	proto_config_add_string 'isolation_mark'
	proto_config_add_string 'log_level'
	proto_config_add_int 'multicast_fanout'
	proto_config_add_boolean 'multicast_mode:bool'
	proto_config_add_int 'orig_interval'
	proto_config_add_string 'routing_algo'
}

proto_batadv_setup() {
	local config="$1"
	local iface="$config"

	local aggregated_ogms
	local ap_isolation
	local bonding
	local bridge_loop_avoidance
	local distributed_arp_table
	local fragmentation
	local gw_bandwidth
	local gw_mode
	local gw_sel_class
	local hop_penalty
	local isolation_mark
	local log_level
	local multicast_fanout
	local multicast_mode
	local orig_interval
	local routing_algo

	json_get_vars aggregated_ogms
	json_get_vars ap_isolation
	json_get_vars bonding
	json_get_vars bridge_loop_avoidance
	json_get_vars distributed_arp_table
	json_get_vars fragmentation
	json_get_vars gw_bandwidth
	json_get_vars gw_mode
	json_get_vars gw_sel_class
	json_get_vars hop_penalty
	json_get_vars isolation_mark
	json_get_vars log_level
	json_get_vars multicast_fanout
	json_get_vars multicast_mode
	json_get_vars orig_interval
	json_get_vars routing_algo

	set_default routing_algo 'BATMAN_IV'

	batctl routing_algo "$routing_algo"
	batctl meshif "$iface" interface create

	[ -n "$aggregated_ogms" ] && batctl meshif "$iface" aggregation "$aggregated_ogms"
	[ -n "$ap_isolation" ] && batctl meshif "$iface" ap_isolation "$ap_isolation"
	[ -n "$bonding" ] && batctl meshif "$iface" bonding "$bonding"
	[ -n "$bridge_loop_avoidance" ] &&  batctl meshif "$iface" bridge_loop_avoidance "$bridge_loop_avoidance" 2>&-
	[ -n "$distributed_arp_table" ] && batctl meshif "$iface" distributed_arp_table "$distributed_arp_table" 2>&-
	[ -n "$fragmentation" ] && batctl meshif "$iface" fragmentation "$fragmentation"

	case "$gw_mode" in
	server)
		if [ -n "$gw_bandwidth" ]; then
			batctl meshif "$iface" gw_mode "server" "$gw_bandwidth"
		else
			batctl meshif "$iface" gw_mode "server"
		fi
		;;
	client)
		if [ -n "$gw_sel_class" ]; then
			batctl meshif "$iface" gw_mode "client" "$gw_sel_class"
		else
			batctl meshif "$iface" gw_mode "client"
		fi
		;;
	*)
		batctl meshif "$iface" gw_mode "off"
		;;
	esac

	[ -n "$hop_penalty" ] && batctl meshif "$iface" hop_penalty "$hop_penalty"
	[ -n "$isolation_mark" ] && batctl meshif "$iface" isolation_mark "$isolation_mark"
	[ -n "$multicast_fanout" ] && batctl meshif "$iface" multicast_fanout "$multicast_fanout"
	[ -n "$multicast_mode" ] && batctl meshif "$iface" multicast_mode "$multicast_mode" 2>&-
	[ -n "$log_level" ] && batctl meshif "$iface" loglevel "$log_level" 2>&-
	[ -n "$orig_interval" ] && batctl meshif "$iface" orig_interval "$orig_interval"

	proto_init_update "$iface" 1
	proto_send_update "$config"
}

proto_batadv_teardown() {
	local config="$1"
	local iface="$config"

	batctl meshif "$iface" interface destroy
}

add_protocol batadv