alex@wolf.umbc.edu (Alex Crain) (04/10/89)
CALL FOR DISCUSSION Topic: Serial line networking of unix-pc's. As my efforts to produce a working socket driver for the unix-pc are generating positive results (it works), The looming question of how to interconnect machines is becomming more pertenant. like many people, I bought a large machine and later a small machine as a future parts doner, and getting the two of them to talk would be right nice. I'm running a uucp network now, but I'd really like some kind of packet base protocol. With the TCP driver taking shape, the idea is becomming more attractive. For myself, I would like to run a bus network around my house, consisting of a single serial line. I will probably purchase a mac as a game machine/graphics engine/word processor for my wife in the next year or so, and I would like to pick up a nice printer, an maybe a trailblazer. Also, I never want to buy a peripheral from apple! (nobody has that much money) So I'm figureing my network to be: HARDWARE 1) a bi-directional bus network, or some kind of fault-tolerant ring that can tell when a host goes down. No star networks. I only want to have to deal with one port per machine, and I want to be able to splice in devices. 2) RS232 or simular hardware speeds and voltage levels. ($$$) 3) hardware support for packet acceptance/rejection, and queueing of data so that the machines don't die. SOFTWARE 1) support for virtual circuits and datagrams, with out-of-band facilities. 2) reasonable efficency with in packet overhead. 3) gateway/forwarding capability, for dealing with modems and printers. This means machine addresses and ports. 4) virtual files, as in some kind of restricted NFS. I think that some kind of minimal hardware support is going to be required for speed, but I'd like to make that an option, so that poor folks can use the existing RS232. I envision a card that watches the net and screens packets against their address. I would also like at least 16 bytes of buffer space with a timeout, to limit interrupts. I'd also like to use an existing protocol, custom protocols are a drag unless they catch on, even free ones. The two protocols that come to mind are SLIP and Appletalk. SLIP would be in keeping with tradition, but I'm worried about the overhead. I don't know anything about Appletalk, but the fact that its built around a serial line suggests that its optimized for speed. The fact that I'm looking at a mac also makes Appletalk more desireable :-). Also, Appletalk hardware is pretty close to what I'm looking for, although I don't know much about it. Appletalk also supports some kind of disk sharing that works over a serial line. I will probably add the code for SLIP anyway, since much of the code is free and available. I'm looking into a protocol developed at CMU thats built around Appletalk, and if the code is free, I'll look into adding that to, if only for my future mac. So what does everybody think? I want to write something thats going to be *used*, although I won't be charging for it. What are your needs? I don't know diddly about hardware, so I would like to here from the hardware guys regarding the interface. Optimally we would see the same deal as the hard disk upgrade, namely a "lenny and gil do it yourself" model and a "custom PAL on a special board for $$" version. :alex Alex Crain Systems Programmer alex@umbc3.umbc.edu Univ Md Baltimore County umbc3.umbc.edu!nerwin!alex
les@chinet.chi.il.us (Leslie Mikesell) (04/11/89)
In article <1892@umbc3.UMBC.EDU> alex@wolf.umbc.edu.UUCP (Alex Crain) writes: > > 1) a bi-directional bus network, or some kind of fault-tolerant ring > that can tell when a host goes down. No star networks. I only want to > have to deal with one port per machine, and I want to be able to splice > in devices. I don't know if you can still get the 1Mbit starlan boards for the 7300 or not, but they would work nicely. You can daisy-chain up to 10 units without using a hub. The main problem with them is that the available software is for URP (AT&T proprietary) protocol while the other AT&T machines are changing to OSI protocols so you can't mix 7300's and 6386's on the same net. Also, since you can't get SysVr3 you can't run RFS, but if you want to roll your own software it might work out. Les Mikesell
rkh@mtune.ATT.COM (Robert Halloran) (04/11/89)
In article <8187@chinet.chi.il.us> les@chinet.chi.il.us (Leslie Mikesell) writes: >In article <1892@umbc3.UMBC.EDU> alex@wolf.umbc.edu.UUCP (Alex Crain) writes: >> [deleted] > >I don't know if you can still get the 1Mbit starlan boards for the 7300 >or not, but they would work nicely. You can daisy-chain up to 10 >units without using a hub. The main problem with them is that the >available software is for URP (AT&T proprietary) protocol while the >other AT&T machines are changing to OSI protocols so you can't mix >7300's and 6386's on the same net. Also, since you can't get SysVr3 >you can't run RFS, but if you want to roll your own software it might >work out. You should still be able to get starlan boards for the 7300. Correction to your comments above: it is true that the other AT&T systems are moving to ISO protocols, but they CAN share a wire with URP-based systems; they just don't understand one another. Bob Halloran ========================================================================= UUCP: att!mtune!rkh Internet: rkh@mtune.ATT.COM USPS: 17 Lakeland Dr, Port Monmouth NJ 07758 DDD: 201-495-6621 eve ET Disclaimer: If you think AT&T would have ME as a spokesman, you're crazed. Quote: "Well, if it wasn't Buckaroo Banzai, I'd say 'commit the man.'" - where else?
jcm@mtunb.ATT.COM (was-John McMillan) (04/11/89)
In article <7976@mtune.ATT.COM> rkh@mtune.UUCP (Robert Halloran) writes: >In article <8187@chinet.chi.il.us> les@chinet.chi.il.us (Leslie Mikesell) writes: ... >> The main problem with them is that the >>available software is for URP (AT&T proprietary) protocol while the >>other AT&T machines are changing to OSI protocols so you can't mix >>7300's and 6386's on the same net. ... >Correction to your comments above: it is true that the other AT&T systems >are moving to ISO protocols, but they CAN share a wire with URP-based >systems; they just don't understand one another. > > Bob Halloran 1) Bob is right, as usual ;-) 2) Bob hasn't mentioned that AT&T, INTERNALLY, runs many [most?] of its 3B2 and 6386 systems with software that supports BOTH URP & ISO. (He KNOWS this... but is smart enough to NOT mention it: I'm NOT ;-) The point is: there is inside & outside pressure for AT&T to release the dual protocol software as a product -- at least I think that's still alive -- and there is as yet little isolation of 3B1's WITHIN AT&T. There is just the tedium of knowing which of your clients are URP or ISO talkers. 3) True isolation occurs as StarLAN'ers switch from the 1MB hardware to the 10MB hardware: there is no (known-to-me) means of running the 1MB hardware on a 10 MB net. John (oops, I shouldn't a said that) McMillan -- att!mtunb!jcm
sheldon@quest.UUCP (Scott S. Bertilson) (04/12/89)
I've begun playing with the KA9Q TCP/IP/SLIP package. I'm testing it by plugging it into a SUN running SLIP. It seems that the UNIXpc really can't handle this very well. It connects nicely using a number of applications, but any large transfers seem to kill it (like incoming FTP). I'm wondering if anyone is doing this sort of thing at reasonable transfer rates (>= 4800 baud) with a significant degree of success. If so, what parameters do you use when you set up the serial line in the attach? -- Scott S. Bertilson ...uunet!rosevax!rose3!quest!sheldon scott@poincare.geom.umn.edu
sheldon@quest.UUCP (Scott S. Bertilson) (04/13/89)
I made one change which has yielded a significant improvement to the (crusty?) copy (version.c says 871225.3) I've been playing with. Here's a patch: *** orig/slip.c Mon Jan 11 23:54:26 1988 --- slip.c Wed Apr 12 22:20:13 1989 *************** *** 234,240 doslip(interface) struct interface *interface; { ! char c; struct mbuf *bp; int16 dev; int16 asy_recv(); --- 234,242 ----- doslip(interface) struct interface *interface; { ! char buf[256]; ! register char *cp; ! register int cnt; struct mbuf *bp; int16 dev; int16 asy_recv(); *************** *** 241,249 dev = interface->dev; /* Process any pending input */ ! while(asy_recv(dev,&c,1) != 0) ! if((bp = slip_decode(dev,c)) != NULLBUF) ! (*slip[dev].recv)(interface,bp); /* Kick the transmitter if it's idle */ if(stxrdy(dev)) --- 243,253 ----- dev = interface->dev; /* Process any pending input */ ! while((cnt = asy_recv(dev,cp = &buf[0],sizeof(buf))) != 0) { ! while (cnt-- > 0) ! if((bp = slip_decode(dev,*cp++)) != NULLBUF) ! (*slip[dev].recv)(interface,bp); ! } /* Kick the transmitter if it's idle */ if(stxrdy(dev)) -- Scott S. Bertilson ...uunet!rosevax!rose3!quest!sheldon scott@poincare.geom.umn.edu
les@chinet.chi.il.us (Leslie Mikesell) (04/13/89)
In article <1466@mtunb.ATT.COM> jcm@mtunb.ATT.COM (was-John McMillan) writes: >>Correction to your comments above: it is true that the other AT&T systems >>are moving to ISO protocols, but they CAN share a wire with URP-based >>systems; they just don't understand one another. >1) Bob is right, as usual ;-) I did know that, and in fact have both types on the same wire now, but what's the point - when we upgrade the 3B2's to the new software the 3B1's won't be able to talk to anything but themselves. >2) Bob hasn't mentioned that AT&T, INTERNALLY, runs many > [most?] of its 3B2 and 6386 systems with software that > supports BOTH URP & ISO. (He KNOWS this... but is > smart enough to NOT mention it: I'm NOT ;-) > The point is: there is inside & outside pressure for AT&T > to release the dual protocol software as a product -- at > least I think that's still alive -- and there is as yet > little isolation of 3B1's WITHIN AT&T. There is just the > tedium of knowing which of your clients are URP or ISO > talkers. Great - I suppose they will wait until just after we dump the 3B1's to release it. And then they'll wonder why we don't buy a copy... There is a product listed as an ISO to URP translator but the description only mentions using it to talk to a slim-C card. Is it in fact a general-purpose translator suitable for (say) allowing DOS ISO clients to talk to the 3B1 (URP) DOS SERVER? Anyway, the correct solution is to provide a matching ISO version for the 3B1. Otherwise AT&T is giving the impression that they cannot be expected to provide continuing support for the products they sell, or perhaps that they are incapable of porting current unix and networking software to more than a few platforms. >3) True isolation occurs as StarLAN'ers switch from the 1MB > hardware to the 10MB hardware: there is no (known-to-me) > means of running the 1MB hardware on a 10 MB net. I assume you mean 1MB URP only. There is a 10-1 bridge for the ISO versions. Les Mikesell
mvadh@cbnews.ATT.COM (andrew.d.hay) (04/13/89)
In article <1466@mtunb.ATT.COM> jcm@mtunb.ATT.COM (was-John McMillan) writes:
"3) True isolation occurs as StarLAN'ers switch from the 1MB
" hardware to the 10MB hardware: there is no (known-to-me)
" means of running the 1MB hardware on a 10 MB net.
"
there is a very expensive (~$3-4K) 1-to-10 bridge...
there is also a starlan-10 cable tap for ethernet controllers.
( anyone know where we can pick up a dozen 3b1 ethernet cards? ;^>)
--
Andrew Hay +------------------------------------------------------+
Null Fu-Tze | LEARN HOW TO AVOID RIPOFFS! |
AT&T-BL Ward Hill MA | SEND $5... |
mvuxq.att.com!adh +------------------------------------------------------+
mark@umbc3.UMBC.EDU (Mark Sienkiewicz) (04/14/89)
Some observations on hardware for Alex's network stuff. I know a diddly about harware (I could probably get away with 2 or 3 diddlys if I had to). --- 1. The built in RS232 loses. If you yell at it at 9600 baud, the machine spends all of it's time doing interrupt handling and none running your program. I'm sure a lot of this is because of the line discipline, but doing special drivers probably won't help as much as you hope it will. Implementing a driver on this hardware is probably necessary for people who don't want to hack on their machine. It is also a fantastic way to get things up and running for REAL CHEAP. It just won't be very fast. To quote /usr/include/sys/termio.h: #define B38400 0000017 /* added to pass SVVS. we dont support 38K baud */ --- 2. If you still want to go with RS232, you should look in to a National Semiconductor chip called NS16550. It is upward compatible from the 16450 which is upward compatible from the 8250b which you've seen in IBM PC clones everywhere. The neat thing about this device is it is a complete UART with a built in 16 byte FIFO. You can select how full the FIFO gets before you get an interrupt. This means you can reduce the number of interrupts to 1/14th. You could either have a much less busy machine, or run 14 times as fast. This also has the advantage of being able to talk to machines that use the built in serial port I know other devices like this have got to exist, but I've never seen any. --- 3. You could use a real dumb UART in combination with a FIFO to go one better on the 16550. It would be a major hassle to implement all the functions of a UART, but we only need SEND DATA, RECV DATA, and NETWORK FAILURE. If you read some of the EE type magazines, you will see dozens of ads saying how wonderful Brand X fifo chips are. --- 4. My favorite idea would be to have a bi-directional parallel interface that talks the the machine on the next table. Then one of them would gateway things onto a serial bus network. I think with the right hardware, you could push it to around 100k bps without too many problems. I'd like to run the parallel interface all through the house, but I can't afford that much shielded cable. ----- Of course, in the ideal world, you would like to build this thing in layers. If you build the software-hardware interface right, you could have a driver for any of the above types of hardware. If you get real fancy, you could even do the gateway style stuff in the drivers. Since we have a less than ideal world, you can also suppose that an rs232 interface that uses less overhead could be built without using the expansion bus. It works like this: Find a decoded but unused address on the motherboard. 0xe20000 comes to mind. Divide it up into 8 of 64k chunks with 74138 or something. Find a nearby place with some data and address lines (the floppy controller and dma controller, I think). Run all this to a pair of 14 or 16 pin DIP sockets. Then you have a cheap 8 bit I/O bus. (If you do this, write the software so it is easy to change the memory addresses used -- my hardware might not quite match yours...) --- At work, they have a network called TOPS running on the Mac's. It looks like it uses RS232 or Appletalk. (I also see people selling it: e.g. Mt. Xinu for BSD 4.3) It also runs on Mac's and PC's. I suspect this makes it unlikely that you can do much with it for free. I do notice that it looks like a bus with a little box at each station except at the end. The box is about 4x2x1 inches. I bet it doesn't have much in it. Anybody know? ===== About protocols: There are a few things to give serious consideration to when you choose protocols: 1 - It should be source code compatible with the BSD TCP stuff. Specifically, AF_INET should exist and work as advertised. This gets you an portable interface. I don't have to learn AF_RANDOM styles of thinking or anything like that. 2 - There should be a protocol that is easy enough to implement that it could be ported to other machines. "other machines" includes things like Mac's, PC clones, and even CPM or dumber. This is almost guarenteed to be both stupid and proprietary. 3 - At least one protocol that goes off machine to other UnixPc's should be implemented soon enough that it doesn't look like vapor-ware. 4 - proprietary (or non-standard) protocols suck only if they don't catch on. Free source code catches on quite nicely. 5 - because nobody can ever agree on protocols, it should be possible to run more than 1 protocol on the same hardware. If anybody out there has any pet protocols, lets hear from you. Mark S. uunet!umbc3!nerwin!zilla!mark nerwin!zilla!mark@umbc3.umbc.edu <- one of these is nerwin!zilla!mark@umbc3.umd.edu <- supposed to be right. Miskatonic University Ex ignoratia ad sapientiam. Ex luce ad tenebras.
gil@limbic.UUCP (Gil Kloepfer Jr.) (04/15/89)
In article <1909@umbc3.UMBC.EDU> mark@umbc3.umbc.edu.UMBC.EDU (Mark Sienkiewicz) writes: >4. My favorite idea would be to have a bi-directional parallel interface >that talks the the machine on the next table. Then one of them would >gateway things onto a serial bus network. I think with the right >hardware, you could push it to around 100k bps without too many problems. I'm currently working on this idea. Mike Thompson is working on a SCSI port, which essentially is the same thing (but better). Some observations on the overall tone of the quoted article: First, it is unwise to make a bidirectional parallel interface that is entirely interrupt-driven. I already tried this and it *does* swamp the CPU with interrupts. You'll end up with spirious interrupts because there will be an interrupt coming-in as you're in the process of returning from the interrupt service routine. This isn't good. Second, using a buffered UART to perform I/O is not worth the effort if all you're doing is adding a 16 byte buffer. To gain more throughput and keep the CPU from being overwhelmed, a packet-based protocol should be used with the packets transferred to/from off-board RAM (say, 2K or so) using the 256K address space allocated to an expansion slot (see next paragraph). Off-board, some kind of intelligent controller should be used to transfer the data packet in this RAM off through the UART (or parallel interface chip, such as the 8251). This takes the load off the 3B1's CPU and provides greater (and more reliable) throughput. You could use DMA to the 3B1, but this could hold the bus for an unreasonable period of time. Third, it is not my recommendation to wire anything to the bus through chips on the motherboard -- stick to expansion slots. Like you, I didn't have the right connector so I wired straight to the slot connector. There are signals coming out of the expansion slot, as well as the proper addressing schemes, which should be adhered to so that all peripherals may peacefully coexist. If this doesn't sound good enough for you, let it be known that I/O timing and other CPU timing is different on the 3B1. Unless you have circuitry that can operate at the full processor speed even with the kludgy wiring off a chip, you will experience definite problems with prop. delay. My true feeling is to wait a few months for Mike and the crew to come up with a public-domain SCSI port. Since schematics and software will be all available, you can make with this what you want. If all you want is a serial network, then you'll probably get the best throughput with the on-board serial port and a special driver. I have a feeling though that this SCSI idea will be real good for something, even if the software isn't quite right. ----- | Gil Kloepfer, Jr. | ICUS Software Systems/Bowne Management Systems (depending on where I am) | {decuac,boulder,talcott,sbcs}!icus!limbic!gil or gil@icus.islp.ny.us
david@ms.uky.edu (David Herron -- One of the vertebrae) (05/04/89)
It's been awhile since this discussion was going on so my apologies .. First off, I'm *VERY* interested in having TCP/IP on both my machines. For the 3b1 I'll have to go with something "PD" ... which is fine ... And I wanna help out with developing it too! BUT I can't afford to tie up the parallel ports on either the 3b1 or the Amiga. I've got serial ports to spare .. but as people have pointed out they give lots of interrupts and generally kill the machine. The SCSI scheme would be nice. I have a vague memory, hgowever, that the SCSInet stuff required some extensions to SCSI. Anybody know better? -- <- David Herron; an MMDF guy <david@ms.uky.edu> <- ska: David le casse\*' {rutgers,uunet}!ukma!david, david@UKMA.BITNET <- By all accounts, Cyprus (or was it Crete?) was covered with trees at one time <- -- Until they discovered Bronze
alex@wolf.umbc.edu (Alex Crain) (05/04/89)
In article <11635@s.ms.uky.edu>, david@ms.uky.edu (David Herron -- One of the vertebrae) writes: > BUT I can't afford to tie up the parallel ports on either the 3b1 or > the Amiga. I've got serial ports to spare .. but as people have > pointed out they give lots of interrupts and generally kill the machine. I've been looking into the serial line driver, and I think that I can do something with the speed. Right now, the sequence for servicing the UART goes something like: Receive interrupt Vector processor off the interrupt stack Save all 16 registers figure out what caused the interrupt (which channel) Jump to that handeler procedure Save the registers that were going to use. read the uart and stick the byte in a clist wake up the clist handler restore some registers so some cleanup restore all 16 registers and fixup the stack pointer return from interrupt I figure that by dedicating the tty port to a packet based protocol, that sequence could be reduced to a state machine that either: 1) starts a new packet, initializes the recieve buffer, etc. 2) moves a byte from the UART to ther receive buffer. 3) terminates the packet, wakes up the buffer handler. with a fixed buffer size, we would spend most of our time doing #2, which would look basically like this: get interrupt vector to our routine save %d0, %d1 and the stack pointer if this is not from the serial port, branch to the default handler. read the uart into %d0 read our global buffer pointer to %d1 write %d0 to (%d1)+ write %d1 back out restore %d0, %d1 and %sp return from interrupt. This ought to be fast enough to run at 9600 baud without slowing the machine down much, offhand I'd guess that it can be made to work in about 50000 machine cycles per second, running full out, not bad for a 10Mhz machine (of course, that doesn't count transmit) I'm thinking that some careful buffer management could make a ring network practical, since the machine should be capable of packet pass-thru without sacraficing speed. ie: the buffer manager would check the addresses of packets and send them back out if neccessary. Alternately, the interrupt handeller could chaeck addresses on the X'th byte, and if necessary notify the transmit side to start feeding them back to the UART. Or, we could freeze the receiveing side while we feed the packet header into the UART, and then add a state which reads one side of the uart and writes to the other side until the end of the packet. Or..... In any case, I think that the serial port is useable, and its to cheap to ignore. BTW: I've got the system call interface and the AF_UNIX domain code about finished, and I'll be tossing it out for beta testing *real*soon*now*, so watch this space. :alex Alex Crain Systems Programmer alex@umbc3.umbc.edu Univ Md Baltimore County umbc3.umbc.edu!nerwin!alex