Graham Hares writes:
> if [ $oct1 -lt 128 ]&&[ $oct2 -eq 0 ]&&[ $oct3 -eq 0 ]&&[ $oct4 -eq
> 0 ];then cidr=0;
You can do most of this with:
perl -e 'use Socket; print unpack("%32b*",inet_aton($ARGV[0])), "\n";' $nm
If you really want to make sure that unsupported non-contiguous
netmasks are all transformed into /24 as this script does (not sure
why that's a good thing), then:
perl -e 'use Socket;
$addr = inet_aton($ARGV[0]);
$bits = unpack("%32b*",$addr);
$contig = pack("N",~((1<<(32-$bits))-1));
print (($contig eq $addr ? $bits : 24), "\n");' $nm
> cidr2dot() {
> cidr=$1
> if [ $cidr -ge 32 ];then netmask='255.255.255.255'
Similarly:
perl -e 'use Socket;
($c1,$c2,$c3,$c4) = unpack("C4",pack("N",~((1<<(32-$ARGV[0]))-1)));
print "$c1.$c2.$c3.$c4\n";' $cidr
There probably ought to be better ways of handling IP values in your
shell of choice.
--
James Carlson, Solaris Networking <[EMAIL PROTECTED]>
Sun Microsystems / 1 Network Drive 71.232W Vox +1 781 442 2084
MS UBUR02-212 / Burlington MA 01803-2757 42.496N Fax +1 781 442 1677
_______________________________________________
zones-discuss mailing list
[email protected]