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>