From owner-freebsd-hackers@FreeBSD.ORG Fri Jun 23 13:55:43 2006 Return-Path: X-Original-To: freebsd-hackers@freebsd.org Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D7DEF16A508 for ; Fri, 23 Jun 2006 13:55:43 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from cyrus.watson.org (cyrus.watson.org [209.31.154.42]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7193243D4C for ; Fri, 23 Jun 2006 13:55:43 +0000 (GMT) (envelope-from rwatson@FreeBSD.org) Received: from fledge.watson.org (fledge.watson.org [209.31.154.41]) by cyrus.watson.org (Postfix) with ESMTP id D204246BC2; Fri, 23 Jun 2006 09:55:42 -0400 (EDT) Date: Fri, 23 Jun 2006 14:55:42 +0100 (BST) From: Robert Watson X-X-Sender: robert@fledge.watson.org To: Johnny Choque In-Reply-To: <006701c696ad$81b41850$2bba90c1@Altair> Message-ID: <20060623145326.U12942@fledge.watson.org> References: <006701c696ad$81b41850$2bba90c1@Altair> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: freebsd-hackers@freebsd.org Subject: Re: Virtual device driver programming X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 23 Jun 2006 13:55:43 -0000 On Fri, 23 Jun 2006, Johnny Choque wrote: > I'm interested in programming a virtual network device driver -Linux > concept- on a FreeBSD box. The idea behind of this sort of interface is the > following: > > "From the kernel's point of view, a network interface is a software object > that can process outgoing packets, and the actual transmission mechanism > remains hidden inside the interface driver. Even though most interfaces are > associated to physical devices (or, for the loopback interface, to a > software-only data loop), it is possible to design network interface drivers > that rely on other interfaces to perform actual packet transmission. The > idea of a ``virtual'' interface can be useful to implement special-purpose > processing on data packets while avoiding to hack with the network subsystem > of the kernel." > > I know that is not too complicated to program this sort of functionality in > linux but I would like to do it over freebsd, has anybody some idea on how > could I start doing it? I've been searching in the freebsd handbook but I > haven't found anything really relevant. tap(4) and tun(4) describe pseudo-devices you can use to instantiate ethernet and tunnel interfaces from user space. Programs attach to pseudo-devices, and using read/write operations on the pseudo-device, can receive and generate packets on the network interface. In kernel, the ifnet(9) API is used to implement network interfaces -- nothing in the API requires that the under-side of a network interface be hardware. In fact, a great many network types without underlying hardware have been implemented, including the loopback interface, encapsulation interfaces, and the tap/tun interface drivers. Robert N M Watson Computer Laboratory University of Cambridge