Skip to content
Snippets Groups Projects
gluon_bat0.sh 1.75 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/bin/sh
    
    . /lib/functions.sh
    . ../netifd-proto.sh
    init_proto "$@"
    
    proto_gluon_bat0_init_config() {
    	no_device=1
    	available=1
    	renew_handler=1
    
    
    	proto_config_add_string 'gw_mode'
    }
    
    lookup_site() {
    	local path="$1" default="$2"
    	lua -e "print(require('gluon.site').$path('$default'))"
    
    lookup_uci() {
    	local path="$1" default="$2"
    	uci -q get "$path" || echo "$default"
    }
    
    
    proto_gluon_bat0_renew() {
    	local config="$1"
    
    	lock /var/lock/gluon_bat0.lock
    
    
    	ubus call network.interface dump | jsonfilter \
    		-e "@.interface[@.proto='gluon_mesh' && @.up=true].device" \
    	| xargs -r -n 1 batctl interface add
    
    
    	lock -u /var/lock/gluon_bat0.lock
    }
    
    proto_gluon_bat0_setup() {
    	local config="$1"
    
    
    	local routing_algo=$(lookup_site 'mesh.batman_adv.routing_algo' 'BATMAN_IV')
    
    	local gw_mode
    	json_get_vars gw_mode
    
    	batctl routing_algo "$routing_algo"
    	batctl interface create
    
    	batctl orig_interval 5000
    
    	batctl hop_penalty "$(lookup_uci 'gluon.mesh_batman_adv.hop_penalty' 15)"
    
    	batctl multicast_mode 0
    
    	case "$gw_mode" in
    		server)
    			batctl gw_mode "server"
    		;;
    		client)
    			local gw_sel_class="$(lookup_site 'mesh.batman_adv.gw_sel_class')"
    			if [ -n "$gw_sel_class" ]; then
    				batctl gw_mode "client" "$gw_sel_class"
    			else
    				batctl gw_mode "client"
    			fi
    		;;
    		*)
    			batctl gw_mode "off"
    		;;
    	esac
    
    
    
    	local primary0_mac="$(lua -e 'print(require("gluon.util").generate_mac(3))')"
    
    
    	ip link add primary0 type dummy
    	echo 1 > /proc/sys/net/ipv6/conf/primary0/disable_ipv6
    	ip link set primary0 address "$primary0_mac" mtu 1532 up
    
    
    	proto_init_update primary0 1
    	proto_send_update "$config"
    
    	proto_gluon_bat0_renew "$1"
    }
    
    proto_gluon_bat0_teardown() {
    	local config="$1"
    
    
    	ip link del primary0
    }
    
    add_protocol gluon_bat0