networking driver implementation question

Efren Serra efren.serra at Sun.COM
Wed Oct 17 00:58:51 UTC 2001


> Hi.
> I am porting Donald Beckers linux driver for the yellowfin/Symbios
> 53C885
> to RTEMS.
> When I look at the ethernet drivers in 'libchip' I can see that a common
> scheme is to create driver tasks. The TX task doing something like
> for (;;) {
>    wait_on_event();
>    IF_DEQUEUE(&ifp->if_snd, m);
>    sendpacket(m);
> }
> Note that this loop is running in the context of the network _driver's_
> task.
> A close look at IF_DEQUEUE() [which normally is only used in the context
> of the BSD networking task] reveals that the queue data structure is not
> protected by any kind of mutex.
> Can somebody explain how the queue is protected from being corrupted
> (other than by good karma)??
> -- Regards, Till.

IF_DEQUEUE is a C macro; there is another C macro of the form MBUFLOCK.  If
you really want to understand this, take a look at TCP/IP Illustrated Volume
2 by Stevens  It is all about mbufs.

More information about the users mailing list