From owner-freebsd-bugs@FreeBSD.ORG Thu Jan 11 00:10:17 2007 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D71A616A416 for ; Thu, 11 Jan 2007 00:10:17 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [69.147.83.40]) by mx1.freebsd.org (Postfix) with ESMTP id B366D13C44B for ; Thu, 11 Jan 2007 00:10:17 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id l0B0AHsM023144 for ; Thu, 11 Jan 2007 00:10:17 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id l0B0AHhp023143; Thu, 11 Jan 2007 00:10:17 GMT (envelope-from gnats) Resent-Date: Thu, 11 Jan 2007 00:10:17 GMT Resent-Message-Id: <200701110010.l0B0AHhp023143@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Dmitrij Tejblum Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 028F616A407 for ; Thu, 11 Jan 2007 00:03:59 +0000 (UTC) (envelope-from tejblum@walrus-t.yandex.ru) Received: from walrus-t.yandex.ru (walrus-t.yandex.ru [213.180.206.233]) by mx1.freebsd.org (Postfix) with ESMTP id EF3C013C44C for ; Thu, 11 Jan 2007 00:03:57 +0000 (UTC) (envelope-from tejblum@walrus-t.yandex.ru) Received: from walrus-t.yandex.ru (localhost [127.0.0.1]) by walrus-t.yandex.ru (8.13.8/8.13.8) with ESMTP id l0ANqQfh008705 for ; Thu, 11 Jan 2007 02:52:26 +0300 (MSK) (envelope-from tejblum@walrus-t.yandex.ru) Received: (from tejblum@localhost) by walrus-t.yandex.ru (8.13.8/8.13.8/Submit) id l0ANqQYD008704; Thu, 11 Jan 2007 02:52:26 +0300 (MSK) (envelope-from tejblum) Message-Id: <200701102352.l0ANqQYD008704@walrus-t.yandex.ru> Date: Thu, 11 Jan 2007 02:52:26 +0300 (MSK) From: Dmitrij Tejblum To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Cc: Subject: kern/107807: Spurious EHOSTDOWN errors -- ARP retransmission bug. X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Dmitrij Tejblum List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jan 2007 00:10:17 -0000 >Number: 107807 >Category: kern >Synopsis: Spurious EHOSTDOWN errors -- ARP retransmission bug. >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Jan 11 00:10:16 GMT 2007 >Closed-Date: >Last-Modified: >Originator: Dmitrij Tejblum >Release: FreeBSD 6.2-PRERELEASE i386 >Organization: Yandex >Environment: System: FreeBSD walrus-t.yandex.ru 6.2-PRERELEASE FreeBSD 6.2-PRERELEASE #4: Mon Jan 8 18:47:27 MSK 2007 root@walrus-t.yandex.ru:/.amd_mnt/walrus-t/host/opt/usr/src/sys/i386/compile/W5L i386 >Description: ARP retrnsmission is rate limited (to 1 packet per second). But the count of ARP requests sent works before the rate limit. Thus, the EHOSTDOWN error may be returned before ARP request was retransmitted even once, and, with some "luck", without any networking problem -- right after first request was sent, but before the reply was received. >How-To-Repeat: >Fix: --- sys/netinet/if_ether.c Tue Sep 26 14:22:07 2006 +++ sys/netinet/if_ether.c Thu Jan 11 02:14:26 2007 @@ -493,19 +493,21 @@ if (la->la_asked < arp_maxtries) error = EWOULDBLOCK; /* First request. */ else error = (rt == rt0) ? EHOSTDOWN : EHOSTUNREACH; - if (la->la_asked++ == 0 || rt->rt_expire != time_second) { + if (la->la_asked == 0 || rt->rt_expire != time_second) { struct in_addr sin = SIN(rt->rt_ifa->ifa_addr)->sin_addr; rt->rt_expire = time_second; RT_UNLOCK(rt); arprequest(ifp, &sin, &SIN(dst)->sin_addr, IF_LLADDR(ifp)); + + la->la_asked++; } else RT_UNLOCK(rt); return (error); } >Release-Note: >Audit-Trail: >Unformatted: