#!/bin/sh # IBM(c) 2011EPL license http://www.eclipse.org/legal/epl-v10.html #------------------------------------------------------------------------------- #=head1 routeop #=head2 routeop is called by makeroutes command and setuproutes postscript to # setup a route on a node. # The syntax is: # routeop add/delete net mask gateway ifname #=cut #------------------------------------------------------------------------------- op=$1 net=$2 mask=$3 gw=$4 if [[ -n "$5" ]]; then ifname=$5 fi route_exists() { net=$1 mask=$2 gw=$3 ret=0 if [[ -n "$4" ]]; then ifname=$4 fi result=`netstat -nr|grep $net`; if [ $? -eq 0 ] && [ -n "$result" ]; then for x in `echo "$result"|tr -s " " ","` do if [[ $OSTYPE = linux* ]]; then net1=`echo $x|cut -d',' -f1` gw1=`echo $x|cut -d',' -f2` mask1=`echo $x|cut -d',' -f3` if [[ "$net" == "$net1" ]] && [[ "$mask" == "$mask1" ]] && [[ "$gw" == "$gw1" ]]; then ret=1 break fi else tmp1=`echo $x|cut -d',' -f1` gw1=`echo $x|cut -d',' -f2` n1=`echo $net |cut -d'.' -f1` n2=`echo $net |cut -d'.' -f2` n3=`echo $net |cut -d'.' -f3` n4=`echo $net |cut -d'.' -f4` let "netnum = $(( $n1 << 24 )) + $(( $n2 << 16 )) + $(( $n3 << 8 )) + $n4" bits=32 while [ `expr $netnum % 2` -eq 0 ] do let "bits = $bits -1" let "netnum = $netnum >> 1" done tmp2="$net/$bits"; #echo "$tmp2=$tmp2" if [[ "$tmp1" == "$tmp2" ]] && [[ "$gw" == "$gw1" ]]; then ret=1 break fi fi done fi echo $ret } result=$(route_exists $net $mask $gw) if [[ "$result" == "0" ]]; then if [[ "$op" == "add" ]]; then if [[ $OSTYPE = linux* ]]; then cmd="route add -net $net netmask $mask gw $gw" else cmd="/etc/route add -net $net -netmask $mask $gw" fi echo "$cmd" result=`$cmd 2>&1` code=$? if [ $code -ne 0 ]; then logger -t xCAT "$cmd\nerror code=$code, result=$result." echo " error code=$code, result=$result." exit 1; fi else echo "The route ($net $mask $gw) does not exist." fi else if [[ "$op" == "delete" ]]; then if [[ $OSTYPE = linux* ]]; then cmd="route delete -net $net netmask $mask gw $gw" else cmd="route delete -net $net -netmask $mask $gw" fi echo "$cmd" result=`$cmd 2>&1` code=$? if [ $code -ne 0 ]; then logger -t xCAT "$cmd\nerror code=$code, result=$result." echo " error code=$code, result=$result." exit 1; fi else echo "The route ($net $mask $gw) already exists." fi fi exit 0