SVN: rc-scripts/trunk/sysconfig/network-scripts/functions.network

baggins baggins at pld-linux.org
Mon Apr 16 18:21:31 CEST 2007


Author: baggins
Date: Mon Apr 16 18:21:27 2007
New Revision: 8459

Modified:
   rc-scripts/trunk/sysconfig/network-scripts/functions.network
Log:
- calcprefix without need of awk


Modified: rc-scripts/trunk/sysconfig/network-scripts/functions.network
==============================================================================
--- rc-scripts/trunk/sysconfig/network-scripts/functions.network	(original)
+++ rc-scripts/trunk/sysconfig/network-scripts/functions.network	Mon Apr 16 18:21:27 2007
@@ -352,43 +352,33 @@
 	fi
 }
 
-#
-# folowing function calculates network prefix from given network mask
-# (c) 1999 Grzegorz Stanislawski <stangrze at open.net.pl>
-#
+# calculate network prefix from given network mask
 calcprefix()
 {
-	typeset len olen bad prefix
+	typeset old_IFS netmask prefix endp
+
+	old_IFS=$IFS
+	IFS='.'
+	netmask=$(echo $1)
+	IFS=$old_IFS
 
 	prefix=0
-	olen=8
-	bad=0
-	for i in 1 2 3 4; do
-		len=0
-		j=$(echo "$1" | awk -F"." "{ print \$${i} }")
-		case "$j" in
-		  255)	len=8 ;;
-		  254)	len=7 ;;
-		  252)	len=6 ;;
-		  248)	len=5 ;;
-		  240)	len=4 ;;
-		  224)	len=3 ;;
-		  192)	len=2 ;;
-		  128)	len=1 ;;
-		  0)	len=0 ;;
-		  *)	len=300 ;;
-		esac
-		[ "$len" -gt "$olen" ] && bad=1
-		prefix=$(($prefix + $len))
-		olen=$len
+	endp=0
+	for n in $netmask ; do
+		for i in 128 64 32 16 8 4 2 1 ; do
+			if [ $(($n & $i)) -ne 0 ]; then
+				if [ $endp -eq 0 ]; then
+					prefix=$(($prefix + 1))
+				else
+					echo "32"
+					return
+				fi
+			else
+				endp=1
+			fi
+		done
 	done
-
-	if [ "$bad" = "0" ]; then
-		echo "$prefix"
-	else
-		echo "32"
-	fi
-	return
+	echo $prefix
 }
 
 #


More information about the pld-cvs-commit mailing list