Date: Mon, 19 Jul 1999 08:53:55 -0500 (CDT) From: "Jasper O'Malley" <jooji@webnology.com> To: Allen Smith <easmith@beatrice.rutgers.edu> Cc: stable@FreeBSD.ORG Subject: Re: Snapshots Message-ID: <Pine.LNX.4.02.9907190810370.25441-100000@mercury.webnology.com> In-Reply-To: <9907190945.ZM1795@beatrice.rutgers.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 19 Jul 1999, Allen Smith wrote:
> Is choparp still functional? What are the symptoms of the proxy ARP
> breakage (just doesn't happen, or what)?
See problem report bin/12448. Here are the symptoms I posted to -hackers
and -stable a few weeks ago:
# ifconfig ed1
ed1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.54.1 netmask 0xffffff00 broadcast 192.168.54.255
ether 00:e0:29:32:21:ee
# arp -a
? (192.168.54.133) at 0:a0:c9:70:4c:1c [ethernet]
? (192.168.54.254) at 0:e0:1e:b9:7d:c1 [ethernet]
# netstat -nr
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.54.254 UGSc 2 0 ed1
127.0.0.1 127.0.0.1 UH 0 4 lo0
192.168.27 link#1 UC 0 0 fxp0
192.168.54 link#2 UC 0 0 ed1
192.168.54.133 0:a0:c9:70:4c:1c UHLW 1 128 ed1 818
192.168.54.254 0:e0:1e:b9:7d:c1 UHLW 1 0 ed1 818
# arp -s 192.168.54.5 auto pub
using interface ed1 for proxy with address 0:e0:29:32:21:ee
arp: writing to routing socket: File exists
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[snip]
I've started to trace the origin of the "File exists" error, but I'm
stumped after a point. It's actually generated in the rtrequest() function
in src/sys/net/route.c (grep for EEXIST in that file), and it's caused by
a failure to insert a new ARP route into the routing tree. route.c
attempts to insert the route by calling rnh->rnh_addaddr(); rnh is a
struct radix_node_head, and rnh_addaddr() is a function pointer to
rn_addroute() in src/sys/net/radix.c. The insert fails in rn_addroute(),
right here:
saved_tt = tt = rn_insert(v, head, &keyduplicated, treenodes);
if (keyduplicated) {
for (t = tt; tt; t = tt, tt = tt->rn_dupedkey) {
if (tt->rn_mask == netmask)
return (0);
^^^^^^^^^^
The zero returned here is what triggers the senderr(EEXIST) in route.c;
the keyduplicated variable above is set to 1 in rn_insert() in radix.c,
right here:
while (cp < cplim)
if (*cp2++ != *cp++)
goto on1;
*dupentry = 1;
^^^^^^^^^^^^^
return t;
dupentry is a pointer to keyduplicated. After that, I lose it :) Note
that none of this code has changed since 3.2-RELEASE, BTW. The bug is
elsewhere. It's not in the arp command itself, though; a 3.2-RELEASE arp
command on a 3.2-STABLE box produces the same error.
Cheers,
Mick
The Reverend Jasper P. O'Malley dotdot:jooji@webnology.com
Systems Administrator ringring:asktheadmiral
Webnology, LLC woowoo:http://www.webnology.com/~jooji
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.LNX.4.02.9907190810370.25441-100000>
