Date: Mon, 6 Apr 2009 09:33:33 -0400 From: Randall Stewart <rrs@lakerest.net> To: Robert Watson <rwatson@FreeBSD.org> Cc: svn-src-head@FreeBSD.org, Randall Stewart <rrs@FreeBSD.org>, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org Subject: Re: svn commit: r190758 - head/sbin/route Message-ID: <B1BDC35F-546A-4261-B34C-008C1E86A580@lakerest.net> In-Reply-To: <alpine.BSF.2.00.0904061139110.34905@fledge.watson.org> References: <200904061009.n36A9K6l063517@svn.freebsd.org> <alpine.BSF.2.00.0904061139110.34905@fledge.watson.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Sure it should.. If you do route add -net 10.0.0.0 it will work.. Hmmm I wonder if more is not needed though.. let me think on this. What strange about the whole thing is that the behavior I put in used to work in previous releases... its rather strange actually.. I reviewed several of the past commits and I can't see what broke it. R On Apr 6, 2009, at 6:39 AM, Robert Watson wrote: > > On Mon, 6 Apr 2009, Randall Stewart wrote: > >> Author: rrs >> Date: Mon Apr 6 10:09:20 2009 >> New Revision: 190758 >> URL: http://svn.freebsd.org/changeset/base/190758 >> >> Log: >> Class based addressing went out in the early 90's. Basically >> if a entry is not route add -net xxx/bits then we should use >> the addr (xxx) to establish the number of bits by looking at >> the first non-zero bit. So if we enter >> route add -net 10.1.1.0 10.1.3.5 >> this is the same as doing >> route add -net 10.1.1.0/24 >> Since the 8th bit (zero counting) is set to 1 we set bits >> to 32-8. >> >> Users can of course still use the /x to change this behavior >> or in cases where the network is in the trailing part >> of the address, a "netmask" argument can be supplied to >> override what is established from the interpretation of the >> address itself. e.g: >> >> route add -net 10.1.1.8 -netmask 0xff00ffff >> >> should overide and place the proper CIDR mask in place. > > Does this maintain compatibility for people who may still > mysteriously be specifying class-based IPs and netmasks in > configuration files? If not, this should not be MFC'd... > > Robert N M Watson > Computer Laboratory > University of Cambridge > >> >> PR: 131365 >> MFC after: 1 week >> >> Modified: >> head/sbin/route/route.c >> >> Modified: head/sbin/route/route.c >> = >> = >> = >> = >> = >> = >> = >> = >> = >> ===================================================================== >> --- head/sbin/route/route.c Mon Apr 6 07:13:26 2009 (r190757) >> +++ head/sbin/route/route.c Mon Apr 6 10:09:20 2009 (r190758) >> @@ -713,7 +713,7 @@ newroute(argc, argv) >> #ifdef INET6 >> if (af == AF_INET6) { >> rtm_addrs &= ~RTA_NETMASK; >> - memset((void *)&so_mask, 0, sizeof(so_mask)); >> + memset((void *)&so_mask, 0, sizeof(so_mask)); >> } >> #endif >> } >> @@ -803,21 +803,22 @@ inet_makenetandmask(net, sin, bits) >> addr = net << IN_CLASSC_NSHIFT; >> else >> addr = net; >> - >> - if (bits != 0) >> - mask = 0xffffffff << (32 - bits); >> - else if (net == 0) >> - mask = 0; >> - else if (IN_CLASSA(addr)) >> - mask = IN_CLASSA_NET; >> - else if (IN_CLASSB(addr)) >> - mask = IN_CLASSB_NET; >> - else if (IN_CLASSC(addr)) >> - mask = IN_CLASSC_NET; >> - else if (IN_MULTICAST(addr)) >> - mask = IN_CLASSD_NET; >> - else >> - mask = 0xffffffff; >> + /* >> + * If no /xx was specified we must cacluate the >> + * CIDR address. >> + */ >> + if ((bits == 0) && (addr != 0)) { >> + int i, j; >> + for(i=0,j=1; i<32; i++) { >> + if (addr & j) { >> + break; >> + } >> + j <<= 1; >> + } >> + /* i holds the first non zero bit */ >> + bits = 32 - i; >> + } >> + mask = 0xffffffff << (32 - bits); >> >> sin->sin_addr.s_addr = htonl(addr); >> sin = &so_mask.sin; >> > ------------------------------ Randall Stewart 803-317-4952 (cell) 803-345-0391(direct)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B1BDC35F-546A-4261-B34C-008C1E86A580>