Subject: Re: User-level ARP handling
To: Matt Thomas <matt@lkg.dec.com>
From: Charles M. Hannum <mycroft@MIT.EDU>
List: tech-net
Date: 08/31/1996 14:11:58
Matt Thomas <matt@lkg.dec.com> writes:

> 
> > We handle RIP requests through a user-level program.  When the kernel
> > needs to send a packet to a random IP address, and it doesn't already
> > have an IP route for it, it sends a RTM_LOSS message to the routing
> > socket.  The routing daemon does its magic (RIP, router discovery,
> > whatever) to come up with a route and then delivers it to the kernel.
> 
> I believe the above analogy in flawed.  We handle routing protocols
> in a user daemon because there are lots of different routing protocols.
> And because not everyone listens to them (I diable routed on my systems).

So?  AFAIK, on at least ARCnet, ARP is also optional.  Hell; one could
envision building MAC addresses from IP addresses and tossing ARP
completely, but I wasn't going to mention that.  (Obviously this
wouldn't be scalable to IPv6.  And obviously you have to maintain
compatibility with any legacy systems you have.)

> Redirects are handled in the kernel.  Should they be moved to a daemon
> as well?

Probably.

> There still needs to "some" arp in the kernel (caching the mbuf that
> caused us to do an ARP).

No.  As I discussed already, this would have no effect on how many
packets we lose while building the ARP table.

> > Lastly, and perhaps my real motivation B-), this makes a very simple
> > form of bridging that I once discussed *really* trivial to implement.
> 
> IP bridging?  Sounds evil :-).

The idea is more or less `bridging by massive proxy ARP'.  It's
simple, and it would work.  Obviously, in this case you wouldn't want
the whole proxy ARP table in the kernel.  You'd also need a way of
issuing ARP requests and seeing the replies from the user-level
daemon.

> Other issues include deciding how to notify the daemon that it should
> be hanlding an ARP request?

The routing socket interface already handles this with RTM_LOSS.