batman-adv: Split batadv proto in meshif and hardif part
[feed/routing.git] / batman-adv / files / lib / netifd / proto / batadv.sh
index 2233091..eb8153c 100755 (executable)
 #!/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_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_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_mode
+       json_get_vars network_coding
+       json_get_vars orig_interval
+       json_get_vars routing_algo
 
-       local mesh routing_algo
-       json_get_vars mesh routing_algo
+       set_default routing_algo 'BATMAN_IV'
 
-       [ -n "$routing_algo" ] || routing_algo="BATMAN_IV"
        batctl routing_algo "$routing_algo"
+       batctl -m "$iface" interface create
+
+       [ -n "$aggregated_ogms" ] && batctl -m "$iface" aggregation "$aggregated_ogms"
+       [ -n "$ap_isolation" ] && batctl -m "$iface" ap_isolation "$ap_isolation"
+       [ -n "$bonding" ] && batctl -m "$iface" bonding "$bonding"
+       [ -n "$bridge_loop_avoidance" ] &&  batctl -m "$iface" bridge_loop_avoidance "$bridge_loop_avoidance" 2>&-
+       [ -n "$distributed_arp_table" ] && batctl -m "$iface" distributed_arp_table "$distributed_arp_table" 2>&-
+       [ -n "$fragmentation" ] && batctl -m "$iface" fragmentation "$fragmentation"
+
+       case "$gw_mode" in
+       server)
+               if [ -n "$gw_bandwidth" ]; then
+                       batctl -m "$iface" gw_mode "server" "$gw_bandwidth"
+               else
+                       batctl -m "$iface" gw_mode "server"
+               fi
+               ;;
+       client)
+               if [ -n "$gw_sel_class" ]; then
+                       batctl -m "$iface" gw_mode "client" "$gw_sel_class"
+               else
+                       batctl -m "$iface" gw_mode "client"
+               fi
+               ;;
+       *)
+               batctl -m "$iface" gw_mode "off"
+               ;;
+       esac
+
+       [ -n "$hop_penalty" ] && batctl -m "$iface" hop_penalty "$hop_penalty"
+       [ -n "$isolation_mark" ] && batctl -m "$iface" isolation_mark "$isolation_mark"
+       [ -n "$multicast_mode" ] && batctl -m "$iface" multicast_mode "$multicast_mode" 2>&-
+       [ -n "$network_coding" ] && batctl -m "$iface" network_coding "$network_coding" 2>&-
+       [ -n "$log_level" ] && batctl -m "$iface" loglevel "$log_level" 2>&-
+       [ -n "$orig_interval" ] && batctl -m "$iface" orig_interval "$orig_interval"
 
-       batctl -m "$mesh" interface add "$iface"
        proto_init_update "$iface" 1
        proto_send_update "$config"
 }
 
 proto_batadv_teardown() {
        local config="$1"
-       local iface="$2"
-
-       local mesh
-       json_get_vars mesh
+       local iface="$config"
 
-       batctl -m "$mesh" interface del "$iface" || true
+       batctl -m "$iface" interface destroy
 }
 
 add_protocol batadv