svn commit: r190775 - head/sbin/route

Robert Watson rwatson at FreeBSD.org
Mon Apr 6 10:45:30 PDT 2009


On Mon, 6 Apr 2009, Randall Stewart wrote:

>> 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.

Perhaps I'm sort of old-fashioned, but I would generally expect:

(1) No netmask specified -- use class to determine netmask
(2) netmask specified using -net 192.168/20 -- use /20
(3) netmask specified using -netmask -- use the -netmask argument.

I guess I just don't administer routers very much anymore, but is using the 
last set bit a commonly used way to name networks these days, as opposed to 
explicitly setting the netmask with /whatever?

Robert N M Watson
Computer Laboratory
University of Cambridge

>
> 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)
>
>


More information about the svn-src-head mailing list