From 54e9196bd1e8d31facfa085908deabe36dc81d5a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 6 Mar 2026 20:21:12 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=A4=9E=20Sync=202026-03-06=2020:21:12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- floatip/Makefile | 4 +-- floatip/files/floatip.init | 8 ++--- floatip/files/floatip.sh | 57 +++++++++++++++++++------------ floatip/files/floatip.uci-default | 5 +++ 4 files changed, 46 insertions(+), 28 deletions(-) diff --git a/floatip/Makefile b/floatip/Makefile index b4192885..bbe68b37 100644 --- a/floatip/Makefile +++ b/floatip/Makefile @@ -7,8 +7,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=floatip -PKG_VERSION:=1.0.10 -PKG_RELEASE:=1 +PKG_VERSION:=1.1.0 +PKG_RELEASE:=2 PKG_MAINTAINER:=jjm2473 include $(INCLUDE_DIR)/package.mk diff --git a/floatip/files/floatip.init b/floatip/files/floatip.init index e2859eea..d824c8b5 100755 --- a/floatip/files/floatip.init +++ b/floatip/files/floatip.init @@ -13,7 +13,7 @@ enable_lan_ping() { start_service() { config_load floatip config_get_bool enabled "main" enabled 0 - ifdown floatip + /usr/libexec/floatip.sh down [[ "$enabled" = 1 ]] || { enable_lan_ping return 0 @@ -62,15 +62,15 @@ start_service() { return 0 } procd_open_instance - procd_set_param command /usr/libexec/floatip.sh "$lan_iface" "$set_prefix" + procd_set_param command /usr/libexec/floatip.sh up "$lan_iface" "$set_prefix" procd_set_param stderr 1 procd_set_param file /etc/config/floatip procd_close_instance } -stop_service() { +service_stopped() { + /usr/libexec/floatip.sh down enable_lan_ping - ifdown floatip } service_triggers() { diff --git a/floatip/files/floatip.sh b/floatip/files/floatip.sh index 26f63bce..abda2e03 100755 --- a/floatip/files/floatip.sh +++ b/floatip/files/floatip.sh @@ -1,6 +1,7 @@ #!/bin/sh LOCK_FILE="/var/lock/floatip_loop.lock" +LOCK_FILE_UPDOWN="/var/lock/floatip_updown.lock" DEFAULT_PREFIX=24 @@ -19,28 +20,34 @@ host_alive() { # arping -f -q -b -c 2 -w 2 -i 1 -I $LAN_IFACE "$1" } +try_lock_updown() { + exec 201>"$LOCK_FILE_UPDOWN" + flock -x 201 && return 0 + return 1 +} + +unlock_updown() { + flock -u 201 +} + set_up() { local ipaddr="$1" + try_lock_updown || return 1 echo "set my floatip to $ipaddr" >&2 - if ! uci -q get network.floatip.ipaddr | grep -Fwq $ipaddr; then - if [[ "x$(uci -q get network.floatip)" = xinterface ]]; then - uci -q batch <<-EOF >/dev/null - set network.floatip.device=$LAN_IFACE - delete network.floatip.ipaddr - add_list network.floatip.ipaddr=$ipaddr - EOF - else - uci -q batch <<-EOF >/dev/null - set network.floatip=interface - set network.floatip.proto=static - set network.floatip.device=$LAN_IFACE - add_list network.floatip.ipaddr=$ipaddr - set network.floatip.auto=0 - EOF - fi - uci commit network + ip addr add "$ipaddr" dev "$LAN_IFACE" + echo "ip addr del \"$ipaddr\" dev \"$LAN_IFACE\"" > /tmp/run/floatip_cleanup.sh + unlock_updown + return 0 +} + +set_down() { + try_lock_updown || return 1 + if [ -f /tmp/run/floatip_cleanup.sh ]; then + sh -c '. /tmp/run/floatip_cleanup.sh' + rm -f /tmp/run/floatip_cleanup.sh fi - ifup floatip + unlock_updown + return 0 } set_lan_ping() { @@ -112,7 +119,7 @@ fallback_loop() { if [[ $found_alive = 1 ]]; then if [[ $floatip_up = 1 ]]; then echo "set down floatip" >&2 - ifdown floatip + set_down || exit 1 floatip_up=0 else dead_counter=0 @@ -130,7 +137,7 @@ fallback_loop() { continue fi echo "no host alive, set up floatip $ipaddr" >&2 - set_up "$ipaddr" + set_up "$ipaddr" || exit 1 floatip_up=1 sleep 5 done @@ -182,7 +189,7 @@ main_loop() { set_lan_ping if [[ $found_alive = 0 ]]; then echo "no host alive, and url passed, set up floatip $ipaddr" >&2 - set_up "$ipaddr" + set_up "$ipaddr" || exit 1 floatip_up=1 fi else @@ -198,7 +205,7 @@ main_loop() { continue fi echo "set down floatip, and disable ping" >&2 - ifdown floatip + set_down || exit 1 set_lan_ping 0 floatip_up=0 fi @@ -219,6 +226,12 @@ main() { fi } +if [[ "$1" = "down" ]]; then + set_down + exit 0 +fi +shift + try_lock() { exec 200>"$LOCK_FILE" flock -x 200 && return 0 diff --git a/floatip/files/floatip.uci-default b/floatip/files/floatip.uci-default index 0076a26b..edb49786 100644 --- a/floatip/files/floatip.uci-default +++ b/floatip/files/floatip.uci-default @@ -13,6 +13,11 @@ uci -q batch <<-EOF >/dev/null commit ucitrack EOF +uci -q batch <<-EOF >/dev/null + delete network.floatip + commit network +EOF + # don't change role if enabled [[ "`uci -q get floatip.main.enabled`" = "1" ]] && exit 0