mbuf and IP frame lengths

Alan Garfield alan at fromorbit.com
Mon Apr 16 07:14:09 UTC 2007


Hi all!

A question, is it ok to just say pass an entire rx buffer of your
ethernet device up the chain and let the ip stack figure out the frame
size.

I have a device that can only ever receive 255 bytes of data, I receive
this data from a buffer in the PRS. On an interrupt I read this data out
of the PRS buffer into a local buffer, which I then :-

----
        eh = mtod(m, struct ether_header *);

        // Copy buf into mbuf
        bcopy(buf + 1, (char *)eh, FIFO_SIZE - 1);

        // Set the header length 
        m->m_pkthdr.len = m->m_len = FIFO_SIZE - 1;

        JNET_UNLOCK(sc);
        (*ifp->if_input)(ifp, m);
        JNET_LOCK(sc);
----

FIFO_SIZE = 256, minus 1 for a control character in the device (which
handily keeps under the 256 frame size).

The interface is working just fine, but I'm not sure if I'm completely
correct in the way I'm doing this.

I've tried casting the buffer to struct ip* to get ip->ip_len but I
always get a "dereferencing pointer to incomplete type" error (don't
exactly know why).

Any help would be greatly appreciated.

Thanks,
Alan.




More information about the freebsd-hackers mailing list