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
 |