Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Jan 2012 15:04:18 +0100 (CET)
From:      Oliver Fromme <olli@lurza.secnetix.de>
To:        freebsd-hackers@FreeBSD.ORG, Oliver Fromme <olli@fromme.com>, freebsd-net@FreeBSD.ORG, "Paul A. Procacci" <pprocacci@datapipe.com>
Subject:   Re: Processes' FIBs
Message-ID:  <201201121404.q0CE4ItN066102@lurza.secnetix.de>
In-Reply-To: <FD475067-1F80-4CA3-A766-1E5CAF55680E@lists.zabbadoz.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Bjoern A. Zeeb wrote:
 > On 11. Jan 2012, at 15:06 , Oliver Fromme wrote:
 > > 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.)
 > 
 > I am not sure it makes too much sense in ps.  It might make sense in
 > sockstat maybe?

Well, every process has a default FIB number (p_fibnum in
struct proc).  It is a property of the process, just like
the nice value for example.  So I think it makes sense for
ps to be able to display it if the user asks for it.  This
is the piece of information that I need.

On the other hand, sockstat displays open sockets only.
Of course, an internet socket has a FIB number associated
with it, too, so sockstat could display it.  But that
would be a completely different piece of information,
and it wouldn't solve the actual problem that I'm currently
facing.

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,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201201121404.q0CE4ItN066102>