Processes' FIBs

Oliver Fromme olli at lurza.secnetix.de
Tue Jan 17 12:21:45 UTC 2012


Kostik Belousov <kostikbel at gmail.com> wrote:
 > The patch misses compat32 bits and breaks compat32 ps/top.

Right, thank you for pointing it out!  I missed it because
I only have i386 for testing.

I've created new patch sets for releng8 and current.  These
include compat32 support and an entry for the manual page.

Would someone with amd64 please test the compat32 part?
I've been using this code on i386 for a few days without
any problems.

I've attached the patch for current below.  Both patch sets
are also available from this URL:
http://www.secnetix.de/olli/tmp/ki_fibnum/

Testing is easy:  Apply the patch, rebuild bin/ps and kernel.
Make sure that your kernel config has "options ROUTETABLES=16"
so multiple FIBs are supported.  Reboot.  Open a shell with
setfib, e.g. "setfib 3 /bin/sh" (no root required), type
"ps -ax -o user,pid,fib,command" or something similar, and
verify that the shell process and its children are listed
with the correct FIB.  When testing on amd64, use both the
native ps and an i386 binary.

Thank you very much!

Best regards
  Oliver

--- sys/sys/user.h.orig	2011-11-07 22:13:19.000000000 +0100
+++ sys/sys/user.h	2012-01-17 11:33:59.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
 
@@ -186,6 +186,7 @@
 	 */
 	char	ki_sparestrings[50];	/* 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	2012-01-15 19:47:24.000000000 +0100
+++ sys/kern/kern_proc.c	2012-01-17 12:52:36.000000000 +0100
@@ -836,6 +836,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;
 	kp->ki_start = p->p_stats->p_start;
 	timevaladd(&kp->ki_start, &boottime);
 	PROC_SLOCK(p);
@@ -1121,6 +1122,7 @@
 	bcopy(ki->ki_comm, ki32->ki_comm, COMMLEN + 1);
 	bcopy(ki->ki_emul, ki32->ki_emul, KI_EMULNAMELEN + 1);
 	bcopy(ki->ki_loginclass, ki32->ki_loginclass, LOGINCLASSLEN + 1);
+	CP(*ki, *ki32, ki_fibnum);
 	CP(*ki, *ki32, ki_cr_flags);
 	CP(*ki, *ki32, ki_jid);
 	CP(*ki, *ki32, ki_numthreads);
--- sys/compat/freebsd32/freebsd32.h.orig	2011-11-11 08:17:00.000000000 +0100
+++ sys/compat/freebsd32/freebsd32.h	2012-01-17 11:34:00.000000000 +0100
@@ -319,6 +319,7 @@
 	char	ki_loginclass[LOGINCLASSLEN+1];
 	char	ki_sparestrings[50];
 	int	ki_spareints[KI_NSPARE_INT];
+	int	ki_fibnum;
 	u_int	ki_cr_flags;
 	int	ki_jid;
 	int	ki_numthreads;
--- bin/ps/keyword.c.orig	2011-09-29 08:31:42.000000000 +0200
+++ bin/ps/keyword.c	2012-01-17 12:54:49.000000000 +0100
@@ -85,6 +85,7 @@
 	{"etimes", "ELAPSED", NULL, USER, elapseds, 0, CHAR, NULL, 0},
 	{"euid", "", "uid", 0, NULL, 0, CHAR, NULL, 0},
 	{"f", "F", NULL, 0, kvar, KOFF(ki_flag), INT, "x", 0},
+	{"fib", "FIB", NULL, 0, kvar, NULL, 2, KOFF(ki_fibnum), INT, "d", 0},
 	{"flags", "", "f", 0, NULL, 0, CHAR, NULL, 0},
 	{"gid", "GID", NULL, 0, kvar, KOFF(ki_groups), UINT, UIDFMT, 0},
 	{"group", "GROUP", NULL, LJUST, egroupname, 0, CHAR, NULL, 0},
--- bin/ps/ps.1.orig	2011-11-22 22:53:06.000000000 +0100
+++ bin/ps/ps.1	2012-01-17 12:56:17.000000000 +0100
@@ -29,7 +29,7 @@
 .\"     @(#)ps.1	8.3 (Berkeley) 4/18/94
 .\" $FreeBSD: src/bin/ps/ps.1,v 1.112 2011/11/22 21:53:06 trociny Exp $
 .\"
-.Dd November 22, 2011
+.Dd January 17, 2012
 .Dt PS 1
 .Os
 .Sh NAME
@@ -506,6 +506,9 @@
 minutes:seconds.
 .It Cm etimes
 elapsed running time, in decimal integer seconds
+.It Cm fib
+default FIB number, see
+.Xr setfib 1
 .It Cm flags
 the process flags, in hexadecimal (alias
 .Cm f )


More information about the freebsd-net mailing list