Änderungen

Multiood
Zeile 794: Zeile 794:  
uci commit firewall
 
uci commit firewall
 
</pre>
 
</pre>
 +
 +
== Multihood ==
 +
 +
=== /lib/netifd/proto/bat.sh ===
 +
Make executable
 +
#!/bin/sh
 +
 +
. /lib/functions.sh
 +
. ../netifd-proto.sh
 +
init_proto "$@"
 +
 +
proto_bat_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_bat_renew() {
 +
local CONFIG="$1"
 +
 +
local ifname
 +
json_get_vars ifname
 +
 +
local IFNAME="${ifname:-$CONFIG}"
 +
 +
lock /var/lock/"$IFNAME".bat.lock
 +
 +
ubus call network.interface dump | jsonfilter \
 +
-e "@.interface[@.proto='batif' && @.data.mesh='${IFNAME:4}' && @.up=true].device" \
 +
| xargs -r -n 1 batctl -m "$IFNAME" interface add
 +
 +
lock -u /var/lock/"$IFNAME".bat.lock
 +
}
 +
 +
proto_bat_setup() {
 +
local CONFIG="$1"
 +
 +
local routing_algo=$(lookup_site 'mesh.batman_adv.routing_algo' 'BATMAN_IV')
 +
 +
local gw_mode ifname
 +
json_get_vars gw_mode ifname
 +
 +
local IFNAME="${ifname:-$CONFIG}"
 +
 +
batctl -m "$IFNAME" routing_algo "$routing_algo"
 +
batctl -m "$IFNAME" interface create
 +
 +
batctl -m "$IFNAME" orig_interval 5000
 +
batctl -m "$IFNAME" hop_penalty "$(lookup_uci 'gluon.mesh_batman_adv.hop_penalty' 15)"
 +
batctl -m "$IFNAME" multicast_mode 0
 +
 +
case "$gw_mode" in
 +
server)
 +
batctl -m "$IFNAME" gw_mode "server"
 +
;;
 +
client)
 +
local gw_sel_class="$(lookup_site 'mesh.batman_adv.gw_sel_class')"
 +
if [ -n "$gw_sel_class" ]; then
 +
batctl -m "$IFNAME" gw_mode "client" "$gw_sel_class"
 +
else
 +
batctl -m "$IFNAME" gw_mode "client"
 +
fi
 +
;;
 +
*)
 +
batctl -m "$IFNAME" gw_mode "off"
 +
;;
 +
esac
 +
 +
 +
local primary0_mac="$(lua -e 'print(require("gluon.util").generate_mac(3))')"
 +
 +
ip link add "pri-${IFNAME:4}" type dummy
 +
echo 1 > /proc/sys/net/ipv6/conf/"pri-${IFNAME:4}"/disable_ipv6
 +
ip link set "pri-${IFNAME:4}" address "$primary0_mac" mtu 1532 up
 +
 +
ip link set "$IFNAME" address "$(lua -e 'print(require("gluon.sysconfig").primary_mac)')"
 +
 +
batctl -m "$IFNAME" interface add "pri-${IFNAME:4}"
 +
 +
proto_init_update "pri-${IFNAME:4}" 1
 +
proto_init_update "$IFNAME" 1
 +
proto_send_update "$CONFIG"
 +
 +
proto_bat_renew "$1"
 +
}
 +
 +
proto_bat_teardown() {
 +
local CONFIG="$1"
 +
local IFNAME="$2"
 +
 +
batctl -m "$IFNAME" interface destroy
 +
ip link del "pri-${IFNAME:4}"
 +
}
 +
 +
add_protocol bat
 +
 +
=== /lib/netifd/proto/batif.sh ===
 +
Make executable
 +
#!/bin/sh
 +
 +
. /lib/functions.sh
 +
. ../netifd-proto.sh
 +
init_proto "$@"
 +
 +
proto_batif_init_config() {
 +
proto_config_add_string 'mesh'
 +
}
 +
 +
proto_batif_setup() {
 +
local CONFIG="$1"
 +
local IFNAME="$2"
 +
 +
local mesh
 +
json_get_vars mesh
 +
 +
ubus call network.interface."$CONFIG" set_data "{\"mesh\":\"$mesh\"}"
 +
 +
proto_init_update "$IFNAME" 1
 +
proto_send_update "$CONFIG"
 +
 +
ubus call network.interface."bat_${mesh}" renew
 +
}
 +
 +
proto_batif_teardown() {
 +
local CONFIG="$1"
 +
local IFNAME="$2"
 +
 +
batctl -m "bat-${mesh}" interface -M del "$IFNAME" 2>/dev/null
 +
}
 +
 +
add_protocol batif
 +
 +
=== Beispiel Netzwerkkonfiguration ===
 +
config interface 'mesh_vlan123'
 +
option ifname 'eth0.123'
 +
option proto 'batif'
 +
option mesh 'hood2'
 +
   
 +
config interface 'bat_hood2'
 +
option ifname 'bat-hood2'
 +
option gw_mode 'client'
 +
option proto 'bat'