From owner-freebsd-net@FreeBSD.ORG Thu Nov 10 16:44:49 2005 Return-Path: X-Original-To: freebsd-net@freebsd.org 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 8533216A420 for ; Thu, 10 Nov 2005 16:44:49 +0000 (GMT) (envelope-from fming@borderware.com) Received: from mail.borderware.com (mail.borderware.com [207.236.65.231]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7C75443D53 for ; Thu, 10 Nov 2005 16:44:48 +0000 (GMT) (envelope-from fming@borderware.com) Message-ID: <437378FF.2010901@borderware.com> Date: Thu, 10 Nov 2005 11:44:47 -0500 From: ming fu User-Agent: Debian Thunderbird 1.0.2 (X11/20050602) X-Accept-Language: en-us, en MIME-Version: 1.0 To: freebsd-net@freebsd.org Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Lost fragment when send to ip that need arp resolve 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: Thu, 10 Nov 2005 16:44:49 -0000 Hi, When sending large udp packet (larger then mtu) to an ip that need arp resolve, the first frag will be lost. The ip_output() sends out the fragments in a loop. The first frag cause an arp request and the mbuf will be hold in "struct llinfo_arp" for send after arp can be resolved. However, the ip_output continue to send all the fragment, and the "struct llinfo_arp" can only hold one mbuf. The later frag will overwrite the point to ealier mbuf. Once arp is resolved, only the last mbuf will be sent, and all the rest will be lost. Anyone know if there is attemp to make the "struct llinfo_arp" to hold more than one mbuf, or there is a way to return an error to the application so it will do a re-send. Regards, Ming