From owner-freebsd-net Tue Apr 4 19: 9:12 2000 Delivered-To: freebsd-net@freebsd.org Received: from sofia.csl.sri.com (sofia.csl.sri.com [130.107.19.127]) by hub.freebsd.org (Postfix) with ESMTP id 51FBB37B742 for ; Tue, 4 Apr 2000 19:09:10 -0700 (PDT) (envelope-from molter@sofia.csl.sri.com) Received: (from molter@localhost) by sofia.csl.sri.com (8.9.3/8.9.3) id TAA00877 for freebsd-net@freebsd.org; Tue, 4 Apr 2000 19:09:10 -0700 (PDT) (envelope-from molter) From: Marco Molteni Date: Tue, 4 Apr 2000 19:09:09 -0700 To: freebsd-net@freebsd.org Subject: MPLS (Multiprotocol Label Switching) on FreeBSD? Message-ID: <20000404190909.A826@sofia.csl.sri.com> Mail-Followup-To: freebsd-net@freebsd.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 1.0pre4i Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Hi all, I wanted to learn how to do kernel programming and so I thought of implementing a cooperative routing lookup technique, for example a very simplified version of MPLS (Multiprotocol Label Switching, see [1]), or Cisco's tag switching (see [2]). As always in these cases, it turned out that it is more difficult than it seemed :-) So I wanted to know if someone has worked on this stuff on a FreeBSD box or is interested in doing some experiments together. If you are wondering what is a cooperative routing lookup technique, here is a simplified introduction: Normally routers forward IP packets based on the destination IP address, looking up the interface to use in the kernel routing table. The routing table, at least in BSD kernels, is similar to a Patricia trie (which is a special binary tree). The lookup starts at the head of the trie and walks the trie until it finds a leaf that matches. If no match is found, we go up one level and try again, eventually backtracking till the head, which normally should contain the default route. With cooperative routing lookup, the previous-hop router "knows" the structure of my tree, and gives me an "hint" (an integer) that I can use to jump directly to a small subtree that should contain the routing entry I need. Then I will give a similar hint to the next-hop router. All this should allow a router to forward a lot more packets per unit of time, because it needs fewer accesses to the routing tree to find a match. [1] http://search.ietf.org/internet-drafts/draft-ietf-mpls-arch-06.txt [2] RFC 2105 Thanks Marco To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message