On Apr 6, 2009, at 11:07 AM, Coleman Kane wrote:
On Mon, 2009-04-06 at 14:27 +0000, Randall Stewart wrote:
Author: rrs
Date: Mon Apr 6 14:27:28 2009
New Revision: 190775
URL: http://svn.freebsd.org/changeset/base/190775
Log:
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.
I presume you meant "NOT 10.2/15" here? Correct me if I'm wrong, but
that's what I gathered by the discussion of "the bug" in the previous
thread.
It would have actually done any number of ones... basically looking
at the bottom number of 0 bits and that would be the / value.
So depending on what number you put with
10.x (for x) you could get a variety of results..
10.2 would == 10.2/17
10.4 would == 10.2/18
etc.
This is not the correct behavior.. even though it might be
technically right with regard to CIDR.
Now as far as the old class based routings go.. this is a problem
since the two schemes are at odds.
We have for a long time had doing
route add -net 10.2.0.0 be equal to adding 10.2/16
But if you follow the old Class based routing then
the upper 4 bits of the address needs to be examined to
determine if its a /8, /16 etc.
That is incorrect in a CIDR world.. but I don't see a way
to make the two schemes work together. And since previous to 7.1
the above worked.. I think this last fix is the right approach..
R
Need to explore the non-cidr address issue. The two
may not be seperable..
MFC after: 1 week
Modified:
head/sbin/route/route.c
Modified: head/sbin/route/route.c
=
=
=
=
=
=
=
=
=
=====================================================================
--- head/sbin/route/route.c Mon Apr 6 14:12:22 2009 (r190774)
+++ head/sbin/route/route.c Mon Apr 6 14:27:28 2009 (r190775)
@@ -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);
--
Coleman Kane
------------------------------
Randall Stewart
803-317-4952 (cell)
803-345-0391(direct)
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"