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>