gluon/package/gluon-l3roamd/files/etc/init.d/gluon-l3roamd
Christof Schulze 89b7612fdb gluon-l3roamd: init: dynamically configure mesh interfaces gracefully during reload
This patch makes use of the new feature in l3roamd to gracefully
add, remove and list the mesh interfaces that are currently in use. This
helps when changing mesh interfaces often - a characteristic of the
wireguard protocol implementation as in the previous behavior all local
clients are dropped when adjusting mesh interfaces.
2018-11-26 01:20:31 +01:00

61 lines
1.7 KiB
Bash
Executable File

#!/bin/sh /etc/rc.common
START=55
USE_PROCD=1
PROG=/usr/sbin/l3roamd
echotol3roamd() {
local count=0
local line="$1"
while ! (echo -e "$line" | uc /var/run/l3roamd.sock >/dev/null 2>&1)
do
sleep 1
echo retrying to connect to l3roamd in PID $$, waited ${count}s >&2
count=$((count+1))
done
return 0
}
reload_service() {
for i in $(ubus call network.interface dump | jsonfilter -e "@.interface[@.proto='gluon_mesh' && @.up=true].device")
do
echotol3roamd "add_meshif $i"
done
for i in $(echotol3roamd "get_meshifs"| jsonfilter -e "@.mesh_interfaces[@]")
do
if ! ubus call network.interface dump | jsonfilter -e "@.interface[@.proto='gluon_mesh' && @.up=true].device"|grep -q $i
then
echotol3roamd "del_meshif $i"
fi
done
}
start_service () {
local interfaces=$(
for dev in $(gluon-list-mesh-interfaces); do echo " -m $dev"; done
[ "$(ifstatus local_node | jsonfilter -e '@.up')" = 'true' ] && echo ' -i local-node'
)
/sbin/sysctl -w net.ipv6.neigh.default.gc_thresh1=2
/sbin/sysctl -w net.ipv4.neigh.default.gc_thresh1=2
procd_open_instance
procd_set_param stdout 1
procd_set_param stderr 1
procd_set_param respawn ${respawn_threshold:-3660} ${respawn_timeout:-5} ${respawn_retry:-0}
procd_set_param command "$PROG" -s /var/run/l3roamd.sock -p $(lua -e 'print(require("gluon.site").prefix6())') $interfaces -t 254 -a $(uci get network.loopback.ip6addr | cut -d/ -f1) -4 0:0:0:0:0:ffff::/96 -b br-client
procd_close_instance
}
service_triggers() {
local script=$(readlink "$initscript")
local name=$(basename "${script:-$initscript}")
procd_open_trigger
procd_add_raw_trigger 'interface.*' 0 "/etc/init.d/$name" reload
procd_close_trigger
}