git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@9242 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			115 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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="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
 |