Merge pull request #13853 from TDT-AG/pr/20201104-mwan3
mwan3: code cleanup and fixes
This commit is contained in:
commit
9e424325b5
9 changed files with 67 additions and 52 deletions
|
@ -8,7 +8,7 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=mwan3
|
PKG_NAME:=mwan3
|
||||||
PKG_VERSION:=2.10.1
|
PKG_VERSION:=2.10.2
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
PKG_MAINTAINER:=Florian Eckert <fe@dev.tdt.de>
|
PKG_MAINTAINER:=Florian Eckert <fe@dev.tdt.de>
|
||||||
PKG_LICENSE:=GPL-2.0
|
PKG_LICENSE:=GPL-2.0
|
||||||
|
@ -63,12 +63,52 @@ exit 0
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Build/Compile
|
define Build/Compile
|
||||||
$(TARGET_CC) $(CFLAGS) $(LDFLAGS) $(FPIC) -shared -o $(PKG_BUILD_DIR)/libwrap_mwan3_sockopt.so.1.0 $(if $(CONFIG_IPV6),-DCONFIG_IPV6) $(PKG_BUILD_DIR)/sockopt_wrap.c -ldl
|
$(TARGET_CC) $(CFLAGS) $(LDFLAGS) $(FPIC) \
|
||||||
|
-shared \
|
||||||
|
-o $(PKG_BUILD_DIR)/libwrap_mwan3_sockopt.so.1.0 \
|
||||||
|
$(if $(CONFIG_IPV6),-DCONFIG_IPV6) \
|
||||||
|
$(PKG_BUILD_DIR)/sockopt_wrap.c \
|
||||||
|
-ldl
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/mwan3/install
|
define Package/mwan3/install
|
||||||
$(CP) ./files/* $(1)
|
$(INSTALL_DIR) $(1)/etc/config
|
||||||
|
$(INSTALL_CONF) ./files/etc/config/mwan3 \
|
||||||
|
$(1)/etc/config/
|
||||||
|
|
||||||
|
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
|
||||||
|
$(INSTALL_DATA) ./files/etc/hotplug.d/iface/15-mwan3 \
|
||||||
|
$(1)/etc/hotplug.d/iface/
|
||||||
|
$(INSTALL_DATA) ./files/etc/hotplug.d/iface/16-mwan3-user \
|
||||||
|
$(1)/etc/hotplug.d/iface/
|
||||||
|
|
||||||
|
$(INSTALL_DIR) $(1)/etc/init.d
|
||||||
|
$(INSTALL_BIN) ./files/etc/init.d/mwan3 \
|
||||||
|
$(1)/etc/init.d/
|
||||||
|
|
||||||
|
$(INSTALL_DIR) $(1)/lib/mwan3
|
||||||
|
$(INSTALL_DATA) ./files/lib/mwan3/common.sh \
|
||||||
|
$(1)/lib/mwan3/
|
||||||
|
$(INSTALL_DATA) ./files/lib/mwan3/mwan3.sh \
|
||||||
|
$(1)/lib/mwan3/
|
||||||
|
|
||||||
|
$(INSTALL_DIR) $(1)/usr/libexec/rpcd
|
||||||
|
$(INSTALL_BIN) ./files/usr/libexec/rpcd/mwan3 \
|
||||||
|
$(1)/usr/libexec/rpcd/
|
||||||
|
|
||||||
|
$(INSTALL_DIR) $(1)/usr/sbin
|
||||||
|
$(INSTALL_BIN) ./files/usr/sbin/mwan3 \
|
||||||
|
$(1)/usr/sbin/
|
||||||
|
$(INSTALL_BIN) ./files/usr/sbin/mwan3rtmon \
|
||||||
|
$(1)/usr/sbin/
|
||||||
|
$(INSTALL_BIN) ./files/usr/sbin/mwan3track \
|
||||||
|
$(1)/usr/sbin/
|
||||||
|
|
||||||
$(CP) $(PKG_BUILD_DIR)/libwrap_mwan3_sockopt.so.1.0 $(1)/lib/mwan3/
|
$(CP) $(PKG_BUILD_DIR)/libwrap_mwan3_sockopt.so.1.0 $(1)/lib/mwan3/
|
||||||
|
|
||||||
|
$(INSTALL_DIR) $(1)/etc/uci-defaults
|
||||||
|
$(INSTALL_DATA) ./files/etc/uci-defaults/mwan3-migrate-flush_conntrack \
|
||||||
|
$(1)/etc/uci-defaults/
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(eval $(call BuildPackage,mwan3))
|
$(eval $(call BuildPackage,mwan3))
|
||||||
|
|
|
@ -3,9 +3,12 @@
|
||||||
. /lib/functions.sh
|
. /lib/functions.sh
|
||||||
. /lib/functions/network.sh
|
. /lib/functions/network.sh
|
||||||
. /lib/mwan3/mwan3.sh
|
. /lib/mwan3/mwan3.sh
|
||||||
. /usr/share/libubox/jshn.sh
|
|
||||||
. /lib/mwan3/common.sh
|
. /lib/mwan3/common.sh
|
||||||
|
|
||||||
|
initscript=/etc/init.d/mwan3
|
||||||
|
. /lib/functions/procd.sh
|
||||||
|
|
||||||
|
|
||||||
SCRIPTNAME="mwan3-hotplug"
|
SCRIPTNAME="mwan3-hotplug"
|
||||||
[ "$ACTION" = "ifup" ] || [ "$ACTION" = "ifdown" ] || [ "$ACTION" = "connected" ] || [ "$ACTION" = "disconnected" ] || exit 1
|
[ "$ACTION" = "ifup" ] || [ "$ACTION" = "ifdown" ] || [ "$ACTION" = "connected" ] || [ "$ACTION" = "disconnected" ] || exit 1
|
||||||
[ -n "$INTERFACE" ] || exit 2
|
[ -n "$INTERFACE" ] || exit 2
|
||||||
|
@ -16,18 +19,17 @@ if { [ "$ACTION" = "ifup" ] || [ "$ACTION" = "connected" ] ; } && [ -z "$DEVICE"
|
||||||
exit 3
|
exit 3
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ "$MWAN3_STARTUP" = 1 ] || mwan3_lock "$ACTION" "$INTERFACE"
|
[ "$MWAN3_STARTUP" = 1 ] || procd_lock
|
||||||
|
|
||||||
config_load mwan3
|
config_load mwan3
|
||||||
/etc/init.d/mwan3 running || {
|
/etc/init.d/mwan3 running || {
|
||||||
[ "$MWAN3_STARTUP" = 1 ] || mwan3_unlock "$ACTION" "$INTERFACE"
|
[ "$MWAN3_STARTUP" = "init" ] || procd_lock
|
||||||
LOG notice "mwan3 hotplug $ACTION on $INTERFACE not called because globally disabled"
|
LOG notice "mwan3 hotplug $ACTION on $INTERFACE not called because globally disabled"
|
||||||
mwan3_flush_conntrack "$INTERFACE" "$ACTION"
|
mwan3_flush_conntrack "$INTERFACE" "$ACTION"
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
$IPT4 -S mwan3_hook &>/dev/null || {
|
$IPT4 -S mwan3_hook &>/dev/null || {
|
||||||
mwan3_unlock "$ACTION" "$INTERFACE"
|
|
||||||
LOG warn "hotplug called on $INTERFACE before mwan3 has been set up"
|
LOG warn "hotplug called on $INTERFACE before mwan3 has been set up"
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
@ -44,7 +46,6 @@ fi
|
||||||
|
|
||||||
config_get_bool enabled $INTERFACE 'enabled' '0'
|
config_get_bool enabled $INTERFACE 'enabled' '0'
|
||||||
[ "${enabled}" -eq 1 ] || {
|
[ "${enabled}" -eq 1 ] || {
|
||||||
[ "$MWAN3_STARTUP" = 1 ] || mwan3_unlock "$ACTION" "$INTERFACE"
|
|
||||||
LOG notice "mwan3 hotplug on $INTERFACE not called because interface disabled"
|
LOG notice "mwan3 hotplug on $INTERFACE not called because interface disabled"
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
@ -57,11 +58,6 @@ else
|
||||||
status=online
|
status=online
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$ACTION" = ifup ] || [ "$ACTION" = ifdown ]; then
|
|
||||||
initscript=/etc/init.d/mwan3
|
|
||||||
. /lib/functions/procd.sh
|
|
||||||
fi
|
|
||||||
|
|
||||||
LOG notice "Execute $ACTION event on interface $INTERFACE (${DEVICE:-unknown})"
|
LOG notice "Execute $ACTION event on interface $INTERFACE (${DEVICE:-unknown})"
|
||||||
|
|
||||||
case "$ACTION" in
|
case "$ACTION" in
|
||||||
|
@ -73,8 +69,9 @@ case "$ACTION" in
|
||||||
mwan3_create_iface_iptables $INTERFACE $DEVICE
|
mwan3_create_iface_iptables $INTERFACE $DEVICE
|
||||||
mwan3_create_iface_rules $INTERFACE $DEVICE
|
mwan3_create_iface_rules $INTERFACE $DEVICE
|
||||||
mwan3_set_iface_hotplug_state $INTERFACE "$status"
|
mwan3_set_iface_hotplug_state $INTERFACE "$status"
|
||||||
if [ "$MWAN3_STARTUP" != 1 ]; then
|
if [ "$MWAN3_STARTUP" = "cmd" ]; then
|
||||||
mwan3_create_iface_route $INTERFACE $DEVICE
|
mwan3_create_iface_route $INTERFACE $DEVICE
|
||||||
|
mwan3_set_general_rules
|
||||||
[ "$status" = "online" ] && mwan3_set_policies_iptables
|
[ "$status" = "online" ] && mwan3_set_policies_iptables
|
||||||
fi
|
fi
|
||||||
[ "$ACTION" = ifup ] && procd_running mwan3 "track_$INTERFACE" && procd_send_signal mwan3 "track_$INTERFACE" USR2
|
[ "$ACTION" = ifup ] && procd_running mwan3 "track_$INTERFACE" && procd_send_signal mwan3 "track_$INTERFACE" USR2
|
||||||
|
@ -93,5 +90,4 @@ case "$ACTION" in
|
||||||
mwan3_set_policies_iptables
|
mwan3_set_policies_iptables
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
[ "$MWAN3_STARTUP" = 1 ] || mwan3_unlock "$ACTION" "$INTERFACE"
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|
|
@ -3,11 +3,12 @@
|
||||||
[ -f "/etc/mwan3.user" ] && {
|
[ -f "/etc/mwan3.user" ] && {
|
||||||
. /lib/functions.sh
|
. /lib/functions.sh
|
||||||
. /lib/mwan3/mwan3.sh
|
. /lib/mwan3/mwan3.sh
|
||||||
|
initscript=/etc/init.d/mwan3
|
||||||
|
. /lib/functions/procd.sh
|
||||||
|
|
||||||
[ "$MWAN3_SHUTDOWN" != 1 ] && mwan3_lock "$ACTION" "$DEVICE-user"
|
[ "$MWAN3_SHUTDOWN" != 1 ] && procd_lock
|
||||||
|
|
||||||
[ "$MWAN3_SHUTDOWN" != 1 ] && ! /etc/init.d/mwan3 running && {
|
[ "$MWAN3_SHUTDOWN" != 1 ] && ! /etc/init.d/mwan3 running && {
|
||||||
mwan3_unlock "$ACTION" "$DEVICE-user"
|
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,8 +20,6 @@
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
[ "$MWAN3_SHUTDOWN" != 1 ] && mwan3_unlock "$ACTION" "$DEVICE-user"
|
|
||||||
|
|
||||||
env -i ACTION="$ACTION" INTERFACE="$INTERFACE" DEVICE="$DEVICE" \
|
env -i ACTION="$ACTION" INTERFACE="$INTERFACE" DEVICE="$DEVICE" \
|
||||||
/bin/sh /etc/mwan3.user
|
/bin/sh /etc/mwan3.user
|
||||||
}
|
}
|
||||||
|
|
9
net/mwan3/files/etc/init.d/mwan3
Executable file → Normal file
9
net/mwan3/files/etc/init.d/mwan3
Executable file → Normal file
|
@ -31,20 +31,16 @@ start_service() {
|
||||||
mwan3_init
|
mwan3_init
|
||||||
config_foreach start_tracker interface
|
config_foreach start_tracker interface
|
||||||
|
|
||||||
mwan3_lock "command" "mwan3"
|
|
||||||
|
|
||||||
mwan3_update_iface_to_table
|
mwan3_update_iface_to_table
|
||||||
mwan3_set_connected_ipset
|
mwan3_set_connected_ipset
|
||||||
mwan3_set_custom_ipset
|
mwan3_set_custom_ipset
|
||||||
mwan3_set_general_rules
|
mwan3_set_general_rules
|
||||||
mwan3_set_general_iptables
|
mwan3_set_general_iptables
|
||||||
config_foreach mwan3_ifup interface 1
|
config_foreach mwan3_ifup interface "init"
|
||||||
wait $hotplug_pids
|
wait $hotplug_pids
|
||||||
mwan3_set_policies_iptables
|
mwan3_set_policies_iptables
|
||||||
mwan3_set_user_rules
|
mwan3_set_user_rules
|
||||||
|
|
||||||
mwan3_unlock "command" "mwan3"
|
|
||||||
|
|
||||||
procd_open_instance rtmon_ipv4
|
procd_open_instance rtmon_ipv4
|
||||||
procd_set_param command /usr/sbin/mwan3rtmon ipv4
|
procd_set_param command /usr/sbin/mwan3rtmon ipv4
|
||||||
procd_set_param respawn
|
procd_set_param respawn
|
||||||
|
@ -61,8 +57,6 @@ start_service() {
|
||||||
stop_service() {
|
stop_service() {
|
||||||
local ipset rule IP IPTR IPT family table tid
|
local ipset rule IP IPTR IPT family table tid
|
||||||
|
|
||||||
mwan3_lock "command" "mwan3"
|
|
||||||
|
|
||||||
config_load mwan3
|
config_load mwan3
|
||||||
mwan3_init
|
mwan3_init
|
||||||
config_foreach mwan3_interface_shutdown interface
|
config_foreach mwan3_interface_shutdown interface
|
||||||
|
@ -108,7 +102,6 @@ stop_service() {
|
||||||
|
|
||||||
rm -rf $MWAN3_STATUS_DIR $MWAN3TRACK_STATUS_DIR
|
rm -rf $MWAN3_STATUS_DIR $MWAN3TRACK_STATUS_DIR
|
||||||
|
|
||||||
mwan3_unlock "command" "mwan3"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reload_service() {
|
reload_service() {
|
||||||
|
|
|
@ -103,16 +103,6 @@ mwan3_count_one_bits()
|
||||||
echo $count
|
echo $count
|
||||||
}
|
}
|
||||||
|
|
||||||
mwan3_lock() {
|
|
||||||
lock /var/run/mwan3.lock
|
|
||||||
#LOG debug "$1 $2 (lock)"
|
|
||||||
}
|
|
||||||
|
|
||||||
mwan3_unlock() {
|
|
||||||
#LOG debug "$1 $2 (unlock)"
|
|
||||||
lock -u /var/run/mwan3.lock
|
|
||||||
}
|
|
||||||
|
|
||||||
mwan3_get_iface_id()
|
mwan3_get_iface_id()
|
||||||
{
|
{
|
||||||
local _tmp
|
local _tmp
|
||||||
|
@ -965,12 +955,12 @@ mwan3_interface_shutdown()
|
||||||
|
|
||||||
mwan3_ifup()
|
mwan3_ifup()
|
||||||
{
|
{
|
||||||
local up l3_device status interface true_iface mwan3_startup
|
local interface=$1
|
||||||
|
local caller=$2
|
||||||
|
|
||||||
interface=$1
|
local up l3_device status true_iface
|
||||||
mwan3_startup=$2
|
|
||||||
|
|
||||||
if [ "${mwan3_startup}" != 1 ]; then
|
if [ "${caller}" = "cmd" ]; then
|
||||||
# It is not necessary to obtain a lock here, because it is obtained in the hotplug
|
# It is not necessary to obtain a lock here, because it is obtained in the hotplug
|
||||||
# script, but we still want to do the check to print a useful error message
|
# script, but we still want to do the check to print a useful error message
|
||||||
/etc/init.d/mwan3 running || {
|
/etc/init.d/mwan3 running || {
|
||||||
|
@ -989,7 +979,7 @@ mwan3_ifup()
|
||||||
}
|
}
|
||||||
hotplug_startup()
|
hotplug_startup()
|
||||||
{
|
{
|
||||||
env -i MWAN3_STARTUP=$mwan3_startup ACTION=ifup \
|
env -i MWAN3_STARTUP=$caller ACTION=ifup \
|
||||||
INTERFACE=$interface DEVICE=$l3_device \
|
INTERFACE=$interface DEVICE=$l3_device \
|
||||||
sh /etc/hotplug.d/iface/15-mwan3
|
sh /etc/hotplug.d/iface/15-mwan3
|
||||||
}
|
}
|
||||||
|
@ -998,7 +988,7 @@ mwan3_ifup()
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${mwan3_startup}" = 1 ]; then
|
if [ "${caller}" = "init" ]; then
|
||||||
hotplug_startup &
|
hotplug_startup &
|
||||||
hotplug_pids="$hotplug_pids $!"
|
hotplug_pids="$hotplug_pids $!"
|
||||||
else
|
else
|
||||||
|
|
0
net/mwan3/files/usr/libexec/rpcd/mwan3
Executable file → Normal file
0
net/mwan3/files/usr/libexec/rpcd/mwan3
Executable file → Normal file
2
net/mwan3/files/usr/sbin/mwan3
Executable file → Normal file
2
net/mwan3/files/usr/sbin/mwan3
Executable file → Normal file
|
@ -54,7 +54,7 @@ ifup() {
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mwan3_ifup "$1"
|
mwan3_ifup "$1" "cmd"
|
||||||
}
|
}
|
||||||
|
|
||||||
interfaces()
|
interfaces()
|
||||||
|
|
4
net/mwan3/files/usr/sbin/mwan3rtmon
Executable file → Normal file
4
net/mwan3/files/usr/sbin/mwan3rtmon
Executable file → Normal file
|
@ -159,16 +159,13 @@ main()
|
||||||
IP="$IP4"
|
IP="$IP4"
|
||||||
fi
|
fi
|
||||||
mwan3_init
|
mwan3_init
|
||||||
mwan3_lock "mwan3rtmon" "start"
|
|
||||||
sh -c "echo \$\$; exec $IP monitor route" | {
|
sh -c "echo \$\$; exec $IP monitor route" | {
|
||||||
read -r monitor_pid
|
read -r monitor_pid
|
||||||
trap_with_arg func_trap "$monitor_pid" SIGINT SIGTERM SIGKILL
|
trap_with_arg func_trap "$monitor_pid" SIGINT SIGTERM SIGKILL
|
||||||
while IFS='' read -r line; do
|
while IFS='' read -r line; do
|
||||||
[ -z "${line##*table*}" ] && continue
|
[ -z "${line##*table*}" ] && continue
|
||||||
LOG debug "handling route update $family '$line'"
|
LOG debug "handling route update $family '$line'"
|
||||||
mwan3_lock "service" "mwan3rtmon"
|
|
||||||
mwan3_rtmon_route_handle "$line" "$family"
|
mwan3_rtmon_route_handle "$line" "$family"
|
||||||
mwan3_unlock "service" "mwan3rtmon"
|
|
||||||
done
|
done
|
||||||
} &
|
} &
|
||||||
child=$!
|
child=$!
|
||||||
|
@ -176,7 +173,6 @@ main()
|
||||||
trap_with_arg func_trap "$child" SIGINT SIGTERM SIGKILL
|
trap_with_arg func_trap "$child" SIGINT SIGTERM SIGKILL
|
||||||
mwan3_set_connected_${family}
|
mwan3_set_connected_${family}
|
||||||
mwan3_add_all_routes ${family}
|
mwan3_add_all_routes ${family}
|
||||||
mwan3_unlock "mwan3rtmon" "start"
|
|
||||||
kill -SIGCONT $child
|
kill -SIGCONT $child
|
||||||
wait $!
|
wait $!
|
||||||
}
|
}
|
||||||
|
|
9
net/mwan3/files/usr/sbin/mwan3track
Executable file → Normal file
9
net/mwan3/files/usr/sbin/mwan3track
Executable file → Normal file
|
@ -9,9 +9,6 @@ DEVICE=""
|
||||||
|
|
||||||
IFDOWN_EVENT=0
|
IFDOWN_EVENT=0
|
||||||
IFUP_EVENT=0
|
IFUP_EVENT=0
|
||||||
TRACK_OUTPUT=$MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_OUTPUT
|
|
||||||
|
|
||||||
mwan3_init
|
|
||||||
|
|
||||||
stop_subprocs() {
|
stop_subprocs() {
|
||||||
[ -n "$SLEEP_PID" ] && kill "$SLEEP_PID" && unset SLEEP_PID
|
[ -n "$SLEEP_PID" ] && kill "$SLEEP_PID" && unset SLEEP_PID
|
||||||
|
@ -169,6 +166,10 @@ main() {
|
||||||
INTERFACE=$1
|
INTERFACE=$1
|
||||||
STATUS=""
|
STATUS=""
|
||||||
STARTED=0
|
STARTED=0
|
||||||
|
TRACK_OUTPUT=$MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_OUTPUT
|
||||||
|
|
||||||
|
mwan3_init
|
||||||
|
|
||||||
mkdir -p $MWAN3TRACK_STATUS_DIR/$INTERFACE
|
mkdir -p $MWAN3TRACK_STATUS_DIR/$INTERFACE
|
||||||
|
|
||||||
trap clean_up TERM
|
trap clean_up TERM
|
||||||
|
@ -345,7 +346,7 @@ main() {
|
||||||
get_uptime > $MWAN3TRACK_STATUS_DIR/$INTERFACE/TIME
|
get_uptime > $MWAN3TRACK_STATUS_DIR/$INTERFACE/TIME
|
||||||
|
|
||||||
host_up_count=0
|
host_up_count=0
|
||||||
if [ "${IFDOWN_EVENT}" -ne 0 ] && [ "${IFUP_EVENT}" -ne 0 ]; then
|
if [ "${IFDOWN_EVENT}" -eq 0 ] && [ "${IFUP_EVENT}" -eq 0 ]; then
|
||||||
sleep "${sleep_time}" &
|
sleep "${sleep_time}" &
|
||||||
SLEEP_PID=$!
|
SLEEP_PID=$!
|
||||||
wait
|
wait
|
||||||
|
|
Loading…
Reference in a new issue