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