svn commit: r253262 - in head: lib/libc/gen sys/net

Alexander V. Chernikov melifaro at FreeBSD.org
Fri Jul 12 22:03:33 UTC 2013


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



More information about the svn-src-head mailing list