mirror of
https://github.com/samba-team/samba.git
synced 2025-01-25 06:04:04 +03:00
4493ba6ffa
When two releaseip events run in parallel it's possible that the 2nd script readds a secondary ip that was removed by the 1st script. metze (This used to be ctdb commit e02417b2a55c45ac2c125b1b3463c9c39e7bc07a)
74 lines
1.5 KiB
Bash
Executable File
74 lines
1.5 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
|
|
OP=$1
|
|
IFACE=$2
|
|
IP=$3
|
|
MASKBITS=$4
|
|
|
|
add_ip_to_iface()
|
|
{
|
|
local _iface=$1
|
|
local _ip=$2
|
|
local _maskbits=$3
|
|
|
|
# we make sure the interface is up first
|
|
/sbin/ip link set $_iface up || {
|
|
echo "Failed to bringup interface $_iface"
|
|
return 1;
|
|
}
|
|
/sbin/ip addr add $_ip/$_maskbits brd + dev $_iface || {
|
|
echo "Failed to add $_ip/$_maskbits on dev $_iface"
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
delete_ip_from_iface()
|
|
{
|
|
local _iface=$1
|
|
local _ip=$2
|
|
local _maskbits=$3
|
|
|
|
# the ip tool will delete all secondary IPs if this is the primary. To work around
|
|
# this _very_ annoying behaviour we have to keep a record of the secondaries and re-add
|
|
# them afterwards. yuck
|
|
local _secondaries=""
|
|
if /sbin/ip addr list dev $_iface primary | grep -q "inet $_ip/$_maskbits " ; then
|
|
_secondaries=`/sbin/ip addr list dev $_iface secondary | grep " inet " | awk '{print $2}'`
|
|
fi
|
|
local _failed=0
|
|
/sbin/ip addr del $_ip/$_maskbits dev $_iface || _failed=1
|
|
[ -z "$_secondaries" ] || {
|
|
local _i=""
|
|
for _i in $_secondaries; do
|
|
if /sbin/ip addr list dev $_iface | grep -q "inet $_i" ; then
|
|
echo "kept secondary $_i on dev $_iface"
|
|
else
|
|
echo "re-adding secondary address $_i to dev $_iface"
|
|
/sbin/ip addr add $_i dev $_iface || _failed=1
|
|
fi
|
|
done
|
|
}
|
|
[ $_failed = 0 ] || {
|
|
echo "Failed to del $_ip on dev $_iface"
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
case "$OP" in
|
|
add)
|
|
add_ip_to_iface $IFACE $IP $MASKBITS
|
|
exit $?
|
|
;;
|
|
delete)
|
|
delete_ip_from_iface $IFACE $IP $MASKBITS
|
|
exit $?
|
|
;;
|
|
esac
|
|
|
|
echo "$0: unknown operation[$OP]"
|
|
exit 1
|