Skip to content

Commit 387d414

Browse files
authored
Merge pull request #2056 from oalbrigt/IPaddr2-check-link-status
IPaddr2: add link status DOWN/LOWERLAYERDOWN check
2 parents e727629 + 4a228f3 commit 387d414

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

heartbeat/IPaddr2

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,19 @@ OCF_RESKEY_nodad_default=false
9292
OCF_RESKEY_noprefixroute_default="false"
9393
OCF_RESKEY_preferred_lft_default="forever"
9494
OCF_RESKEY_network_namespace_default=""
95+
OCF_RESKEY_check_link_status_default="true"
96+
97+
# RHEL specific defaults
98+
if is_redhat_based; then
99+
get_os_ver
100+
ocf_version_cmp "$VER" "10.1" 2>/dev/null
101+
102+
case "$?" in
103+
# RHEL < 10.1
104+
0)
105+
OCF_RESKEY_check_link_status_default="false";;
106+
esac
107+
fi
95108

96109
: ${OCF_RESKEY_ip=${OCF_RESKEY_ip_default}}
97110
: ${OCF_RESKEY_cidr_netmask=${OCF_RESKEY_cidr_netmask_default}}
@@ -116,6 +129,7 @@ OCF_RESKEY_network_namespace_default=""
116129
: ${OCF_RESKEY_noprefixroute=${OCF_RESKEY_noprefixroute_default}}
117130
: ${OCF_RESKEY_preferred_lft=${OCF_RESKEY_preferred_lft_default}}
118131
: ${OCF_RESKEY_network_namespace=${OCF_RESKEY_network_namespace_default}}
132+
: ${OCF_RESKEY_check_link_status=${OCF_RESKEY_check_link_status_default}}
119133

120134
#######################################################################
121135

@@ -449,6 +463,14 @@ the namespace.
449463
<shortdesc lang="en">Network namespace to use</shortdesc>
450464
<content type="string" default="${OCF_RESKEY_network_namespace_default}"/>
451465
</parameter>
466+
467+
<parameter name="check_link_status">
468+
<longdesc lang="en">
469+
Consider the resource failed if the interface has status DOWN or LOWERLAYERDOWN.
470+
</longdesc>
471+
<shortdesc lang="en">Consider the resource failed if the interface has status DOWN or LOWERLAYERDOWN</shortdesc>
472+
<content type="string" default="${OCF_RESKEY_check_link_status_default}"/>
473+
</parameter>
452474
</parameters>
453475
454476
<actions>
@@ -581,6 +603,9 @@ ip_init() {
581603
elif [ "$__OCF_ACTION" = stop ]; then
582604
ocf_log warn "[$FINDIF] failed"
583605
exit $OCF_SUCCESS
606+
elif [ "$__OCF_ACTION" = start ]; then
607+
ocf_exit_reason "[$FINDIF] failed"
608+
exit $OCF_ERR_INSTALLED
584609
else
585610
ocf_exit_reason "[$FINDIF] failed"
586611
exit $rc
@@ -1002,6 +1027,12 @@ ip_served() {
10021027
return 0
10031028
fi
10041029

1030+
if ocf_is_true "$OCF_RESKEY_check_link_status" && $IP2UTIL -f $FAMILY addr show $cur_nic | \
1031+
grep -q "[[:space:]]\(DOWN\|LOWERLAYERDOWN\)[[:space:]]"; then
1032+
echo "down"
1033+
return 0
1034+
fi
1035+
10051036
if [ -z "$IP_CIP" ]; then
10061037
for i in $cur_nic; do
10071038
# check address label
@@ -1073,6 +1104,11 @@ ip_start() {
10731104
exit $OCF_SUCCESS
10741105
fi
10751106

1107+
if [ "$ip_status" = "down" ]; then
1108+
ocf_exit_reason "IP $OCF_RESKEY_ip available, but device has status $ip_status"
1109+
exit $OCF_ERR_INSTALLED
1110+
fi
1111+
10761112
if [ "$ip_status" = "partial3" ]; then
10771113
ocf_exit_reason "IP $OCF_RESKEY_ip available, but label missing"
10781114
exit $OCF_ERR_GENERIC
@@ -1096,7 +1132,7 @@ ip_start() {
10961132
echo "+$IP_INC_NO" >$IP_CIP_FILE
10971133
fi
10981134

1099-
if [ "$ip_status" = "no" ]; then
1135+
if [ "$ip_status" != "ok" ]; then
11001136
if ocf_is_true ${OCF_RESKEY_lvs_support}; then
11011137
for i in `find_interface $OCF_RESKEY_ip 32`; do
11021138
case $i in
@@ -1213,6 +1249,7 @@ ip_monitor() {
12131249
# interface health maybe via a daemon like FailSafe etc...
12141250

12151251
local ip_status=`ip_served`
1252+
ocf_log debug "monitor: $ip_status"
12161253
case $ip_status in
12171254
ok)
12181255
run_arp_sender refresh
@@ -1221,6 +1258,9 @@ ip_monitor() {
12211258
no)
12221259
exit $OCF_NOT_RUNNING
12231260
;;
1261+
down)
1262+
exit $OCF_ERR_INSTALLED
1263+
;;
12241264
*)
12251265
# Errors on this interface?
12261266
return $OCF_ERR_GENERIC

0 commit comments

Comments
 (0)