IPAddr2 puts the interface up on start and down on stop.
But its not able to detect an UP or DOWN change in status or monitor.
Therefore an "ifconfig <interface> down" from a thrird program or a
careless administrator would drop the link without pacemaker noticing!
The attached patch tries to fix that
--
Eric Price
Linux Solutions / Development
Lightwerk GmbH - www.lightwerk.com
Schulze-Delitzsch-Str. 38, 70565 Stuttgart
E-Mail: [email protected]
Geschäftsführender Gesellschafter: Veikko Wünsche
Amtsgericht Stuttgart, HRB 22214
Ust.-ID: DE 813315708
--- IPaddr2 2011-03-16 15:54:46.359554666 +0100
+++ IPaddr2_lw 2011-03-16 16:38:33.728562036 +0100
@@ -364,10 +364,21 @@
echo $iface
return 0
}
#
+# Check interface status (up or down)
+# The argument is an interface name (e.g. "eth0")
+#
+interface_down() {
+ if $IP2UTIL -o -f inet link show "$1" | grep "state UP" >/dev/null; then
+ return 1
+ fi
+ return 0
+}
+
+#
# Delete an interface
#
delete_interface () {
ipaddr="$1"
iface="$2"
@@ -572,20 +583,31 @@
return 0
fi
;;
esac
+ if interface_down $cur_nic; then
+ echo "partial3"
+ return 0
+ fi
+
echo "ok"
return 0
fi
# Special handling for the CIP:
if [ ! -e $IP_CIP_FILE ]; then
echo "partial2"
return 0
fi
if egrep -q "(^|,)${IP_INC_NO}(,|$)" $IP_CIP_FILE ; then
+
+ if interface_down $cur_nic; then
+ echo "partial3"
+ return 0
+ fi
+
echo "ok"
return 0
else
echo "partial"
return 0
@@ -620,10 +642,19 @@
#
# Do we already service this IP address?
#
local ip_status=`ip_served`
+ # yes, but interface is down, bring it up!
+ if [ "$ip_status" = "partial3" ]; then
+ CMD="$IP2UTIL link set "$NIC" up"
+
+ ocf_log info "$CMD"
+ $CMD
+ ip_status=`ip_served`
+ fi
+
if [ "$ip_status" = "ok" ]; then
exit $OCF_SUCCESS
fi
if [ -n "$IP_CIP" ] && [ $ip_status = "no" ] || [ $ip_status = "partial2" ]; then
_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/