
DNET V1.01 Alpha, BSD4.3 end.

	DNET (c)Copyright 1987 Matthew Dillon, All Rights Reserved

	Matthew Dillon
	891 Regal Rd
	Berkeley, Ca. 94708

	...!ihnp4!ucbvax!dillon 	USENET
	dillon@ucbvax.Berkeley.edu	ARPANET

	forum:	...!ihnp4!ucbvax!cory!dnet
		dnet%cory@ucbvax.berkeley.edu

	Remember, this is an ALPHA release.

	CLEAN	-shell script to clean up object files
	MAKE	-shell script to make in client, dnet, server, and test
	bin	-holds binaries, add this directory to your path
	client	-holds client utilities sources
	dnet	-holds dnet driver source
	doc	-HOLDS FURTHER DOCUMENTATION.  ALSO SEE THE SOURCE AND
		 HEADER FILES!
	lib	-holds the support library for client and server source.
	server	-holds server utilities sources
	test	-used to test DNET entirely on the system (i.e. run both
		 ends of the driver in different directories).	holds
		 source to test program initiator.

PREDEFINED VARIABLES:
	The enviroment variables DNETDIR is normally set to a directory
	which you should create for the rendezvous UNIX level sockets.	If
	set you can run dnet, all servers, and all clients from any
	directory and they will setup their UNIX sockets in the right place.
	This variable should have a hanging slash on it ex: ~/.DNET/


BASIC THEORY, UNIX END:
	The DNET driver accepts connections from clients over UNIX domain
	sockets.  It multiplexes and packetizes the data, sends it to
	whatever is on descriptor 0 (usually your tty).  It receives data
	from the serial port, de-packetizes it, demuxes it, and sends it to
	the proper client.   Additionaly, it receives open requests from
	the remote end and tries to connect to the proper server.

	All the servers are UNIX domain sockets in DNETDIR (if the
	enviroment variable DNETDIR is not defined, then in whatever
	directory they were run from).	The name of the socket in the
	directory is .DNET.# where # is the port number in decimal.  DNET
	itself creates a socket called DNET.PORT  .

BASIC THEORY, AMIGA END:
	The communications protocol, obviously, is the same. In fact, it is
	completely symetrical (there is no such things as master/slave
	here).

	The DNET driver on the Amiga opens the serial port with the default
	preferences (or current modes if you have a terminal program active
	at the time you run DNET).

	Servers on the Amiga create public message ports named DNET.PORT.#,
	while the driver creates DNET.PORT  . (look at the Amiga support
	library dnetlib.c to see how the interface works).


