Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 15 Mar 1999 19:46:54 -0500 (EST)
From:      jc@irbs.com
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   kern/10607: Fast forwarding breaks when arp cache expires
Message-ID:  <199903160046.TAA25708@irbs.irbs.com>

next in thread | raw e-mail | index | archive | help

>Number:         10607
>Category:       kern
>Synopsis:       Fast forwarding breaks when arp cache expires
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Mar 15 18:20:00 PST 1999
>Closed-Date:
>Last-Modified:
>Originator:     John Capo
>Release:        FreeBSD 3.1-STABLE i386
>Organization:
IRBS Engineering
>Environment:

3.1 router with two fxp interfaces between a Cisco 7000 and a LAN
of 5 web servers forwarding around 750 pps.

>Description:

When the arp entry for the Cisco expires, arp requests are issued
for the destination IP rather than the next hop IP which is th
Cisco.

The interface address is 209.36.62.211/29, the next hop Cisco is
209.36.62.210.

12:50:30.006992 arp who-has 198.108.225.232 tell 209.36.62.211
12:50:31.018596 arp who-has 212.210.246.39 tell 209.36.62.211
12:50:32.011115 arp who-has 193.227.69.106 tell 209.36.62.211
12:50:33.008656 arp who-has 193.4.198.10 tell 209.36.62.211
12:50:34.012108 arp who-has 194.51.131.253 tell 209.36.62.211
12:50:55.012083 arp who-has 209.36.62.209 tell 209.36.62.211
12:50:55.014307 arp reply 209.36.62.209 is-at 0:0:c:30:35:45

Also, the arp request for the next hop router manages to be delayed
for host_down_time for some reason.  The machine stops routing for
20 seconds.

>How-To-Repeat:

Fast forward packets at a good rate, several hundred per second
probably.  Wait for the next hop router arp entry to expire or
delete it from the arp table.

>Fix:

Not sure if this is the correct way to do this but it does solve
the problem.


Index: src/sys/netinet/ip_flow.c
===================================================================
RCS file: /usr/cvs/src/sys/netinet/ip_flow.c,v
retrieving revision 1.6
diff -c -r1.6 ip_flow.c
*** ip_flow.c	1998/12/07 21:58:38	1.6
--- ip_flow.c	1999/03/16 00:12:29
***************
*** 109,114 ****
--- 109,115 ----
  	struct ip *ip;
  	struct ipflow *ipf;
  	struct rtentry *rt;
+ 	struct sockaddr *dest;
  	int error;
  
  	/*
***************
*** 153,164 ****
  		ip->ip_sum += htons(IPTTLDEC << 8);
  	}
  
  	/*
  	 * Send the packet on its way.  All we can get back is ENOBUFS
  	 */
  	ipf->ipf_uses++;
  	ipf->ipf_timer = IPFLOW_TIMER;
! 	if ((error = (*rt->rt_ifp->if_output)(rt->rt_ifp, m, &ipf->ipf_ro.ro_dst, rt)) != 0) {
  		if (error == ENOBUFS)
  			ipf->ipf_dropped++;
  		else
--- 154,169 ----
  		ip->ip_sum += htons(IPTTLDEC << 8);
  	}
  
+ 	if (rt->rt_flags & RTF_GATEWAY)
+ 		dest = rt->rt_gateway;
+ 	else
+ 		dest = &ipf->ipf_ro.ro_dst;
  	/*
  	 * Send the packet on its way.  All we can get back is ENOBUFS
  	 */
  	ipf->ipf_uses++;
  	ipf->ipf_timer = IPFLOW_TIMER;
! 	if ((error = (*rt->rt_ifp->if_output)(rt->rt_ifp, m, dest, rt)) != 0) {
  		if (error == ENOBUFS)
  			ipf->ipf_dropped++;
  		else

>Release-Note:
>Audit-Trail:
>Unformatted:


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199903160046.TAA25708>