Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 8 Sep 1995 21:16:56 +0200 (MET DST)
From:      J Wunsch <j@uriah.heep.sax.de>
To:        freebsd-current@FreeBSD.org (FreeBSD-current users)
Cc:        kieber@sax.de (Ulf Kieber)
Subject:   SLIP routing problem
Message-ID:  <199509081916.VAA14347@uriah.heep.sax.de>

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

I'm stuck with this.  We're operating a small non-commercial ISP, and
after the upgrade to 2.0.5 (from 1.1.5.1) we experience the following
behaviour: whenever the modem line crashes while there's an active
SLIP link (the lines are rather noisy, it's old analog equipment),
subsequent attempts to log into the machine via SLIP will get an
"ioctl(SIOCAIFADDR): Address already exists".  (PPP is in the same
boat, so i'll refer to them as "pointopoint" below.)  Grepping through
the code shows that this error could only come from the routing code.
Interestingly enough, after a regular shutdown of the link, everything
will be okay, and all of those problems "disappear by aging", i.e.,
after about an hour or so, everything works again normally.

I've been digging through all the code in /sys/net, but i've got stuck
here.  Incidentally, an hour ago i've been logged into the machine
while the phenomenon happened to somebody else:

Sep  8 20:16:55 sax pppd[2010]: pppd 2.1.2 started by ppufo, uid 68
Sep  8 20:16:55 sax pppd[2010]: Connect: ppp0 <--> /dev/ttyd1
Sep  8 20:16:59 sax pppd[2010]: local  IP address 193.175.26.126
Sep  8 20:16:59 sax pppd[2010]: remote IP address 193.175.26.117
Sep  8 20:16:59 sax pppd[2010]: ioctl(SIOCAIFADDR): Address already exists

44 sax:~> /sbin/route get 193.175.26.117
   route to: ufo
destination: ufo
    gateway: sax-gw1
  interface: ed0
      flags: <UP,GATEWAY,HOST,DONE>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0         0      3597 

The interesting fact here is that "sax-gw1" is the _ethernet_ interface.
So now i've got the following picture:

o at startup time of any pointopoint interface, all routes to that
  interface are being cleared, and everything is started from scratch
  [in_ifscrub() is called]

o the link breaks, and all routes to the interface are being cleared
  immediately

o anyway, since there have been active connections over that link,
  further packets with the destination to that pointopoint interface
  will arrive; since the link is down, the only route that does apply
  to them is the _default_ route, which points back to the world via
  the ethernet

o this somehow (?) creates a routing table entry for this host, tagged
  for the (default route) ethernet interface, with an expiration time
  of 3600 seconds

o the pointopoint link comes back after redialing, but somehow (?)
  the bogus route through the ethernet interface will not be cleared
  by in_ifscrub() as it ought to be, and the subsequent attempt to
  create the interface route for this address fails since the routing
  code claims a route would already exist


Who can help us here?  It's actually a show-stopper for us. :-(

-- 
cheers, J"org

joerg_wunsch@uriah.heep.sax.de -- http://www.sax.de/~joerg/
Never trust an operating system you don't have sources for. ;-)



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