From owner-freebsd-net@FreeBSD.ORG Fri Aug 29 16:32:11 2008 Return-Path: Delivered-To: net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B676110656C1; Fri, 29 Aug 2008 16:32:11 +0000 (UTC) (envelope-from sam@freebsd.org) Received: from ebb.errno.com (ebb.errno.com [69.12.149.25]) by mx1.freebsd.org (Postfix) with ESMTP id 5F9AA8FC2E; Fri, 29 Aug 2008 16:32:11 +0000 (UTC) (envelope-from sam@freebsd.org) Received: from trouble.errno.com (trouble.errno.com [10.0.0.248]) (authenticated bits=0) by ebb.errno.com (8.13.6/8.12.6) with ESMTP id m7TGWAEH061060 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 29 Aug 2008 09:32:11 -0700 (PDT) (envelope-from sam@freebsd.org) Message-ID: <48B8248A.3060103@freebsd.org> Date: Fri, 29 Aug 2008 09:32:10 -0700 From: Sam Leffler Organization: FreeBSD Project User-Agent: Thunderbird 2.0.0.9 (X11/20071125) MIME-Version: 1.0 To: Luigi Rizzo References: <48AF08B7.4090804@FreeBSD.org> <48AF330B.4010802@FreeBSD.org> <20080825190207.GA73478@zibbi.meraka.csir.co.za> <20080825194038.GA75840@zibbi.meraka.csir.co.za> <20080826144130.S66593@maildrop.int.zabbadoz.net> <48B4A62D.3080300@freebsd.org> <20080829162853.GB46693@onelab2.iet.unipi.it> In-Reply-To: <20080829162853.GB46693@onelab2.iet.unipi.it> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-DCC--Metrics: ebb.errno.com; whitelist Cc: gnn@freebsd.org, net@freebsd.org, "Bjoern A. Zeeb" Subject: Re: Small patch to multicast code... X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Aug 2008 16:32:11 -0000 Luigi Rizzo wrote: > On Tue, Aug 26, 2008 at 05:56:13PM -0700, Sam Leffler wrote: > >> gnn@freebsd.org wrote: >> >>> At Tue, 26 Aug 2008 14:50:33 +0000 (UTC), >>> Bjoern A. Zeeb wrote: >>> >>> >>>> On Tue, 26 Aug 2008, George V. Neville-Neil wrote: >>>> >>>> Hi, >>>> >>>> >>>> >>>>> At Mon, 25 Aug 2008 21:40:38 +0200, >>>>> John Hay wrote: >>>>> >>>>> >>>>>> I have tried it and it does fix my problem. RIP2 over multicast works >>>>>> again. :-) >>>>>> >>>>>> >>>>> Good to hear. I'm waiting on a bit more feedback but I think I'll be >>>>> checking this in soon, with a big comment talking about the >>>>> performance implications etc. >>>>> >>>>> >>>> So wait a second; what was the m_pullup vs. m_dup thing? Has anyone >>>> actually tried that? I mean using a sledgehammer if a mitten would be >>>> enough is kind of .. uhm. You get it. >>>> >>>> >>> Perhaps I'm confused, I've been off dealing with other issues for a >>> few days, but m_pullup doesn't make a copy of the packet or its >>> fields, only makes sure that it's contiguous in memory. Am I wrong in >>> that? >>> >>> Since the bug is that two pieces of code modify the same data, in ways >>> that interfere, I'm not sure how we can avoid making a copy. It might >>> be nice to limit the copy, but we'd still need two copies, one for the >>> loopback device and one for the real device. >>> >>> >>> >> pull the headers up. copy just the headers. no deep copy. >> > > and to be more explicit - the result of m_pullup is that > the number of bytes specified as m_pullup argument are in > a private piece of memory -- the 'data' region within the mbuf -- so > you can freely play with them without trouble. > > That is why i suggested to just increase the argument to m_pullup > by the size of the udp header so one can overwrite the checksum > within the mbuf without touching the shared part in the cluster > (if any). > Hmm, never considered the m_pullup guaranteed a private copy (but I see it in the code). The original semantics were just that the data was contiguous. Sam