mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-03 21:02:34 +00:00 
			
		
		
		
	git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@1561 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			185 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/ksh
 | 
						|
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
 | 
						|
#egan@us.ibm.com
 | 
						|
#(C)IBM Corp
 | 
						|
 | 
						|
#
 | 
						|
#RH ipcalc "cleanroom" clone in ksh
 | 
						|
#no --silent option, just 2>/dev/null
 | 
						|
#
 | 
						|
 | 
						|
MYNAME=$0
 | 
						|
 | 
						|
function validateip
 | 
						|
{
 | 
						|
	set -A ipa $(echo $* | tr '.' ' ')
 | 
						|
	integer nipa=${#ipa[*]}
 | 
						|
	if ((nipa != 4))
 | 
						|
	then
 | 
						|
		return 1
 | 
						|
	fi
 | 
						|
	integer a=${ipa[0]}
 | 
						|
	for j in 0 1 2 3
 | 
						|
	do
 | 
						|
		integer a=${ipa[$j]}
 | 
						|
		if ((a > 255))
 | 
						|
		then
 | 
						|
			return 4
 | 
						|
		fi
 | 
						|
	done
 | 
						|
}
 | 
						|
 | 
						|
function usage {
 | 
						|
	echo "\nUsage: ${MYNAME} [--hostname] [--broadcast] [--network] [--netmask] ip [netmask]\n"
 | 
						|
}
 | 
						|
 | 
						|
if [ "$#" = "0" ]
 | 
						|
then
 | 
						|
	usage >&2
 | 
						|
	exit 1
 | 
						|
fi
 | 
						|
 | 
						|
HOSTNAME=0
 | 
						|
BROADCAST=0
 | 
						|
NETWORK=0
 | 
						|
NETMASK=0
 | 
						|
 | 
						|
for i in $*
 | 
						|
do
 | 
						|
	case "$i" in
 | 
						|
		-*)
 | 
						|
			case "$i" in
 | 
						|
				"--hostname")
 | 
						|
					HOSTNAME=1
 | 
						|
					shift
 | 
						|
					;;
 | 
						|
				"--broadcast")
 | 
						|
					BROADCAST=1
 | 
						|
					shift
 | 
						|
					;;
 | 
						|
				"--network")
 | 
						|
					NETWORK=1
 | 
						|
					shift
 | 
						|
					;;
 | 
						|
				"--netmask")
 | 
						|
					NETMASK=1
 | 
						|
					shift
 | 
						|
					;;
 | 
						|
				*)
 | 
						|
					usage >&2
 | 
						|
					exit 1
 | 
						|
					;;
 | 
						|
			esac
 | 
						|
			;;
 | 
						|
	esac
 | 
						|
done
 | 
						|
 | 
						|
if [ -z "$1" ]
 | 
						|
then
 | 
						|
	usage >&2
 | 
						|
	exit 1
 | 
						|
fi
 | 
						|
IP=$1
 | 
						|
shift
 | 
						|
 | 
						|
NM=""
 | 
						|
if [ ! -z "$1" ]
 | 
						|
then
 | 
						|
	NM=$1
 | 
						|
	shift
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$#" -gt "0" ]
 | 
						|
then
 | 
						|
	usage >&2
 | 
						|
	exit 1
 | 
						|
fi
 | 
						|
 | 
						|
if validateip $IP
 | 
						|
then
 | 
						|
	:
 | 
						|
else
 | 
						|
	echo "$0: bad ip $IP" >&2
 | 
						|
	exit 1
 | 
						|
fi
 | 
						|
 | 
						|
if [ ! -z "$NM" ]
 | 
						|
then
 | 
						|
	if validateip $NM
 | 
						|
	then
 | 
						|
		:
 | 
						|
	else
 | 
						|
		echo "$0: bad netmask $NM" >&2
 | 
						|
		exit 1
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$BROADCAST" = "1" -o "$NETWORK" = "1" ]
 | 
						|
then
 | 
						|
	if [ -z "$NM" ]
 | 
						|
	then
 | 
						|
		echo "$0: netmask expected" >&2
 | 
						|
		exit 1
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$HOSTNAME" = "1" ]
 | 
						|
then
 | 
						|
	if host $IP >/dev/null 2>&1
 | 
						|
	then
 | 
						|
		HOSTNAME=$(host $IP 2>/dev/null | awk '{print $5}' | awk -F. '{print $1}')
 | 
						|
		echo "HOSTNAME=$HOSTNAME"
 | 
						|
	else
 | 
						|
		echo "$0: cannot find hostname for $IP: Unknown host" >&2
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$BROADCAST" = "1" -o "$NETWORK" = "1" ]
 | 
						|
then
 | 
						|
	set -A ipa $(echo $IP | tr '.' ' ')
 | 
						|
	set -A nma $(echo $NM | tr '.' ' ')
 | 
						|
	NW=""
 | 
						|
	BC=""
 | 
						|
	for j in 0 1 2 3
 | 
						|
	do
 | 
						|
		integer a=${ipa[$j]}
 | 
						|
		integer b=${nma[$j]}
 | 
						|
		integer c=a\&b
 | 
						|
		NW="$NW$c."
 | 
						|
		integer d=b\^255
 | 
						|
		integer e=c\|d
 | 
						|
		BC="$BC$e."
 | 
						|
	done
 | 
						|
	NW=$(echo $NW | sed 's/.$//')
 | 
						|
	BC=$(echo $BC | sed 's/.$//')
 | 
						|
	if [ "$BROADCAST" = "1" ]
 | 
						|
	then
 | 
						|
		echo "BROADCAST=$BC"
 | 
						|
	fi
 | 
						|
	if [ "$NETWORK" = "1" ]
 | 
						|
	then
 | 
						|
		echo "NETWORK=$NW"
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$NETMASK" = "1" ]
 | 
						|
then
 | 
						|
	if [ -z "$NM" ]
 | 
						|
	then
 | 
						|
		integer ipa=$(echo $IP | awk -F. '{print $1}')
 | 
						|
		NM=255.255.0.0
 | 
						|
		if((ipa < 128))
 | 
						|
		then
 | 
						|
			NM=255.0.0.0
 | 
						|
		fi
 | 
						|
		if((ipa > 191))
 | 
						|
		then
 | 
						|
			NM=255.255.255.0
 | 
						|
		fi
 | 
						|
	fi
 | 
						|
	echo "NETMASK=$NM"
 | 
						|
fi
 | 
						|
 | 
						|
exit 0
 | 
						|
 |