Skip site navigation (1)Skip section navigation (2)
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>