Bjoern A. Zeeb wrote:
 > On 10. Jan 2012, at 20:32 , Paul A. Procacci wrote:
 > > On Tue, Jan 10, 2012 at 09:12:17PM +0100, Oliver Fromme wrote:
 > > > Is there a way to find out the default FIB number of a
 > > > process (from a shell script)? I've checked the
 > > > manpages of ps and procstat, but they don't mention
 > > > FIBs. I'm using stable/8, if that matters.
 > > 
 > > http://lists.freebsd.org/pipermail/freebsd-questions/2009-April/196532.html
 > > 
 > > Not sure about ps/et al, but you can do it according to that post.  Nearly 
 > > 2 years old now.

To be honest, I prefer not to fumble around in kernel memory
with kgdb in a shell script.  Also, it requires root privilege
(setfib does not).

 > If you are thinking in terms of multiple forwarding information bases, yes
 > sysctl net.my_fibnum

Thanks.  Would it make sense to document that in setfib(1)?

However, I need to find the default FIB number for arbitrary
processes, not necessarily for the calling process.

I'm currently looking at the source code of ps, but adding
a field for the FIB isn't as trivial as I thought because
ps only sees struct kinfo_proc (via sysctl kern.proc.*)
which doesn't contain the FIB.  procstat does the same.

I'm currently trying to write a patch that copies p_fibnum
from struct proc to struct kinfo_proc (just like p_nice,
for example).  Does that make sense?  If so, does the patch
below look reasonable?  (I've made it on a stable/8 system,
but it should apply to 9 and 10, too.)

Best regards
   Oliver

--- ./sys/sys/user.h.orig       2011-07-12 14:23:54.000000000 +0200
+++ ./sys/sys/user.h    2012-01-11 15:35:50.000000000 +0100
@@ -83,7 +83,7 @@
  * it in two places: function fill_kinfo_proc in sys/kern/kern_proc.c and
  * function kvm_proclist in lib/libkvm/kvm_proc.c .
  */
-#define        KI_NSPARE_INT   9
+#define        KI_NSPARE_INT   8
 #define        KI_NSPARE_LONG  12
 #define        KI_NSPARE_PTR   6
 
@@ -177,6 +177,7 @@
         */
        char    ki_sparestrings[68];    /* spare string space */
        int     ki_spareints[KI_NSPARE_INT];    /* spare room for growth */
+       int     ki_fibnum;              /* Default FIB number */
        u_int   ki_cr_flags;            /* Credential flags */
        int     ki_jid;                 /* Process jail ID */
        int     ki_numthreads;          /* XXXKSE number of threads in total */
--- ./sys/kern/kern_proc.c.orig 2011-07-12 14:19:26.000000000 +0200
+++ ./sys/kern/kern_proc.c      2012-01-11 15:36:22.000000000 +0100
@@ -775,6 +775,7 @@
        kp->ki_swtime = (ticks - p->p_swtick) / hz;
        kp->ki_pid = p->p_pid;
        kp->ki_nice = p->p_nice;
+       kp->ki_fibnum = p->p_fibnum;
        PROC_SLOCK(p);
        rufetch(p, &kp->ki_rusage);
        kp->ki_runtime = cputick2usec(p->p_rux.rux_runtime);
--- ./bin/ps/keyword.c.orig     2011-07-12 13:42:48.000000000 +0200
+++ ./bin/ps/keyword.c  2012-01-11 15:44:27.000000000 +0100
@@ -90,6 +90,7 @@
                NULL, 0},
        {"etime", "ELAPSED", NULL, USER, elapsed, NULL, 12, 0, CHAR, NULL, 0},
        {"f", "F", NULL, 0, kvar, NULL, 8, KOFF(ki_flag), INT, "x", 0},
+       {"fib", "FIB", NULL, 0, kvar, NULL, 2, KOFF(ki_fibnum), INT, "d", 0},
        {"flags", "", "f", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
        {"ignored", "", "sigignore", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
        {"inblk", "INBLK", NULL, USER, rvar, NULL, 4, ROFF(ru_inblock), LONG,

_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[email protected]"

Reply via email to