#!/bin/sh
-. /lib/functions.sh
-. ../netifd-proto.sh
-init_proto "$@"
+[ -n "$INCLUDE_ONLY" ] || {
+ . /lib/functions.sh
+ . ../netifd-proto.sh
+ init_proto "$@"
+}
proto_batadv_init_config() {
- proto_config_add_string "mesh"
- proto_config_add_string "routing_algo"
+ 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_boolean 'network_coding:bool'
+ proto_config_add_int 'orig_interval'
+ proto_config_add_string 'routing_algo'
}
proto_batadv_setup() {
local config="$1"
- local iface="$2"
+ 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 network_coding
+ 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 network_coding
+ 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"
- local mesh routing_algo
- json_get_vars mesh routing_algo
+ 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 "$routing_algo" ] || routing_algo="BATMAN_IV"
- echo "$routing_algo" > "/sys/module/batman_adv/parameters/routing_algo"
+ [ -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 "$network_coding" ] && batctl meshif "$iface" network_coding "$network_coding" 2>&-
+ [ -n "$log_level" ] && batctl meshif "$iface" loglevel "$log_level" 2>&-
+ [ -n "$orig_interval" ] && batctl meshif "$iface" orig_interval "$orig_interval"
- echo "$mesh" > "/sys/class/net/$iface/batman_adv/mesh_iface"
proto_init_update "$iface" 1
proto_send_update "$config"
}
proto_batadv_teardown() {
local config="$1"
- local iface="$2"
+ local iface="$config"
- echo "none" > "/sys/class/net/$iface/batman_adv/mesh_iface" || true
+ batctl meshif "$iface" interface destroy
}
add_protocol batadv