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 :-)


If_tun which is almost the same code has no such problem because
it lacks the 14 byte ethernet header. Openbsd has a combined
tun/tap driver, with some alignment hacks to fix this.


yes, that is true.

Should I create a pr for this problem, or is there a simple
quick fix possible ?


you probably should file pr. (1) and (2) above are quick fixes. (3) is more complicated and, maybe, not desirable.

max
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

_______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to