Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 Apr 2007 17:14:06 +1000
From:      Alan Garfield <alan@fromorbit.com>
To:        freebsd-hackers@freebsd.org
Subject:   mbuf and IP frame lengths
Message-ID:  <1176707646.5068.23.camel@hiro.auspc.com.au>

next in thread | raw e-mail | index | archive | help
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.





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1176707646.5068.23.camel>