From owner-svn-src-all@FreeBSD.ORG Fri Jul 12 22:03:33 2013 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 95A95FE; Fri, 12 Jul 2013 22:03:33 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from mail.ipfw.ru (unknown [IPv6:2a01:4f8:120:6141::2]) by mx1.freebsd.org (Postfix) with ESMTP id 5D5DA11B9; Fri, 12 Jul 2013 22:03:33 +0000 (UTC) Received: from v6.mpls.in ([2a02:978:2::5] helo=ws.su29.net) by mail.ipfw.ru with esmtpsa (TLSv1:CAMELLIA256-SHA:256) (Exim 4.76 (FreeBSD)) (envelope-from ) id 1UxlUE-000BYw-Tf; Sat, 13 Jul 2013 02:06:46 +0400 Message-ID: <51E07D20.9040309@FreeBSD.org> Date: Sat, 13 Jul 2013 02:03:12 +0400 From: "Alexander V. Chernikov" User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120121 Thunderbird/9.0 MIME-Version: 1.0 To: Hiroki Sato Subject: Re: svn commit: r253262 - in head: lib/libc/gen sys/net References: <201307121236.r6CCaDCW095414@svn.freebsd.org> In-Reply-To: <201307121236.r6CCaDCW095414@svn.freebsd.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jul 2013 22:03:33 -0000 On 12.07.2013 16:36, Hiroki Sato wrote: > Author: hrs > Date: Fri Jul 12 12:36:12 2013 > New Revision: 253262 > URL: http://svnweb.freebsd.org/changeset/base/253262 > > Log: > Add a leaf node CTL_NET.PF_ROUTE.0.AF.NET_RT_DUMP.0.FIB. This returns > routing table with the specified FIB number, not td->td_proc->p_fibnum. Thanks! I had plans to do the same :) > > Modified: > head/lib/libc/gen/sysctl.3 > head/sys/net/rtsock.c > > Modified: head/lib/libc/gen/sysctl.3 > ============================================================================== > --- head/lib/libc/gen/sysctl.3 Fri Jul 12 12:18:07 2013 (r253261) > +++ head/lib/libc/gen/sysctl.3 Fri Jul 12 12:36:12 2013 (r253262) > @@ -28,7 +28,7 @@ > .\" @(#)sysctl.3 8.4 (Berkeley) 5/9/95 > .\" $FreeBSD$ > .\" > -.Dd February 11, 2012 > +.Dd May 17, 2013 > .Dt SYSCTL 3 > .Os > .Sh NAME > @@ -547,14 +547,14 @@ The length of each message is contained > The third level name is a protocol number, which is currently always 0. > The fourth level name is an address family, which may be set to 0 to > select all address families. > -The fifth and sixth level names are as follows: > -.Bl -column "Fifth level nameXXXXXX" "Sixth level is:XXX" -offset indent > -.It Sy "Fifth level name Sixth level is:" > -.It "NET_RT_FLAGS rtflags" > -.It "NET_RT_DUMP None" > -.It "NET_RT_IFLIST 0 or if_index" > -.It "NET_RT_IFMALIST 0 or if_index" > -.It "NET_RT_IFLISTL 0 or if_index" > +The fifth, sixth, and seventh level names are as follows: > +.Bl -column "Fifth level " "Sixth level " -offset indent > +.It Sy "Fifth level Sixth level Seventh level" > +.It "NET_RT_FLAGS rtflags None" > +.It "NET_RT_DUMP None None or fib number" > +.It "NET_RT_IFLIST 0 or if_index None" > +.It "NET_RT_IFMALIST 0 or if_index None" > +.It "NET_RT_IFLISTL 0 or if_index None" > .El > .Pp > The > > Modified: head/sys/net/rtsock.c > ============================================================================== > --- head/sys/net/rtsock.c Fri Jul 12 12:18:07 2013 (r253261) > +++ head/sys/net/rtsock.c Fri Jul 12 12:36:12 2013 (r253262) > @@ -1905,6 +1905,7 @@ sysctl_rtsock(SYSCTL_HANDLER_ARGS) > u_int namelen = arg2; > struct radix_node_head *rnh = NULL; /* silence compiler. */ > int i, lim, error = EINVAL; > + int fib = 0; > u_char af; > struct walkarg w; > > @@ -1912,7 +1913,17 @@ sysctl_rtsock(SYSCTL_HANDLER_ARGS) > namelen--; > if (req->newptr) > return (EPERM); > - if (namelen != 3) > + if (name[1] == NET_RT_DUMP) { > + if (namelen == 3) > + fib = req->td->td_proc->p_fibnum; > + else if (namelen == 4) > + fib = (name[3] == -1) ? > + req->td->td_proc->p_fibnum : name[3]; > + else > + return ((namelen< 3) ? EISDIR : ENOTDIR); > + if (fib< 0 || fib>= rt_numfibs) > + return (EINVAL); > + } else if (namelen != 3) > return ((namelen< 3) ? EISDIR : ENOTDIR); > af = name[0]; > if (af> AF_MAX) > @@ -1951,7 +1962,7 @@ sysctl_rtsock(SYSCTL_HANDLER_ARGS) > * take care of routing entries > */ > for (error = 0; error == 0&& i<= lim; i++) { > - rnh = rt_tables_get_rnh(req->td->td_proc->p_fibnum, i); > + rnh = rt_tables_get_rnh(fib, i); > if (rnh != NULL) { > RADIX_NODE_HEAD_RLOCK(rnh); > error = rnh->rnh_walktree(rnh, >