[net.bugs.4bsd] ARP Bites The Big One

jdd@allegra.UUCP (10/16/83)

Well, I finally found out why I couldn't talk between my Suns running "4.2"
and my Vax running 4.1c.  Some quick background: 4.1c uses the low-order 24
bits of a site's Ethernet address as its Internet host number: Ethernet
address 0x02608c004800 becomes host number 0x004800.  The high-order 24 bits
must be the same for all Internet sites on the Ethernet, which means using
the same manufacturer's equipment throughout.  (This part would have been no
problem for me.)

ARP is intended to improve upon this situation by removing the fixed mapping
between Ethernet addresses and Internet addresses.  Each site broadcasts its
own arbitrary correspondence (automatically or on demand) to the other sites
on the net; they cache it for future reference.  Given this description, you
might assume that all Internet sites on an Ethernet must run ARP, which is
not too big an improvement over their having to use the same manufacturer's
equipment.  (Such a requirement would be a big problem for me, in both the
short term and the long term.)

It seems that in Sun's "4.2", there's a further kludge to allow mixing of
ARP and non-ARP sites on a given Ethernet: it uses the ARP mapping only if
the host number it's talking to is less than 1024 (0x400).  This way, you
can pick arbitrary (small) host numbers for sites that talk ARP and use the
4.1c mapping for sites that don't, or just use the 4.1c mapping for
everybody, or whatever.

Now here's the punch line: \This assumes that the low-order bits of an
Ethernet address is less than 1024 (0x400)!/  Well, the low-order bits of
the Ethernet addresses of \our/ non-Sun Internet systems are 0x198, 0x194,
0x102, 0x103, 0x104, 0x109, 0x393, 0x173 and (ta-da) 0x400, so we can't talk
from our Suns to most of our other systems!  (There are other questionable
misassumptions too; collect them all for valuable prizes.)

It is my understanding that that the ARP code on the Suns is the same as in
real 4.2 from Berkeley, implying it has the same misfeatures.  People with
source might consider looking around and possibly ripping it out, or
changing the 1024 to a more appropriate number.  (If I had had source for
Sun's "4.2", it would have helped my diagnosis a lot!)

Thanks to everyone who sent me mail on my previous query on this problem.
The fact that some people said that getting the Suns to talk was easy while
others said they couldn't do it made me suspicious.

Cheers,
John ("Spent \Three Weeks/ on This One") DeTreville
Bell Labs, Murray Hill

jgc@sunrise.UUCP (Jim Constantine) (10/21/83)

If you are running release 0.3 or 0.4 of SUN UNIX ( 4.1c BSD ) and
you wish to alter the point at which ARP takes over here is the patch :

adb -w vmunix.new

arpresolve + 0da ? ia
	should yield cmpl instruction
	if not quit.
arpresolve + 0de ? x
	should yield 400 ( i.e. 1024)
	to zap it say
	?w number
	^D