From owner-freebsd-net@FreeBSD.ORG Wed Jan 11 15:06:57 2012 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 49E8B106566B; Wed, 11 Jan 2012 15:06:57 +0000 (UTC) (envelope-from olli@fromme.com) Received: from haluter.fromme.com (unknown [IPv6:2a01:170:102f:0:2a0:c9ff:fe42:8524]) by mx1.freebsd.org (Postfix) with ESMTP id B6B178FC0C; Wed, 11 Jan 2012 15:06:56 +0000 (UTC) Received: from haluter.fromme.com (irc_sucks@localhost [127.0.0.1]) by haluter.fromme.com (8.14.4/8.14.4) with ESMTP id q0BF6fwl067590; Wed, 11 Jan 2012 16:06:50 +0100 (CET) (envelope-from olli@fromme.com) Received: (from olli@localhost) by haluter.fromme.com (8.14.4/8.14.4/Submit) id q0BF6eAx067588; Wed, 11 Jan 2012 16:06:40 +0100 (CET) (envelope-from olli) From: Oliver Fromme Message-Id: <201201111506.q0BF6eAx067588@haluter.fromme.com> To: bzeeb-lists@lists.zabbadoz.net (Bjoern A. Zeeb) Date: Wed, 11 Jan 2012 16:06:40 +0100 (CET) In-Reply-To: X-Mailer: ELM [version 2.5 PL8] MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.2.6 (haluter.fromme.com [127.0.0.1]); Wed, 11 Jan 2012 16:06:50 +0100 (CET) Cc: freebsd-net@freebsd.org, olli@secnetix.de, "Paul A. Procacci" , freebsd-hackers@freebsd.org Subject: Re: Processes' FIBs X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 11 Jan 2012 15:06:57 -0000 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,