git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@10332 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			117 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			117 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
 | |
| 
 | |
|     os_type=$(uname -s)
 | |
| 
 | |
|     result=`netstat -nr|grep $net`;
 | |
|     if [ $? -eq 0 ] && [ -n "$result" ]; then
 | |
| 	for x in `echo "$result"|tr -s " " ","`
 | |
|        	do
 | |
| 	    if [ "$os_type" = "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`
 | |
| 
 | |
| 		netnum="$(( ($n1 << 24) + ($n2 << 16) + ($n3 << 8) + $n4 ))"
 | |
|                 bits=32
 | |
| 		while [ `expr $netnum % 2` -eq 0 ]
 | |
| 		do
 | |
| 		    bits="$(( $bits - 1 ))"
 | |
| 		    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 [ "$(uname -s)" = "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 [ "$(uname -s)" = "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
 |