🤞 Sync 2026-03-06 20:21:12

This commit is contained in:
github-actions[bot] 2026-03-06 20:21:12 +08:00
parent 383bda44e8
commit 54e9196bd1
4 changed files with 46 additions and 28 deletions

View File

@ -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 <jjm2473@gmail.com>
include $(INCLUDE_DIR)/package.mk

View File

@ -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() {

View File

@ -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

View File

@ -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