From owner-freebsd-net@FreeBSD.ORG Tue Apr 29 19:17:14 2008 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 725A4106566C for ; Tue, 29 Apr 2008 19:17:14 +0000 (UTC) (envelope-from julian@elischer.org) Received: from outO.internet-mail-service.net (outo.internet-mail-service.net [216.240.47.238]) by mx1.freebsd.org (Postfix) with ESMTP id 509C98FC0C for ; Tue, 29 Apr 2008 19:17:14 +0000 (UTC) (envelope-from julian@elischer.org) Received: from mx0.idiom.com (HELO idiom.com) (216.240.32.160) by out.internet-mail-service.net (qpsmtpd/0.40) with ESMTP; Tue, 29 Apr 2008 17:33:02 -0700 Received: from julian-mac.elischer.org (localhost [127.0.0.1]) by idiom.com (Postfix) with ESMTP id 9DEEE2D6012; Tue, 29 Apr 2008 12:17:13 -0700 (PDT) Message-ID: <4817743B.6090107@elischer.org> Date: Tue, 29 Apr 2008 12:17:15 -0700 From: Julian Elischer User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Kevin Oberman References: <20080429185100.57C2445010@ptavv.es.net> In-Reply-To: <20080429185100.57C2445010@ptavv.es.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: FreeBSD Net Subject: Re: multiple routing tables review patch ready for simple testing. 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: Tue, 29 Apr 2008 19:17:14 -0000 Kevin Oberman wrote: >> Date: Tue, 29 Apr 2008 00:44:18 -0700 >> From: Julian Elischer >> Sender: owner-freebsd-net@freebsd.org >> >> The patch can be found at >> http://www.freebsd.org/~julian/mrt.diff >> (or http://www.freebsd.org/~julian/mrt6.diff for RELENG_6) >> >> or source can be taken from perforce at: >> //depot/user/julian/routing/src >> >> a kernel needs to be created with the option ROUTETABLES=N >> >> e.g. >> +options ROUTETABLES=2 # max 16. 1 is back >> compatible. >> >> leaving this out will result in just a single routing table as per normal. >> >> the max is 16 but I have an artificial (even lower) at 8 but that may >> be gone by the time people try it :-) >> >> I ws informed early in this project that kernel routing tables should >> now be refered to as FIBs (forwarding Information base?). >> >> the new command "setfib" sets teh default fib for a process and all its >> decendents > > I have been working with big routers in my day job for years and it's > really frustrating to not have this sort of capability when I work with > FreeBSD, but I don't expect a general purpose OS to ever have the > routing capabilities of a dedicated router. > > I think this will really, really be nice for my needs, though. > > As terminology goes, I think you have it slightly off. > > Modern routers have two "classes" of tables to move packets between > interfaces: the RIB Routing information base) and the FIB (Forwarding > Information Base). A router has multiple RIBs, usually one for each > network layer protocol (IPv4 and IPv6, both unicast and multicast) and > added RIBs for policy based routes. They may be further broken up by the > protocol used to populate the table (BGP, OSPF, ISIS, MPLS, static, > connected, ...) > > The RIBs exports data, as needed to a single FIB which is used by the > ASICs (hardware forwarding engines) to do the actual forwarding of the > packets. In a real router, the forwarding of almost all packets is done > in hardware with no real involvement by the processor that determines the > routes. (N.B. This is a gross simplification of what modern routers > do or can do, but I don't want to send a book to the list.) > > A general purpose OS is a different beast as it has no physical > equivalent of the FIB. It may have multiple routing tables, though, to > I think setrib would be a term less likely to cause confusion then > setfib even though, in the case of your FreeBSD patches, it's really > both. The way I see it the routing daemons (e.g. quagga) have the RIBS and the kernel has FIBS because it doesn't really know the big picture. If we need to change the terminology now is the time.. I asked for comments on terminology before and this is what we came up with.. but once it gets committed.... it gets set in stone.