Linux-1.3.7 (was Re: Networking - the next generation)

Linus Torvalds (Linus.Torvalds@cs.helsinki.fi)
Thu, 6 Jul 1995 14:42:52 +0300


Linus Torvalds: "Networking - the next generation" (Jul 4, 19:15):
> I'm finally finding myself with some time do do alpha work again, so I
> started on networking today (yeah, I know I said "RSN" a few months ago.
> So sue me).

Ok, I have made linux v1.3.7 available, and associated axp-patches (on
ftp.cs.helsinki.fi in pub/Software/Linux/Kernel under the directories
v1.3 and testing respectively).

(The axp-specific diff's are the same old thing: termios translation and
ECOFF handling, while OSF/1 partition handling is now in the default
kernel. There is nothing networking-related in the axp-specific
patches, just OSF/1 binary compatibility stuff).

Anyway, with this kernel networking seens to work reasonably well: I
have been running OSF/1 telnet from my axp-box to my i486 over ethernet.

I'm using the depca drivers (thanks David Davies), but the de4x5 drivers
will also compile cleanly on axp (SLIP and PPP should work, untested).
However, I suspect that the de4x5 drivers will do an "insl()" to
unaligned memory, and I think the current insl will barf on that.
"insl()" should be made a bit more intelligent, but I didn't bother.

Oh, and if you use OSF/1 telnet, you'll notice that out-of-band data
doesn't work with OSF/1 binaries (^C in a telnet session will freeze the
session, and you'll have to exit telnet with ^]). I haven't looked into
it, but I suspect it's due to different definitions for SO_OOBINLINE, so
socket options aren't set the way the OSF/1 binaries expect. I'll
probably make this binary compatible with OSF/1 as well but I wanted to
release 1.3.7 before starting on looking into this.

(another difference you may want to look out for: OSF/1 "listen(fd, 0)"
will make a queue of 1, like old BSD code will, while linux "listen(fd,
0)" will mean that no connections are accepted. At least some versions
of ttcp will depend on the old BSD behaviour: recompile newer sources).

ttcp gives reasonable numbers for both tcp and udp transfers, but they
certainly aren't stellar. Probably because the linux networking isn't
_that_ fast, not so much any axp-specific stuff. Anyway, it's not due
to alignment issues: the way things are set up now, almost all normal
networking headers will be automatically aligned, and unaligned traps
are pretty rare.

I've also written a better "memcpy()" routine that does reasonably well
even for unaligned transfers (with networking, it starts to make a
difference). I also ended up re-writing the IP checksumming code, as I
didn't want the BSD copyright on David M-T's fast code (his code _is_
faster, at least for some cases, so eventually..).

I haven't done any _extensive_ tests of the networking, and quite
frankly some of the 1.3.x networking stuff is pretty experimental (even
on the i386), but early indications are that things seem to work ok.

Oh, to get networking up and running, you'll need axp versions of the
linux "route" and "ifconfig". Those are reasonably simple: make sure
you have the new kernel header files and check your linker flags (-N
doesn't seem to be that good an idea) and they should compile more or
less out of the box. I guess I should make my binaries available, duh.

Linus