> It's probably stupid question, but I can't find any sources for automating
> the switching to alternate network interface, if primary (or active)
> interface goes down when using AP 2.3.
>
> I can easely switch the active interface even w/o loosing my ssh-session,
> but the whole point is have this process automated.
>
> I believe (at least, I really-really hope), there should be some
> scripts/configs that allow automated switching for network interfaces,
> that covers most kind of network interface failure.
Well, I got no responses on this question.
Here's the script you can use to acomplish the automatic switching to
alternate network interface should active went down.
---------------------CUT HERE------------------------------------------
#!/bin/sh
#
# Original name: apcheck
#
# Author: Konstantin Orekhov <korekhov@taos.com>
#
# Date: Wed Nov 8 10:26:06 PST 2000
#
# Purpose: "Failover" for Alternate Pathing network metadevice.
#
# Assumptions: Machine has installed and correctly configured AP,
# at least 2 NICS, connected to the different
# switches (network is built with failover in mind).
# Also, see the end of script for better understanding.
#
# OS/platform: Written and tested on Solaris 8 on Sparc (E220R)
# Alternate Pathing 2.3, but should work on any other
# Sun machine with older Solaris and AP - the script
# is just using AP and system binaries.
#
# Feedbacks: Always welcome! My email above.
# Improvements: Always welcome! My email above.
# Success: Always glad to hear! My email above.
#
#############################################################################
# A little debugging
#set -x
# A variable variables :) (those that you really want to modify)
# List of people, who will be alerted in case of problems
# Actually, if there's a REAL problem with network -
# no emails can get an addressee, so ...
# Anyway, it's being used for reporting.
ALERT="root@machine"
# How many interfaces in metaether device?
# Crucial variable - make sure it has correct value.
NICS=2
# Targets - the nearest network devices (switches) for each device in metaether
# It's very important that they're named exactly after physical interfaces!
# (except that the vars should be in upper case - I like see vars in upper,
# case. If you don't or you want to run 1 external command less - make them
# in lower case AND remove translation from check() function.
# Once again - these IP addresses NOT the IP's of machine, they're IP's of
# respective switches, to which interfaces physically connected.
HME0=192.168.4.2
QFE0=192.168.4.3
# SBIN Binaries
SBIN_DIR=/usr/sbin
APCONFIG=$SBIN_DIR/apconfig
PING=$SBIN_DIR/ping
# BIN binaries
BIN_DIR=/usr/bin
RM=$BIN_DIR/rm
AWK=$BIN_DIR/awk
MAIL="$BIN_DIR/mailx -s"
CAT=$BIN_DIR/cat
CUT=$BIN_DIR/cut
TR=$BIN_DIR/tr
ID=$BIN_DIR/id
TAIL=$BIN_DIR/tail
GREP=$BIN_DIR/grep
DATE=$BIN_DIR/date
# Files and other
HOSTNAME=`$BIN_DIR/hostname`
LOCK=/tmp/apcheck.lock
LOG=/tmp/apcheck.log.$$
DETAILS=/tmp/apcheck.details.$$
METAINFO=/tmp/apcheck.metainfo.$$
###########################################################################
# Check if we called by UID 0 (apconfig needs root)
if [ `$ID | $CUT -c7-10` != "root" ]; then
echo ""
echo "$0: you must be root to run me!"
echo "Exiting..."
echo ""
exit 1
fi
# Report function
report() {
echo "Hostname: $HOSTNAME" > $LOG
echo "Script name: $0" >> $LOG
echo "Current date: `$DATE`" >> $LOG
echo "Description: $1" >> $LOG
echo "------------------------------------------------" >> $LOG
if [ -f $DETAILS ]; then
echo "" >> $LOG
echo "Details:" >> $LOG
$CAT $DETAILS >> $LOG
$RM $DETAILS
echo "------------------------------------------------" >> $LOG
echo "" >> $LOG
fi
echo "End of report." >> $LOG
echo "" >> $LOG
$MAIL "$1" $ALERT < $LOG
$RM $LOG
}
# Check/ping function
check() {
# Terrible way to get the actual IP address from $1
TARGET="echo \$`echo $1 | $TR [a-z] [A-Z]`"
IP=`eval $TARGET`
$PING $IP > $DETAILS 2>&1
if [ $? -ne 0 ]; then
CHECK=failed
return
fi
CHECK=passed
}
#############################################################################
# OK, ready to start.
# Check if previous apcheck still running
# (may indicate 2 major problems - the previous apcheck failed unexpectedly,
# the 2nd one - the previous apcheck is delayed because of ping delays or
# something like this. Investigate, anyway.
if [ -f $LOCK ]; then
report "Another copy of $0 is running!"
exit 1
fi
# Create a lock-file with process ID
echo $$ > $LOCK
# First of all - check if the apdb's are OK
# AP db health is not our point here - so, we'll continue in either case.
if [ `$APCONFIG -D | $GREP Yes > /dev/null; echo $?` -eq 0 ]; then
$APCONFIG -D > $DETAILS 2>&1
report "AP database problems!"
fi
# Let's find out what the metainfo looks like
$APCONFIG -N > $METAINFO
# Find the active at the moment interface
ACTIVE=`$TAIL -$NICS $METAINFO | $AWK '$2 ~ /A/ { print $1 }'`
# Check the active interface - if OK, then finish silently
check $ACTIVE
# If check is failed - switch to the first passive interface, and test it.
if [ $CHECK = "failed" ]; then
report "Active interface $ACTIVE check is failed!"
SWITCHED=no
# Remember that you may have more than one passive interface!
# So, we will try to switch to all of them one-by-one, until
# we found a good one. If all passive interfaces are failed -
# switch back to the active one and scream!
PASSIVE="`$TAIL -$NICS $METAINFO | $AWK '$2 !~ /A/ { print $1 }'`"
GROUP=`$AWK '/metanetwork/ { print $2 }' $METAINFO`
for INT in $PASSIVE; do
$APCONFIG -P $GROUP -a $INT
check $INT
if [ $CHECK = "failed" ]; then
report "Alternate interface $INT check is failed!"
# Try another interface (if any)
continue
fi
report "Switched to alternate interface $INT!"
SWITCHED=yes
break
done
if [ $SWITCHED != "yes" ]; then
# If we got here, then we having a serious problem -
# None of alternate interfaces passed the check()
# which means that all interfaces are down.
# Report the problem, switch back to the active
# interface and hope that network will be up soon.
$APCONFIG -P $GROUP -a $ACTIVE
echo "Switching back to the $ACTIVE interface." >> $DETAILS
echo "The current configuration:" >> $DETAILS
$APCONFIG -N >> $DETAILS
echo "--------------------------" >> $DETAILS
$APCONFIG -D >> $DETAILS
report "Didn't find ANY working interfaces!"
fi
fi
# We done.
$RM $METAINFO 2> /dev/null
$RM $DETAILS 2> /dev/null
$RM $LOCK 2> /dev/null
exit 0
##############################################################################
# Very ugly network picture
# /|\
# |
# ---------------
# | gateway |
# |----------| router |----------|
# | | 192.168.4.1 | |
# | --------------- |
# | |
# --------------- ---------------
# | switch | | switch |
# | 192.168.4.2 | | 192.168.4.3 |
# --------------- ---------------
# | --------------- |
# | | machine | |
# |------hme0| AP |qfe0------|
# | 192.168.4.4 |
# ---------------
#
##############################################################################
---------------------------CUT HERE------------------------------
-- Kins Orekhov E-mail: kins@swoop.outlook.net http://swoop.outlook.netS U BEFORE POSTING please READ the FAQ located at N ftp://ftp.cs.toronto.edu/pub/jdd/sun-managers/faq . and the list POLICY statement located at M ftp://ftp.cs.toronto.edu/pub/jdd/sun-managers/policy A To submit questions/summaries to this list send your email message to: N sun-managers@sunmanagers.ececs.uc.edu A To unsubscribe from this list please send an email message to: G majordomo@sunmanagers.ececs.uc.edu E and in the BODY type: R unsubscribe sun-managers S Or . unsubscribe sun-managers original@subscription.address L To view an archive of this list please visit: I http://www.latech.edu/sunman.html S T
This archive was generated by hypermail 2.1.2 : Fri Sep 28 2001 - 23:14:22 CDT