#!/bin/ksh # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2020,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/events/fail_interface.sh 1.15.1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2002,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/events/fail_interface.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ######################################################################### # # COMPONENT_NAME: EVENTS # # FUNCTIONS: none # ######################################################################### ######################################################################### # # # Name: fail_adapter # # # # Description: This event script is called when an # # adapter goes down. # # # # Called by: cluster manager # # # # Calls to: none # # # # Arguments: nodename (with the failed adapter) # # address (of the failed adapter) # # # # Returns: 0 success # # 1 failure # # 2 bad argument # # # ######################################################################### typeset PROGNAME=${0##*/} export PATH="$(/usr/es/sbin/cluster/utilities/cl_get_path all)" set -a eval $(cllsparam -n $LOCALNODENAME) set +a if [[ $VERBOSE_LOGGING == "high" ]]; then set -x version='%I%' fi OP_SEP="$(cl_get_path -S)" if [ $# -ne 2 ] then cl_echo 8061 "Usage: $PROGNAME nodename failed_address\n" $PROGNAME exit 2 fi NODENAME=$1 ADDR=$2 PREFIX_LEN="" ADDR_FAMILY="" set -u MSG=$(dspmsg scripts.cat 8062 "Interface $ADDR has failed on node $NODENAME.\n" $ADDR $NODENAME) echo $MSG >/dev/console if [[ "$NODENAME" = "$LOCALNODENAME" ]] then # If this is an aliasing network, then we may need to re-alias persistent # IP labels. NETWORK=$(cllsif -J "$OP_SEP" -Sn $ADDR | cut -d"$OP_SEP" -f3) ALIASING=$(odmget -q"name=$NETWORK" HACMPnetwork \ | awk '$1 == "alias" {print $3}' \ | sed 's/"//g') if [[ $ALIASING = "1" ]]; then # Change NSORDER # In case if NSORDER is not defined, we get parameter not set errors. # To avoid it, better disable variable strictness. set +u saveNSORDER=${NSORDER:-UNDEFINED} set -u NSORDER=local; export NSORDER netstat -in netstat -rnC cl_configure_persistent_address fail_boot -i $ADDR -n $NETWORK # If the subnets are equal, delete net route. This route will be # added back in join_interface. # find boots NETMASK=$(LC_ALL=C clgetif -n $ADDR) IF1=$(LC_ALL=C clgetif -a $ADDR) BOOT1=$ADDR BOOT2=$(cllsif -J "$OP_SEP" -Si $LOCALNODENAME | \ awk -F"$OP_SEP" -v net=$NETWORK -v if1=$IF1 '($2=="boot" && \ $3==net && $9!=if1) {printf("%s\n",$7)}') if [[ -n "$BOOT2" ]] then # find route to delete if [[ "$PLATFORM" = "__AIX__" ]]; then BROUTE=$(netstat -rn|awk -v boot1=$BOOT1 \ '(NR > 4 && $1!="default" && $2==boot1 && $3=="U") \ {printf("%s %s",$1,$2)}') elif [[ "$PLATFORM" = "__LINUX__" ]]; then #no route to delete as in Linux it automatically updates the static routing table BROUTE='' fi if [[ -n "$BROUTE" ]] then for bootaddr in $BOOT2 do if [[ $(clgetnet $BOOT1 $NETMASK) = $(clgetnet $bootaddr $NETMASK) ]] then # # Finding address family. # ADDR_FAMILY=$(cllsif -J "$OP_SEP" -Sn $BOOT1 | cut -d"$OP_SEP" -f15) # The subnets are equal check for default. if [[ -n $(netstat -rn|awk -v if1=$IF1 \ '(NR > 4 && $6==if1 && $1=="default")') ]] then case "$ADDR_FAMILY" in AF_INET) ifconfig $IF1 delete $BOOT1 ifconfig $IF1 alias $BOOT1 netmask $NETMASK ;; AF_INET6) ifconfig $IF1 inet6 $BOOT1 delete ifconfig $IF1 inet6 alias $BOOT1 prefixlen $NETMASK ;; *) dspmsg scripts.cat 9503 "\n$PROGNAME: ERROR: Invalid address \ family for IP address \"$BOOT1\".\n" $PROGNAME $BOOT1 exit 1 ;; esac fi # The subnets are equal so delete net route case "$ADDR_FAMILY" in AF_INET) route delete -net $BROUTE ;; AF_INET6) route delete -inet6 -net $BROUTE ;; *) dspmsg scripts.cat 9503 "\n$PROGNAME: ERROR: Invalid address \ family for IP address \"$BOOT1\".\n" $PROGNAME $BOOT1 exit 1 ;; esac netstat -in netstat -rnC break fi done fi fi if [[ $saveNSORDER != UNDEFINED ]]; then export NSORDER=$saveNSORDER else export NSORDER="" fi fi fi exit 0