Ok, looking at the solution a bit closer, the level

calculation was too agressive. Instead we should only
look at each nibble. This makes it so we make
10.2.0.0 become 10.2/16 NOT 10.2/17.

Need to explore the non-cidr address issue. The two
may not be seperable..

MFC after:	1 week
This commit is contained in:
Randall Stewart 2009-04-06 14:27:28 +00:00
parent 38fb1637a3
commit 5695251a13
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=190775

View File

@ -808,15 +808,15 @@ inet_makenetandmask(net, sin, bits)
* CIDR address.
*/
if ((bits == 0) && (addr != 0)) {
int i, j;
for(i=0,j=1; i<32; i++) {
u_long i, j;
for(i=0,j=0xff; i<4; i++) {
if (addr & j) {
break;
}
j <<= 1;
j <<= 8;
}
/* i holds the first non zero bit */
bits = 32 - i;
bits = 32 - (i*8);
}
mask = 0xffffffff << (32 - bits);