GETTING IT RUNNING TO YOUR AMIGA: (MUCH DIFFERENT FROM V1.00)

	Before you can use DNET you must ensure that a valid PATH is
	setup on the Amiga side to DNET's binaries.  You must modify the
	.login on the UNIX side and add the DNETDIR enviroment variable
	as specified above, and must ensure that your UNIX path is setup
	to point to associated binaries on the UNIX side.


	DNET WILL PROPERLY SET THE PARITY/DATABITS/PROTOCOL.  YOUR
	PREFERENCES SHOULD CONTAIN THE CORRECT BAUD RATE AS THERE IS
	NO PROVISION TO CHANGE IT AT THE MOMENT.

	(1)     RUN DNET.  You will get a small terminal window set at
		7 bits even parity.  This is a dinky thing and is only
		meant to allow you to log in and startup the server on
		the remote end.

		    CLOSE WINDOW:	quit's DNET.
		    MENU BUTTON:	START's DNET

		    ^C (BREAK CLI#):    Abort DNET protocol and go back to
					DNET terminal window

	(2)     dialup and log into your 4.2/3 UNIX system

	(3)     start any servers on the UNIX system 's_shell &;s_copy &'
		NOTE: You do not need to start any servers to use FTERM.
		NOTE: Servers may still be active from your last session.

	(4)     start dnet on the UNIX system with 'dnet'

		The terminal window should automatically go away. DNET
		is now running.  An FTERM is automatically RUN (assuming
		your path is setup properly).

		You can also execute other various client programs, such
		as more FTERMs, TERMs, and PUTFILES from your Amiga
		(assuming you started the servers on the UNIX end).. you
		can start the servers on the UNIX end from your TERM/FTERM
		windows also.

		You can also startup servers on the Amiga end.	Specifically,
		by doing a 'RUN S_COPY', you can then do a PUTFILES from
		the UNIX end to send things to your Amiga.

    AUTO RESTART FEATURE:

	At any time, if one end of the connection goes away (you quit DNET,
	for instance), you can RESTART the connection by restarting the
	driver that died.  (I.E. you don't have to hangup, log back in,
	and start from scratch).

    KILL FEATURE:

	Not completely debugged, but theoretically if, say, the UNIX end
	goes away, you can BREAK the DNET on the Amiga side and it *should*
	EOF all active clients... causing them to abort.

    NOTE: The destination directory that PUTFILES files go to on the remote
    host is the one you were in when you started the server.  This applies
    to any server you start, whether on the amiga or the UNIX host.  I
    suggest you make a special directory and start the S_COPY server in
    that.

    NOTE: Closing all active clients does NOT kill DNET... you must BREAK
    it and hit the CLOSE gadget in it's window.


*** UNIX SERVERS ACCESSED FROM AMIGA CLIENTS ***

S_COPY: 	File transfer server.  When running on the UNIX end, you
		can then use the PUTFILES command on the Amiga end to send files
		or ENTIRE DIRECTORY STURCTURES from the Amiga to the UNIX
		host.

S_SHELL:	Rlogin server.	When running on the UNIX end, you can then
		use the TERM command on the Amiga end to start up a new
		login window.

		NOTE: These windows do not automatically adjust the tty rows
		and columns.

(internal):     FAST CSH server.  This is an internal server in DNET.  You
		use the FTERM command on the Amiga end to start up a new
		shell window.  Response is much better as data flow s
		going through one less process.

		NOTE: These windows will AUTOMATICALLY adjust the tty rows
		and columns when you resize the window.  The disadvantage
		is that they run on unnamed PTY's, and thus do not show up on
		'who'

*** AMIGA SERVERS ACCESSED BY UNIX CLIENTS:***

S_COPY: 	File Transfer server.  When running on the Amiga, you can
		use the PUTFILES command on the UNIX end to transfer
		files or entire directory structures from your UNIX account
		to your Amiga.

S_SHELL:	Access a CLI from the UNIX end.  use 'DSOC 8196' from
		the UNIX end to connect.

		This requires two things. (1) My PIPE: device must be
		mounted, and (2) a NEWCLI must be run on the PIPE: as
		follows:

		NEWCLI <NIL: >NIL: pipe:shell/t scriptfile


KILLING DNET ON THE UNIX END WITHOUT HANGING UP:

    The Utility program QUITDNET will talk to the local DNET which will
    send a message to the DNET running on your UNIX system causing it
    to quit.  You can tell it quit by looking at the Rx/Tx L.E.Ds on
    your modem ... when the UNIX system starts echoing character's
    normally.

    Then, close all client sessions, BREAK the DNET on your Amiga, and
    quit DNET by hitting the close gadget on the DNET window.

    DNET will never "give up"... it will continue retrying forever or until
    you ^C it.

    Restoration Sequence... logging off, hanging up.

	(1)     Ensure all connections are closed and DNET is idle
	(2)     BREAK (^C) DNET and all servers... they should all exit.
	(3)     hangup the phone   (2) can be swapped with (3)

	close DNET's window.  Any servers left on the UNIX system will
	still be running and available next time you log on.



QUICKIE DESCRIPTION OF LOW LEVEL PACKET THEORY:

	DNET uses a windowed-packet scheme, as in transmission windows... up
to 4 packets can be sent before one of them is acked.  Each packet is fully
checked with three check bytes (one on the header, and two for the data).  If
a packet fails it is ignored.  If the receiver detects a missing packet it
requests it be resent.	If the sender doesn't get an ack within a given
timeout it sends a CHECK packet, which asks the receiver if it got it or not
(rather than just resend the packet, which might take a while).

	The channel multiplexing is embedded in the packet data... that is,
you might have the data for several channels in a single packet, so
maximum throughput is maintained even when you have a lot of little things
going on.



TODO:
    -Too Much Buffer Copying

