Virtual device driver programming

Robert Watson rwatson at FreeBSD.org
Fri Jun 23 13:55:43 UTC 2006


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


More information about the freebsd-hackers mailing list