From tejblum@walrus-t.yandex.ru  Thu Jan 11 00:03:59 2007
Return-Path: <tejblum@walrus-t.yandex.ru>
Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52])
	by hub.freebsd.org (Postfix) with ESMTP id 028F616A407
	for <FreeBSD-gnats-submit@freebsd.org>; 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 <FreeBSD-gnats-submit@freebsd.org>; 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 <FreeBSD-gnats-submit@freebsd.org>; 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 <tejblum@yandex-team.ru>
Reply-To: Dmitrij Tejblum <tejblum@yandex-team.ru>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: Spurious EHOSTDOWN errors -- ARP retransmission bug.
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         107807
>Category:       kern
>Synopsis:       [netinet] [patch] Spurious EHOSTDOWN errors -- ARP retransmission bug.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    maxim
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Jan 11 00:10:16 GMT 2007
>Closed-Date:    Tue Feb 13 15:38:58 GMT 2007
>Last-Modified:  Tue Feb 13 15:38:58 GMT 2007
>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:

From: Dmitrij Tejblum <tejblum@yandex-team.ru>
To: bug-followup@freebsd.org
Cc:  
Subject: Re: kern/107807: [patch] Spurious EHOSTDOWN errors -- ARP retransmission
 bug.
Date: Thu, 11 Jan 2007 16:29:21 +0300 (MSK)

 Oops, the following version of the patch is better:
 
 --- sys/netinet/if_ether.c	Tue Sep 26 14:22:07 2006
 +++ sys/netinet/if_ether.c	Thu Jan 11 16:23:54 2007
 @@ -493,15 +493,16 @@
  	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;
 +		la->la_asked++;
  		RT_UNLOCK(rt);
 
  		arprequest(ifp, &sin, &SIN(dst)->sin_addr,
  		    IF_LLADDR(ifp));
  	} else
State-Changed-From-To: open->patched 
State-Changed-By: maxim 
State-Changed-When: Sun Jan 14 18:44:55 UTC 2007 
State-Changed-Why:  
Fixed in HEAD.  Thanks for the submission! 


Responsible-Changed-From-To: freebsd-bugs->maxim 
Responsible-Changed-By: maxim 
Responsible-Changed-When: Sun Jan 14 18:44:55 UTC 2007 
Responsible-Changed-Why:  
Feedbacks trap. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=107807 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/107807: commit references a PR
Date: Sun, 14 Jan 2007 18:44:39 +0000 (UTC)

 maxim       2007-01-14 18:44:17 UTC
 
   FreeBSD src repository
 
   Modified files:
     sys/netinet          if_ether.c 
   Log:
   o Increment requests counter right before send out an ARP query actually.
   Otherwise the code could lead to the spurious EHOSTDOWN errors.
   
   PR:             kern/107807
   Submitted by:   Dmitrij Tejblum
   MFC after:      1 month
   
   Revision  Changes    Path
   1.158     +2 -1      src/sys/netinet/if_ether.c
 _______________________________________________
 cvs-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/cvs-all
 To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: patched->closed 
State-Changed-By: maxim 
State-Changed-When: Tue Feb 13 15:38:39 UTC 2007 
State-Changed-Why:  
Merged to RELENG_6. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=107807 
>Unformatted:
