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,


_______________________________________________
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"

Reply via email to