From owner-freebsd-net@FreeBSD.ORG Thu Apr 28 18:30:02 2005 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 7E68C16A4CE; Thu, 28 Apr 2005 18:30:02 +0000 (GMT) Received: from mail.vicor-nb.com (bigwoop.vicor-nb.com [208.206.78.2]) by mx1.FreeBSD.org (Postfix) with ESMTP id 504FE43D53; Thu, 28 Apr 2005 18:30:02 +0000 (GMT) (envelope-from julian@elischer.org) Received: from [208.206.78.97] (julian.vicor-nb.com [208.206.78.97]) by mail.vicor-nb.com (Postfix) with ESMTP id 3E0B27A41E; Thu, 28 Apr 2005 11:30:02 -0700 (PDT) Message-ID: <42712BAA.4070201@elischer.org> Date: Thu, 28 Apr 2005 11:30:02 -0700 From: Julian Elischer User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.7) Gecko/20050423 X-Accept-Language: en, hu MIME-Version: 1.0 To: Maksim Yevmenkin References: <20050428135120.GB21428@cell.sick.ru> <427111BF.2050607@savvis.net> In-Reply-To: <427111BF.2050607@savvis.net> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit cc: Sten Spans cc: net@freebsd.org Subject: Re: if_tap unaligned access problem X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Apr 2005 18:30:02 -0000 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 "freebsd-net-unsubscribe@freebsd.org"