89b7612fdb
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.
61 lines
1.7 KiB
Bash
Executable File
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
|
|
}
|