[comp.protocols.tcp-ip] HYROUTE

slevy@UC.MSC.UMN.EDU ("Stuart Levy") (05/21/88)

If you don't use hyroute, then the hyperchannel driver will demand
an IP address of the form

	<anything>.<loopback_code>.<adapter_address>.<port_number>

(with each <xxx> an 8-bit field) and then you really do need a class A net.

But if you use hyroute, you can just put "direct" statements into
/etc/hyroute.conf and create an arbitrary mapping of
IP addresses to (loopback_code, adapter_addr, port_number, other_bits) tuples.

In other words, you can use any IP addresses you wish -- they should
fit just fine into a subnetted class B network.

Since Crays don't do subnetting yet (in 3.0 at least, I think not in 4.0
either) you may have to use another machine as a subnet gateway, but that
shouldn't be too troublesome.

I know the above is true for the Cray-2 since we're actually using
hyroute in this way.  I'm reasonably certain that X-MP's act the same way.

	Stuart Levy, Minnesota Supercomputer Center
	slevy@uc.msc.umn.edu, (612) 626-0211

MURAKAMI@ntt-20.ntt.jp (ken-ichiro murakami) (05/22/88)

I have some questions about address mapping between HYPERchannel and IP
address. Please let me know if you know HYROUTE mapping mechanism.

  We are using HYROUTE on SUN to connect hosts on HYPERchannel and hosts
on ethernet by TCP/IP.  We used class A IP address on Hyperchannel and
class C IP address on ethernet so far. We did not obtained the class A
address from SRI-NIC. This is because these hosts are isolated from
our main network. Recently, we decided to connect the HYPER channel
network to our main network and change the address from class A to
subnetted class B which we obtained from SRI-NIC. When I asked our
support engineer to change it, he told me that it was impossible to
use subnetted class B address on HYPERchannel. I heard the problem was
caused by HYROUTE address mapping facility. 

  Since I could not find HYROUTE documents around me, I estimated the
mapping from /etc/hosts, /etc/networks and /etc/hycf files. It seems
there is no dynamic mapping between HYPERchannel address and IP
address. Static mapping is employed. In addition to it, the mapping is
so simple and HYPERchannel address(8bit physical address + 8bit
logical address) is used as the lower 2 byte of IP address. It
consumes a lot of IP address. Our network address is class B and we
cannot afford to assign a lot of subnet and host address to
HYPERchannel. So, I'd like to ask you the following questions;


(1) Is there any way to save IP address on HYPERchannel?
(2) Why does HYROUTE need class A address on HYPERchannel?
(3) Where are the documents for HYROUTE and its mapping algorithm?
    Is it possible to get it?


Thanks in advance.

					KEN
			murakami%ntt-20.ntt.jp@relay.cs.net

	Ken-ichiro Murakami
	NTT Laboratories
	3-9-11, Midori-cho, Musashino-shi
	Tokyo, 180 Japan

-------

shore@REASON.PSC.EDU (05/23/88)

I'm using class B addresses on a HyperChannel subnet (8 bit subnet
portion) from a uVax running 4.3, but I had to tickle the device
driver some.  The problem was that the driver was using the host part
of the address as a hash key, as was hyroute, but the kernel and
library routines to get it are slightly different (the kernel strips
off subnet bits - the library version doesn't).  This is easily fixed,
but you may be having different problems with the Sun driver.

Melinda

dab@oliver.CRAY.COM (Dave Borman) (05/23/88)

I can proababaly answer quite a few questions about HYROUTE.
First, it depends on what version of HYROUTE you are using.
There have been two main versions of the HYPERchannel driver,
the one written years ago at Tektronix (and distributed with
4.2BSD and 4.3BSD), and the one developed by CRAY research.
The two drivers are incompattable with each other, because
the Tektronix driver uses a variable size Message Proper,
and the CRAY driver insists on a 64 byte Message Proper.
From my experience, a lot of vendors that have HYPERchannel
drivers are using the CRAY version (since there is now an
RFC, #1044, that is compatable with the CRAY version)

HYPERchannel does NOT have a broadcast mechanism.  Therefore,
if you are going to use TCP/IP over HYPERchannel, you can't use
ARP, and you have to have some other method for translating IP
address to HYPERchannel address.

For those that do not use a HYROUTE command, the usual method
is to put the 16 bit HYPERchannel address in the bottom 16 bits
of the IP address.  With that scheme, you can not use subnetted
Class B addresses.  Also, several implementations also use bits
in the 3rd byte for loopback control information, hence meaning
that this scheme only works with Class A addresses.  I personally
find this method as less than acceptable.

The HYROUTE program provides the kernel with mappings between
internet address and HYPERchannel addresses.  Typically, it uses
a hash table to speed up lookups.  HYROUTE should work with
Class A, B and C addresses.  If you machine/driver doesn't work
with all of them, complain to the vendor because the implementation
is broken.

For most implementations of HYROUTE, it does it's hashing, on just
the host part of the address.  I've been thinking long and hard on
this.  It can cause problems with subnets if the HYROUTE program and
the kernel are not in sync with each on whether or not a network is
subnetted.  The HYROUTE builds the hash table and writes it into
the kernel, so the kernel had better be hashing things the same
way as HYROUTE or things won't work right.  I'll probably be
changing the CRAY UNICOS implementation of HYROUTE to hash  on the
entire 32 bit IP address, and then it won't matter any more
whether an address is subnetted or not.

The bottom line is that any implementation of HYROUTE that limits
you to a subset of the IP addresses that the vendor supports is
broken.  (That is, if the vendor doesn't support subnets, then
his HYROUTE program isn't broken because it doesn't work with
subnets.  But if the vendor does support subnets, as the vendor
should, and HYROUTE does not work with subnets, then the vendor's
implementation is broken)

			-Dave Borman
			CRAY Research, INC.

lekash@ORVILLE.NAS.NASA.GOV (John Lekashman) (06/14/88)

     The bottom line is that any implementation of HYROUTE that limits
     you to a subset of the IP addresses that the vendor supports is
     broken.  (That is, if the vendor doesn't support subnets, then
     his HYROUTE program isn't broken because it doesn't work with
     subnets.  But if the vendor does support subnets, as the vendor
     should, and HYROUTE does not work with subnets, then the vendor's
     implementation is broken)

I bet this problem stems from the fact that the BSD distributed
in_lnaof() in the C-library does not return the subnetted net, only
the main network number.  (At least the version we have.  I think
I've gotten all bug fixes.)

So, the typical clever programmer just calls in_lnaof(addr) in
both the hyroute and the kernel, and loses cause they return
different things for user and kernel space.

I fixed this here some time ago by sticking in a in_mainlnaof()
in the hy driver, and calling that.  It returns only the class A,B,C
network.  It would be better to repair the c-library, but
it does not seem to be a trivial fix, and I didn't want to 
worry about breaking other things at this time.

I like the idea of hashing on the whole IP address better, but it
does mean a more difficult hashing algorithm, or else a really
big table.  I know those few rotates and adds don't much matter,
but they have to happen on every packet.

						john