diff --git a/net/mwan3/Makefile b/net/mwan3/Makefile index 99990e4cc..3b853e6ea 100644 --- a/net/mwan3/Makefile +++ b/net/mwan3/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mwan3 -PKG_VERSION:=2.10.1 +PKG_VERSION:=2.10.2 PKG_RELEASE:=1 PKG_MAINTAINER:=Florian Eckert <fe@dev.tdt.de> PKG_LICENSE:=GPL-2.0 @@ -63,12 +63,52 @@ exit 0 endef 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 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/ + + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_DATA) ./files/etc/uci-defaults/mwan3-migrate-flush_conntrack \ + $(1)/etc/uci-defaults/ endef $(eval $(call BuildPackage,mwan3)) diff --git a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 index 320e7f787..f1755d26f 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 +++ b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 @@ -3,9 +3,12 @@ . /lib/functions.sh . /lib/functions/network.sh . /lib/mwan3/mwan3.sh -. /usr/share/libubox/jshn.sh . /lib/mwan3/common.sh +initscript=/etc/init.d/mwan3 +. /lib/functions/procd.sh + + SCRIPTNAME="mwan3-hotplug" [ "$ACTION" = "ifup" ] || [ "$ACTION" = "ifdown" ] || [ "$ACTION" = "connected" ] || [ "$ACTION" = "disconnected" ] || exit 1 [ -n "$INTERFACE" ] || exit 2 @@ -16,18 +19,17 @@ if { [ "$ACTION" = "ifup" ] || [ "$ACTION" = "connected" ] ; } && [ -z "$DEVICE" exit 3 fi -[ "$MWAN3_STARTUP" = 1 ] || mwan3_lock "$ACTION" "$INTERFACE" +[ "$MWAN3_STARTUP" = 1 ] || procd_lock config_load mwan3 /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" mwan3_flush_conntrack "$INTERFACE" "$ACTION" exit 0 } $IPT4 -S mwan3_hook &>/dev/null || { - mwan3_unlock "$ACTION" "$INTERFACE" LOG warn "hotplug called on $INTERFACE before mwan3 has been set up" exit 0 } @@ -44,7 +46,6 @@ fi config_get_bool enabled $INTERFACE 'enabled' '0' [ "${enabled}" -eq 1 ] || { - [ "$MWAN3_STARTUP" = 1 ] || mwan3_unlock "$ACTION" "$INTERFACE" LOG notice "mwan3 hotplug on $INTERFACE not called because interface disabled" exit 0 } @@ -57,11 +58,6 @@ else status=online 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})" case "$ACTION" in @@ -73,8 +69,9 @@ case "$ACTION" in mwan3_create_iface_iptables $INTERFACE $DEVICE mwan3_create_iface_rules $INTERFACE $DEVICE mwan3_set_iface_hotplug_state $INTERFACE "$status" - if [ "$MWAN3_STARTUP" != 1 ]; then + if [ "$MWAN3_STARTUP" = "cmd" ]; then mwan3_create_iface_route $INTERFACE $DEVICE + mwan3_set_general_rules [ "$status" = "online" ] && mwan3_set_policies_iptables fi [ "$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 ;; esac -[ "$MWAN3_STARTUP" = 1 ] || mwan3_unlock "$ACTION" "$INTERFACE" exit 0 diff --git a/net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user b/net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user index 698fe0909..be857e8ff 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user +++ b/net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user @@ -3,11 +3,12 @@ [ -f "/etc/mwan3.user" ] && { . /lib/functions.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_unlock "$ACTION" "$DEVICE-user" exit 0 } @@ -19,8 +20,6 @@ exit 0 } - [ "$MWAN3_SHUTDOWN" != 1 ] && mwan3_unlock "$ACTION" "$DEVICE-user" - env -i ACTION="$ACTION" INTERFACE="$INTERFACE" DEVICE="$DEVICE" \ /bin/sh /etc/mwan3.user } diff --git a/net/mwan3/files/etc/init.d/mwan3 b/net/mwan3/files/etc/init.d/mwan3 old mode 100755 new mode 100644 index b7cf91eb1..23c21ab5d --- a/net/mwan3/files/etc/init.d/mwan3 +++ b/net/mwan3/files/etc/init.d/mwan3 @@ -31,20 +31,16 @@ start_service() { mwan3_init config_foreach start_tracker interface - mwan3_lock "command" "mwan3" - mwan3_update_iface_to_table mwan3_set_connected_ipset mwan3_set_custom_ipset mwan3_set_general_rules mwan3_set_general_iptables - config_foreach mwan3_ifup interface 1 + config_foreach mwan3_ifup interface "init" wait $hotplug_pids mwan3_set_policies_iptables mwan3_set_user_rules - mwan3_unlock "command" "mwan3" - procd_open_instance rtmon_ipv4 procd_set_param command /usr/sbin/mwan3rtmon ipv4 procd_set_param respawn @@ -61,8 +57,6 @@ start_service() { stop_service() { local ipset rule IP IPTR IPT family table tid - mwan3_lock "command" "mwan3" - config_load mwan3 mwan3_init config_foreach mwan3_interface_shutdown interface @@ -108,7 +102,6 @@ stop_service() { rm -rf $MWAN3_STATUS_DIR $MWAN3TRACK_STATUS_DIR - mwan3_unlock "command" "mwan3" } reload_service() { diff --git a/net/mwan3/files/lib/mwan3/mwan3.sh b/net/mwan3/files/lib/mwan3/mwan3.sh index e6e43ebe8..43740e2de 100644 --- a/net/mwan3/files/lib/mwan3/mwan3.sh +++ b/net/mwan3/files/lib/mwan3/mwan3.sh @@ -103,16 +103,6 @@ mwan3_count_one_bits() 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() { local _tmp @@ -965,12 +955,12 @@ mwan3_interface_shutdown() mwan3_ifup() { - local up l3_device status interface true_iface mwan3_startup + local interface=$1 + local caller=$2 - interface=$1 - mwan3_startup=$2 + local up l3_device status true_iface - 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 # script, but we still want to do the check to print a useful error message /etc/init.d/mwan3 running || { @@ -989,7 +979,7 @@ mwan3_ifup() } hotplug_startup() { - env -i MWAN3_STARTUP=$mwan3_startup ACTION=ifup \ + env -i MWAN3_STARTUP=$caller ACTION=ifup \ INTERFACE=$interface DEVICE=$l3_device \ sh /etc/hotplug.d/iface/15-mwan3 } @@ -998,7 +988,7 @@ mwan3_ifup() return fi - if [ "${mwan3_startup}" = 1 ]; then + if [ "${caller}" = "init" ]; then hotplug_startup & hotplug_pids="$hotplug_pids $!" else diff --git a/net/mwan3/files/usr/libexec/rpcd/mwan3 b/net/mwan3/files/usr/libexec/rpcd/mwan3 old mode 100755 new mode 100644 diff --git a/net/mwan3/files/usr/sbin/mwan3 b/net/mwan3/files/usr/sbin/mwan3 old mode 100755 new mode 100644 index 45776bdfc..803e74b9a --- a/net/mwan3/files/usr/sbin/mwan3 +++ b/net/mwan3/files/usr/sbin/mwan3 @@ -54,7 +54,7 @@ ifup() { exit 0 fi - mwan3_ifup "$1" + mwan3_ifup "$1" "cmd" } interfaces() diff --git a/net/mwan3/files/usr/sbin/mwan3rtmon b/net/mwan3/files/usr/sbin/mwan3rtmon old mode 100755 new mode 100644 index 569b4d172..6ece58125 --- a/net/mwan3/files/usr/sbin/mwan3rtmon +++ b/net/mwan3/files/usr/sbin/mwan3rtmon @@ -159,16 +159,13 @@ main() IP="$IP4" fi mwan3_init - mwan3_lock "mwan3rtmon" "start" sh -c "echo \$\$; exec $IP monitor route" | { read -r monitor_pid trap_with_arg func_trap "$monitor_pid" SIGINT SIGTERM SIGKILL while IFS='' read -r line; do [ -z "${line##*table*}" ] && continue LOG debug "handling route update $family '$line'" - mwan3_lock "service" "mwan3rtmon" mwan3_rtmon_route_handle "$line" "$family" - mwan3_unlock "service" "mwan3rtmon" done } & child=$! @@ -176,7 +173,6 @@ main() trap_with_arg func_trap "$child" SIGINT SIGTERM SIGKILL mwan3_set_connected_${family} mwan3_add_all_routes ${family} - mwan3_unlock "mwan3rtmon" "start" kill -SIGCONT $child wait $! } diff --git a/net/mwan3/files/usr/sbin/mwan3track b/net/mwan3/files/usr/sbin/mwan3track old mode 100755 new mode 100644 index d97933e09..d4a5f44ab --- a/net/mwan3/files/usr/sbin/mwan3track +++ b/net/mwan3/files/usr/sbin/mwan3track @@ -9,9 +9,6 @@ DEVICE="" IFDOWN_EVENT=0 IFUP_EVENT=0 -TRACK_OUTPUT=$MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_OUTPUT - -mwan3_init stop_subprocs() { [ -n "$SLEEP_PID" ] && kill "$SLEEP_PID" && unset SLEEP_PID @@ -169,6 +166,10 @@ main() { INTERFACE=$1 STATUS="" STARTED=0 + TRACK_OUTPUT=$MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_OUTPUT + + mwan3_init + mkdir -p $MWAN3TRACK_STATUS_DIR/$INTERFACE trap clean_up TERM @@ -345,7 +346,7 @@ main() { get_uptime > $MWAN3TRACK_STATUS_DIR/$INTERFACE/TIME 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_PID=$! wait