Date: Thu, 28 Apr 2005 22:58:45 +0159 From: Claudio Jeker <cjeker@diehard.n-r-g.com> To: freebsd-net@freebsd.org, net@freebsd.org Subject: Re: if_tap unaligned access problem Message-ID: <20050428205907.GB9606@diehard.n-r-g.com> In-Reply-To: <42712BAA.4070201@elischer.org> References: <20050428135120.GB21428@cell.sick.ru> <427111BF.2050607@savvis.net> <42712BAA.4070201@elischer.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Apr 28, 2005 at 11:30:02AM -0700, Julian Elischer wrote: > > > Maksim Yevmenkin wrote: > > >Hello, > > > >>A quick question about if_tap, the tapwrite function > >>( which copies an ethernet frame into an mbuf using uiotombuf ) > >>is broken on alpha and sparc64. > >>The 14 byte ethernet header causes the rest of the frame to > >>be misaligned on 4 byte boundaries. This causes crashes in > >>various other parts of the kernel. The solution would be to > >>shift the mbuf by two bytes, but I am not quite sure where > >>this should happen. > > > > > >i think we have few options here: > > > >1) revert back original tapwrite function that was changed in v. 1.48 > >and set offset to 2 bytes in top mbuf > > > >2) change current version of tapwrite so it would m_prepend and > >m_pullup mbuf after m_uiotombuf > > > >3) change m_uiotombuf to accept one more parameter - mbuf offset at > >which data should be copied. there are not that many users of m_uiotombuf > > > >/sys/kern/uipc_syscalls.c > >/sys/net/if_tap.c > >/sys/net/if_tun.c > >/sys/netgraph/ng_device.c > > > I think we should defien a MAC header that looks like: > char dummy[2] > char dest[6] > char src[6] > char type_len[2] > and make ether net cards start writing 2 bytes into the buffer :-) > There seems to be a reason that a function like m_adj() and ETHER_ALIGN exists. -- :wq Claudio
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050428205907.GB9606>