|
|
1.1 ! root 1: .\" @(#)network.ms 5.3 (Berkeley) 5/25/86 ! 2: .\" ! 3: .EH 'SMM:21-%''A Dial-Up Network of \s-2UNIX\s+2 Systems' ! 4: .OH 'Dial-Up Network of \s-2UNIX\s+2 Systems''SMM:21-%' ! 5: .if n .ls 2 ! 6: .ds RH Nowitz ! 7: .ND "August 18, 1978" ! 8: .TL ! 9: A Dial-Up Network of ! 10: UNIX\s6\uTM\d\s0 ! 11: Systems ! 12: .AU ! 13: D. A. Nowitz ! 14: .AU ! 15: M. E. Lesk ! 16: .AI ! 17: .MH ! 18: .AB ! 19: .if n .ls 2 ! 20: A network of over eighty ! 21: .UX ! 22: computer systems has been established using the ! 23: telephone system as its primary communication medium. ! 24: The network was designed to meet the growing demands for ! 25: software distribution and exchange. ! 26: Some advantages of our design are: ! 27: .IP - ! 28: The startup cost is low. ! 29: A system needs only a dial-up port, ! 30: but systems with automatic calling units have much more ! 31: flexibility. ! 32: .IP - ! 33: No operating system changes are required to install or use the system. ! 34: .IP - ! 35: The communication is basically over dial-up lines, ! 36: however, hardwired communication lines can be used ! 37: to increase speed. ! 38: .IP - ! 39: The command for sending/receiving files is simple to use. ! 40: .sp ! 41: Keywords: networks, communications, software distribution, software maintenance ! 42: .AE ! 43: .NH ! 44: Purpose ! 45: .PP ! 46: The widespread use of the ! 47: .UX ! 48: system ! 49: .[ ! 50: ritchie thompson bstj 1978 ! 51: .] ! 52: within Bell Laboratories ! 53: has produced problems of software distribution and maintenance. ! 54: A conventional mechanism was set up to distribute the operating ! 55: system and associated programs from a central site to the ! 56: various users. ! 57: However this mechanism alone does not meet all software ! 58: distribution needs. ! 59: Remote sites generate much software and must transmit it to ! 60: other sites. ! 61: Some ! 62: .UX ! 63: systems ! 64: are themselves central sites for redistribution ! 65: of a particular specialized utility, ! 66: such as the Switching Control Center System. ! 67: Other sites have particular, often long-distance needs for ! 68: software exchange; switching research, ! 69: for example, is carried on in ! 70: New Jersey, Illinois, Ohio, and Colorado. ! 71: In addition, general purpose utility programs are written at ! 72: all ! 73: .UX ! 74: system sites. ! 75: The ! 76: .UX ! 77: system is modified ! 78: and enhanced by many people in many places and ! 79: it would be very constricting to deliver new software in a one-way ! 80: stream without any alternative ! 81: for the user sites to respond with changes of their own. ! 82: .PP ! 83: Straightforward software distribution is only part of the problem. ! 84: A large project may exceed the capacity of a single computer and ! 85: several machines may be used by the one group of people. ! 86: It then becomes necessary ! 87: for them to pass messages, data and other information back an forth ! 88: between computers. ! 89: .PP ! 90: Several groups with similar problems, both inside and outside of ! 91: Bell Laboratories, have constructed networks built of ! 92: hardwired connections only. ! 93: .[ ! 94: dolotta mashey 1978 bstj ! 95: .] ! 96: .[ ! 97: network unix system chesson ! 98: .] ! 99: Our network, however, uses both dial-up and hardwired ! 100: connections so that service can be provided to as many sites as possible. ! 101: .NH ! 102: Design Goals ! 103: .PP ! 104: Although some of our machines are connected directly, others ! 105: can only communicate over low-speed dial-up lines. ! 106: Since the dial-up lines are often unavailable ! 107: and file transfers may take considerable time, ! 108: we spool all work and transmit in the background. ! 109: We also had to adapt to a community of systems which are independently ! 110: operated and resistant to suggestions that they should all ! 111: buy particular hardware or install particular operating system ! 112: modifications. ! 113: Therefore, we make minimal demands on the local sites ! 114: in the network. ! 115: Our implementation requires no operating system changes; ! 116: in fact, the transfer programs look like any other user ! 117: entering the system through the normal dial-up login ports, ! 118: and obeying all local protection rules. ! 119: .PP ! 120: We distinguish ``active'' and ``passive'' systems ! 121: on the network. ! 122: Active systems have an automatic calling unit ! 123: or a hardwired line to another system, ! 124: and can initiate a connection. ! 125: Passive systems do not have the hardware ! 126: to initiate a connection. ! 127: However, an ! 128: active system can be assigned the job of calling passive ! 129: systems and executing work found there; ! 130: this makes a passive system the functional equivalent of ! 131: an active system, except for an additional delay while it waits to be polled. ! 132: Also, people frequently log into active systems and ! 133: request copying from one passive system to another. ! 134: This requires two telephone calls, but even so, it is faster ! 135: than mailing tapes. ! 136: .PP ! 137: Where convenient, we use hardwired communication lines. ! 138: These permit much faster transmission and multiplexing ! 139: of ! 140: the communications link. ! 141: Dial-up connections are made at either 300 or 1200 baud; ! 142: hardwired connections are asynchronous up to 9600 baud ! 143: and might run even faster on special-purpose communications ! 144: hardware. ! 145: .[ ! 146: fraser spider 1974 ieee ! 147: .] ! 148: .[ ! 149: fraser channel network datamation 1975 ! 150: .] ! 151: Thus, systems typically join our network first as ! 152: passive systems and when ! 153: they find the service more important, they acquire ! 154: automatic calling units and become active ! 155: systems; eventually, they may install high-speed ! 156: links to particular machines with which they ! 157: handle a great deal of traffic. ! 158: At no point, however, must users change their ! 159: programs or procedures. ! 160: .PP ! 161: The basic operation of the network is very simple. ! 162: Each participating system has a spool directory, ! 163: in which work to be done (files to be moved, or commands to be executed ! 164: remotely) is stored. ! 165: A standard program, ! 166: .I uucico , ! 167: performs all transfers. ! 168: This program starts by identifying a particular communication channel ! 169: to a remote system with which it will hold a conversation. ! 170: .I Uucico ! 171: then selects a device and establishes the connection, ! 172: logs onto the remote machine ! 173: and starts the ! 174: .I uucico ! 175: program on the remote machine. ! 176: Once two of these programs are connected, they first agree on a line protocol, ! 177: and then start exchanging work. ! 178: Each program in turn, beginning with the calling (active system) program, ! 179: transmits everything it needs, and then asks the other what it wants done. ! 180: Eventually neither has any more work, and both exit. ! 181: .PP ! 182: In this way, all services are available from all sites; passive sites, ! 183: however, must wait until called. ! 184: A variety of protocols may be used; this conforms to the real, ! 185: non-standard world. ! 186: As long as the caller and called programs have a protocol in common, ! 187: they can communicate. ! 188: Furthermore, each caller knows the hours when each destination system ! 189: should be called. ! 190: If a destination is unavailable, the data intended for it ! 191: remain in the spool directory until the destination machine can be reached. ! 192: .PP ! 193: The implementation of this ! 194: Bell Laboratories network ! 195: between independent sites, all of which ! 196: store proprietary programs and data, ! 197: illustratives the pervasive need for security ! 198: and administrative controls over file access. ! 199: Each site, in configuring its programs and system files, ! 200: limits and monitors transmission. ! 201: In order to access a file a user needs access permission ! 202: for the machine that contains the file and access permission ! 203: for the file itself. ! 204: This is achieved by first requiring the user to use his password ! 205: to log into his local machine and then his local ! 206: machine logs into the remote machine whose files are to be accessed. ! 207: In addition, records are kept identifying all files ! 208: that are moved into and out of the local system, ! 209: and how the requestor of such accesses identified ! 210: himself. ! 211: Some sites may arrange ! 212: to permit users only ! 213: to call up ! 214: and request work to be done; ! 215: the calling users are then called back ! 216: before the work is actually done. ! 217: It is then possible to verify ! 218: that the request is legitimate from the standpoint of the ! 219: target system, as well as the originating system. ! 220: Furthermore, because of the call-back, ! 221: no site can masquerade as another ! 222: even if it knows all the necessary passwords. ! 223: .PP ! 224: Each machine can optionally maintain a sequence count for ! 225: conversations with other machines and require a verification of the ! 226: count at the start of each conversation. ! 227: Thus, even if call back is not in use, a successful masquerade requires ! 228: the calling party to present the correct sequence number. ! 229: A would-be impersonator must not just steal the correct phone number, ! 230: user name, and password, but also the sequence count, and must call in ! 231: sufficiently promptly to precede the next legitimate request from either side. ! 232: Even a successful masquerade will be detected on the next correct ! 233: conversation. ! 234: .NH ! 235: Processing ! 236: .PP ! 237: The user has two commands which set up communications, ! 238: .I uucp ! 239: to set up file copying, ! 240: and ! 241: .I uux ! 242: to set up command execution where some of the required ! 243: resources (system and/or files) ! 244: are not on the local machine. ! 245: Each of these commands will put work and data files ! 246: into the spool directory for execution by ! 247: .I uucp ! 248: daemons. ! 249: Figure 1 shows the major blocks of the file transfer process. ! 250: .SH ! 251: File Copy ! 252: .PP ! 253: The ! 254: .I uucico ! 255: program is used to perform all communications between ! 256: the two systems. ! 257: It performs the following functions: ! 258: .RS ! 259: .IP - 3 ! 260: Scan the spool directory for work. ! 261: .IP - ! 262: Place a call to a remote system. ! 263: .IP -\ \ ! 264: Negotiate a line protocol to be used. ! 265: .IP -\ \ ! 266: Start program ! 267: .I uucico ! 268: on the remote system. ! 269: .IP -\ \ ! 270: Execute all requests from both systems. ! 271: .IP -\ \ ! 272: Log work requests and work completions. ! 273: .RE ! 274: .LP ! 275: .I Uucico ! 276: may be started in several ways; ! 277: .RS ! 278: .IP a) 5 ! 279: by a system daemon, ! 280: .IP b) ! 281: by one of the ! 282: .I uucp ! 283: or ! 284: .I uux ! 285: programs, ! 286: .IP c) ! 287: by a remote system. ! 288: .RE ! 289: .SH ! 290: Scan For Work ! 291: .PP ! 292: The file names in the spool directory are constructed to allow the ! 293: daemon programs ! 294: .I "(uucico, uuxqt)" ! 295: to determine the files they should look at, ! 296: the remote machines they should call ! 297: and the order in which the files for a particular ! 298: remote machine should be processed. ! 299: .SH ! 300: Call Remote System ! 301: .PP ! 302: The call is made using information from several ! 303: files which reside in the uucp program directory. ! 304: At the start of the call process, a lock is ! 305: set on the system being called so that another ! 306: call will not be attempted at the same time. ! 307: .PP ! 308: The system name is found in a ! 309: ``systems'' ! 310: file. ! 311: The information contained for each system is: ! 312: .IP ! 313: .RS ! 314: .IP [1] ! 315: system name, ! 316: .IP [2] ! 317: times to call the system ! 318: (days-of-week and times-of-day), ! 319: .IP [3] ! 320: device or device type to be used for call, ! 321: .IP [4] ! 322: line speed, ! 323: .IP [5] ! 324: phone number, ! 325: .IP [6] ! 326: login information (multiple fields). ! 327: .RE ! 328: .PP ! 329: The time field is checked against the present time to see ! 330: if the call should be made. ! 331: The ! 332: .I ! 333: phone number ! 334: .R ! 335: may contain abbreviations (e.g. ``nyc'', ``boston'') which get translated into dial ! 336: sequences using a ! 337: ``dial-codes'' file. ! 338: This permits the same ``phone number'' to be stored at every site, despite ! 339: local variations in telephone services and dialing conventions. ! 340: .PP ! 341: A ``devices'' ! 342: file is scanned using fields [3] and [4] from the ! 343: ``systems'' ! 344: file to find an available device for the connection. ! 345: The program will try all devices which satisfy ! 346: [3] and [4] until a connection is made, or no more ! 347: devices can be tried. ! 348: If a non-multiplexable device is successfully opened, a lock file ! 349: is created so that another copy of ! 350: .I uucico ! 351: will not try to use it. ! 352: If the connection is complete, the ! 353: .I ! 354: login information ! 355: .R ! 356: is used to log into the remote system. ! 357: Then ! 358: a command is sent to the remote system ! 359: to start the ! 360: .I uucico ! 361: program. ! 362: The conversation between the two ! 363: .I uucico ! 364: programs begins with a handshake started by the called, ! 365: .I SLAVE , ! 366: system. ! 367: The ! 368: .I SLAVE ! 369: sends a message to let the ! 370: .I MASTER ! 371: know it is ready to receive the system ! 372: identification and conversation sequence number. ! 373: The response from the ! 374: .I MASTER ! 375: is ! 376: verified by the ! 377: .I SLAVE ! 378: and if acceptable, protocol selection begins. ! 379: .SH ! 380: Line Protocol Selection ! 381: .PP ! 382: The remote system sends a message ! 383: .IP "" 12 ! 384: P\fIproto-list\fR ! 385: .LP ! 386: where ! 387: .I proto-list ! 388: is a string of characters, each ! 389: representing a line protocol. ! 390: The calling program checks the proto-list ! 391: for a letter corresponding to an available line ! 392: protocol and returns a ! 393: .I use-protocol ! 394: message. ! 395: The ! 396: .I use-protocol ! 397: message is ! 398: .IP "" 12 ! 399: U\fIcode\fR ! 400: .LP ! 401: where code is either a one character ! 402: protocol letter or a ! 403: .I N ! 404: which means there is no common protocol. ! 405: .PP ! 406: Greg Chesson designed and implemented the standard ! 407: line protocol used by the uucp transmission program. ! 408: Other protocols may be added by individual installations. ! 409: .SH ! 410: Work Processing ! 411: .PP ! 412: During processing, one program is the ! 413: .I MASTER ! 414: and the other is ! 415: .I SLAVE . ! 416: Initially, the calling program is the ! 417: .I MASTER. ! 418: These roles may switch one or more times during ! 419: the conversation. ! 420: .PP ! 421: There are four messages used during the ! 422: work processing, each specified by the first ! 423: character of the message. ! 424: They are ! 425: .KS ! 426: .TS ! 427: center; ! 428: c l. ! 429: S send a file, ! 430: R receive a file, ! 431: C copy complete, ! 432: H hangup. ! 433: .TE ! 434: .KE ! 435: .LP ! 436: The ! 437: .I MASTER ! 438: will send ! 439: .I R ! 440: or ! 441: .I S ! 442: messages until all work from the spool directory is ! 443: complete, at which point an ! 444: .I H ! 445: message will be sent. ! 446: The ! 447: .I SLAVE ! 448: will reply with ! 449: \fISY\fR, \fISN\fR, \fIRY\fR, \fIRN\fR, \fIHY\fR, \fIHN\fR, ! 450: corresponding to ! 451: .I yes ! 452: or ! 453: .I no ! 454: for each request. ! 455: .PP ! 456: The send and receive replies are ! 457: based on permission to access the ! 458: requested file/directory. ! 459: After each file is copied into the spool directory ! 460: of the receiving system, ! 461: a copy-complete message is sent by the receiver of the file. ! 462: The message ! 463: .I CY ! 464: will be sent if the ! 465: .UX ! 466: .I cp ! 467: command, used to copy from the spool directory, is successful. ! 468: Otherwise, a ! 469: .I CN ! 470: message is sent. ! 471: The requests and results are logged on both systems, ! 472: and, if requested, mail is sent to the user reporting completion ! 473: (or the user can request status information from the log program at any time). ! 474: .PP ! 475: The hangup response is determined by the ! 476: .I SLAVE ! 477: program by a work scan of the spool directory. ! 478: If work for the remote system exists in the ! 479: .I SLAVE's ! 480: spool directory, a ! 481: .I HN ! 482: message is sent and the programs switch roles. ! 483: If no work exists, an ! 484: .I HY ! 485: response is sent. ! 486: .PP ! 487: A sample conversation is shown in Figure 2. ! 488: .SH ! 489: Conversation Termination ! 490: .PP ! 491: When a ! 492: .I HY ! 493: message is received by the ! 494: .I MASTER ! 495: it is echoed back to the ! 496: .I SLAVE ! 497: and the protocols are turned off. ! 498: Each program sends a final "OO" message to the ! 499: other. ! 500: .NH ! 501: Present Uses ! 502: .PP ! 503: One application of this software is remote mail. ! 504: Normally, a ! 505: .UX ! 506: system user ! 507: writes ``mail dan'' to send mail to ! 508: user ``dan''. ! 509: By writing ``mail usg!dan'' ! 510: the mail is sent to user ! 511: ``dan'' ! 512: on system ``usg''. ! 513: .PP ! 514: The primary uses of our network to date have been in software maintenance. ! 515: Relatively few of the bytes passed between systems are intended for ! 516: people to read. ! 517: Instead, new programs (or new versions of programs) ! 518: are sent to users, and potential bugs are returned to authors. ! 519: Aaron Cohen has implemented a ! 520: ``stockroom'' which allows remote users to call in and request software. ! 521: He keeps a ``stock list'' of available programs, and new bug ! 522: fixes and utilities are added regularly. ! 523: In this way, users can always obtain the latest version of anything ! 524: without bothering the authors of the programs. ! 525: Although the stock list is maintained on a particular system, ! 526: the items in the stockroom may be warehoused in many places; ! 527: typically each program is distributed from the home site of ! 528: its author. ! 529: Where necessary, uucp does remote-to-remote copies. ! 530: .PP ! 531: We also routinely retrieve test cases from other systems ! 532: to determine whether errors on remote systems are caused ! 533: by local misconfigurations or old versions of software, ! 534: or whether they are bugs that must be fixed at the home site. ! 535: This helps identify errors rapidly. ! 536: For one set of test programs maintained by us, ! 537: over 70% of the bugs reported from remote sites ! 538: were due to old software, and were fixed ! 539: merely by distributing the current version. ! 540: .PP ! 541: Another application of the network for software maintenance ! 542: is to compare files on two different machines. ! 543: A very useful utility on one machine has been ! 544: Doug McIlroy's ``diff'' program ! 545: which compares two text files and indicates the differences, ! 546: line by line, between them. ! 547: .[ ! 548: hunt mcilroy file ! 549: .] ! 550: Only lines which are ! 551: not identical are printed. ! 552: Similarly, ! 553: the program ``uudiff'' ! 554: compares files (or directories) on two machines. ! 555: One of these directories may be on a passive system. ! 556: The ! 557: ``uudiff'' program ! 558: is set up to work similarly to the inter-system mail, but it is slightly ! 559: more complicated. ! 560: .PP ! 561: To avoid moving large numbers of usually identical ! 562: files, ! 563: .I uudiff ! 564: computes file checksums ! 565: on each side, and only moves files that are different ! 566: for detailed comparison. ! 567: For large files, this process can be iterated; checksums can be computed ! 568: for each line, and only those lines that are different ! 569: actually moved. ! 570: .PP ! 571: The ``uux'' command has ! 572: been useful for providing remote output. ! 573: There are some machines which do not have hard-copy ! 574: devices, but which are connected over 9600 baud ! 575: communication lines to machines with printers. ! 576: The ! 577: .I uux ! 578: command allows the formatting of the ! 579: printout on the local machine and printing on the ! 580: remote machine using standard ! 581: .UX ! 582: command programs. ! 583: .br ! 584: .NH ! 585: Performance ! 586: .PP ! 587: Throughput, of course, is primarily dependent on transmission speed. ! 588: The table below shows the real throughput of characters ! 589: on communication links of different speeds. ! 590: These numbers represent actual data transferred; ! 591: they do not include bytes used by the line protocol for ! 592: data validation such as checksums and messages. ! 593: At the higher speeds, contention for the processors on both ! 594: ends prevents the network from driving the line full speed. ! 595: The range of speeds represents the difference between light and ! 596: heavy loads on the two systems. ! 597: If desired, operating system modifications can ! 598: be installed ! 599: that permit full use of even very fast links. ! 600: .KS ! 601: .TS ! 602: center; ! 603: c c ! 604: n n. ! 605: Nominal speed Characters/sec. ! 606: 300 baud 27 ! 607: 1200 baud 100-110 ! 608: 9600 baud 200-850 ! 609: .TE ! 610: .KE ! 611: In addition to the transfer time, there is some overhead ! 612: for making the connection and logging in ranging from ! 613: 15 seconds to 1 minute. ! 614: Even at 300 baud, however, a typical 5,000 byte source program ! 615: can be transferred in ! 616: four minutes instead of the 2 days that might be required ! 617: to mail a tape. ! 618: .PP ! 619: Traffic between systems is variable. Between two ! 620: closely related systems, ! 621: we observed ! 622: 20 files moved and 5 remote commands executed in a typical day. ! 623: A more normal traffic out of a single system would be around ! 624: a dozen files per day. ! 625: .PP ! 626: The total number of sites at present ! 627: in the main network is ! 628: 82, which includes most of the Bell Laboratories ! 629: full-size machines ! 630: which run the ! 631: .UX ! 632: operating system. ! 633: Geographically, the machines range from Andover, Massachusetts to ! 634: Denver, Colorado. ! 635: .PP ! 636: Uucp has also ! 637: been used to set up another network ! 638: which connects a group of ! 639: systems in operational sites with the home site. ! 640: The two networks touch at one ! 641: Bell Labs computer. ! 642: .NH ! 643: Further Goals ! 644: .PP ! 645: Eventually, we would like to develop a full system of remote software ! 646: maintenance. ! 647: Conventional maintenance (a support group which mails tapes) ! 648: has many well-known disadvantages. ! 649: .[ ! 650: brooks mythical man month 1975 ! 651: .] ! 652: There are distribution errors and delays, resulting in old software ! 653: running at remote sites and old bugs continually reappearing. ! 654: These difficulties are aggravated when ! 655: there are 100 different small systems, instead of a few large ones. ! 656: .PP ! 657: The availability of file transfer on a network of compatible operating ! 658: systems ! 659: makes it possible just to send programs directly to the end user who wants them. ! 660: This avoids the bottleneck of negotiation and packaging in the central support ! 661: group. ! 662: The ``stockroom'' serves this function for new utilities ! 663: and fixes to old utilities. ! 664: However, it is still likely that distributions will not be sent ! 665: and installed as often as needed. ! 666: Users are justifiably suspicious of the ``latest version'' that has just ! 667: arrived; all too often it features the ``latest bug.'' ! 668: What is needed is to address both problems simultaneously: ! 669: .IP 1. ! 670: Send distributions whenever programs change. ! 671: .IP 2. ! 672: Have sufficient quality control so that users will install them. ! 673: .LP ! 674: To do this, we recommend systematic regression testing both on the ! 675: distributing and receiving systems. ! 676: Acceptance testing on the receiving systems can be automated and ! 677: permits the local system to ensure that its essential work can continue ! 678: despite the constant installation of changes sent from elsewhere. ! 679: The work of writing the test sequences should be recovered in lower ! 680: counseling and distribution costs. ! 681: .PP ! 682: Some slow-speed network services are also being implemented. ! 683: We now have inter-system ``mail'' and ``diff,'' ! 684: plus the many implied commands represented by ``uux.'' ! 685: However, we still need inter-system ``write'' (real-time inter-user ! 686: communication) and ``who'' (list of people logged in ! 687: on different systems). ! 688: A slow-speed network of this sort may be very useful ! 689: for speeding up counseling and education, even ! 690: if not fast enough for the distributed data base ! 691: applications that attract many users to networks. ! 692: Effective use of remote execution over slow-speed lines, however, ! 693: must await the general installation of multiplexable channels so ! 694: that long file transfers do not lock out short inquiries. ! 695: .NH ! 696: Lessons ! 697: .PP ! 698: The following is a summary of the lessons we learned in ! 699: building these programs. ! 700: .IP 1. ! 701: By starting your network in a way that requires no hardware or major operating system ! 702: changes, you can get going quickly. ! 703: .IP 2. ! 704: Support will follow use. ! 705: Since the network existed and was being used, system maintainers ! 706: were easily persuaded to help keep it operating, including purchasing ! 707: additional hardware to speed traffic. ! 708: .IP 3. ! 709: Make the network commands look like local commands. ! 710: Our users have a resistance to learning anything new: ! 711: all the inter-system commands look very similar to ! 712: standard ! 713: .UX ! 714: system ! 715: commands so that little training cost ! 716: is involved. ! 717: .IP 4. ! 718: An initial error was not coordinating enough ! 719: with existing communications projects: thus, the first ! 720: version of this network was restricted to dial-up, since ! 721: it did not support the various hardware links between systems. ! 722: This has been fixed in the current system. ! 723: .SH ! 724: Acknowledgements ! 725: .PP ! 726: We thank G. L. Chesson for his design and implementation ! 727: of the packet driver and protocol, and A. S. Cohen, J. Lions, ! 728: and P. F. Long for their suggestions and assistance. ! 729: .[ ! 730: $LIST$ ! 731: .]
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.