+.TH TP 4P "9 December 1988"
+.ds ]W Wisconsin ARGO 1.0
+.UC 4
+.SH NAME
+TP \- ISO Transport Protocol
+.SH SYNOPSIS
+.nf
+\fB#include <sys/socket.h>\fR
+\fB#include <netargo/iso_errno.h>\fR
+\fB#include <netargo/tp_param.h>\fR
+\fB#include <netargo/tp_user.h>\fR
+.PP
+\fBs = socket( [ AF_INET, AF_ISO ] , SOCK_SEQPACKET, 0);\fR
+.SH DESCRIPTION
+.PP
+The ISO Transport Protocol implemented for AOS R2
+at the University of Wisconsin - Madison
+includes classes 0 and 4
+of the ISO transport protocols
+as specified in
+the September 1984 version of DIS 8073.
+Class 4 of the protocol provides reliable, sequenced,
+flow-controlled, two-way
+transmission of data packets with an alternate stop-and-wait data path called
+the "expedited data" service.
+Class 0 is essentially a null transport protocol, which is used
+when the underlying network service provides reliable, sequenced,
+flow-controlled, two-way data transmission.
+Class 0 does not provide the expedited data service.
+The protocols are implemented as a single transport layer entity
+that coexists with the Internet protocol suite.
+Class 0 may be used only in the ISO domain.
+Class 4 may be used in the Internet domain as well as in the ISO domain.
+.PP
+The user interface to this protocol is the Berkeley interprocess communication
+interface (see \fIsocket(2)\fR.)
+Two new system calls for sending and receiving
+were added to this interface to
+to permit the support the end-of-transport-service-data-unit (EOTSDU)
+indication.
+See \fIsendv(2)\fR and \fIrecvv(2)\fR.
+If the EOTSDU is not needed, the Berkeley 4.3BSD interface
+can be used.
+See \fIsend(2)\fR and \fIrecv(2)\fR.
+.PP
+Through the
+\fIgetsockopt\fR and \fIsetsockopt\fR
+system calls,
+TP supports several options
+to control such things as negotiable options
+in the protocol and protocol strategies.
+.\"These system calls are used
+.\"to submit data for inclusion on connect and disconnect TPDUs.
+The options are defined in \fB<netargo/tp_user.h>\fR,
+and are described below.
+.\".PP
+.\"The options marked with a percent sign ( \fB%\fR )
+.\"are limited to use by the super-user.
+.PP
+In the tables below,
+the options marked with a pound sign ( \fB#\fR )
+may be used
+with \fIsetsockopt()\fR
+after a connection is established.
+Others must be used before the connection
+is established, in other words,
+before calling
+\fIconnect()\fR or
+\fIaccept()\fR.
+All options may be used
+with \fIgetsockopt()\fR
+before or
+after a connection is established.
+.\"
+.\" .PP
+.\" The options marked with an exclamation point ( \fB!\fR )
+.\" may be used after a connection is released,
+.\" but before
+.\" the TP reference timer (which generally
+.\" has a value in minutes) expires, and before
+.\" a \fIclose()\fR system call.
+.\" In other words, these commands may be used when the peer closes
+.\" a connection (possibly causing a disconnect indication), as long as the command
+.\" is issued "soon" after the disconnection occurred.
+.\" Disconnect data may be sent by the side initiating the close
+.\" but not by the passive side ("passive" with respect to the closing
+.\" of the connection), so there is no need to read disconnect data
+.\" after calling \fIclose()\fR.
+.\" .PP
+.\" The implementation of data on connect and disconnect is incomplete
+.\" and is not supported.
+.sp 1
+.TP 25
+\fBName\fR
+\fBValue [default]\fR
+.IP
+\fBDescription\fR
+.\".TP 25
+.\"TPOPT_CONN_DATA
+.\"(char *) [none]
+.\".IP
+.\"Data to send on \fIconnect()\fR.
+.\".TP 25
+.\"TPOPT_DISC_DATA\fB # !\fR
+.\"(char *) [none]
+.\".IP
+.\"Data to send on \fIclose()\fR.
+.\".TP 25
+.\"TPOPT_CDDATA_CLEAR\fB #\fR
+.\"No associated value.
+.\".IP
+.\"Erase outgoing connect or disconnect data.
+.TP 25
+TPOPT_MY_TSEL\fB \fR
+1-64 bytes.
+.IP
+An "extended" transport selector (tsel) for this socket.
+This option is used to set or get the local tsel.
+When this option is used to set a tsel,
+the default the 2-byte tsel
+that may have been allocated by \fIbind()\fR
+is retained, but this "extended" tsel is the
+tsel that is transmitted in a connection request
+When this option is used to get a tsel,
+it will return whatever transport tsel exists;
+if no "extended" tsel was given to this socket,
+the 2-byte tsel is returned.
+.TP 25
+TPOPT_PEER_TSEL\fB \fR
+1-64 bytes.
+.IP
+An "extended" transport selector (tsel) for the
+peer transport entity.
+This option is used to get the peer's tsel after
+a connection is established.
+When used before a connection
+is established, this option can set the tsel that
+will be transmitted as the "called" tsel
+in a connection request.
+.TP 25
+TPOPT_PERF_MEAS\fB #\fR
+Boolean.
+.IP
+When \fBtrue\fR, performance measurements will be kept
+for this connection.
+When set before a connection is established, the
+active side will use a locally defined parameter on the
+connect request packet; if the peer is another ARGO
+implementation, this will cause performance measurement to be
+turned on
+on the passive side as well.
+See \fItpperf(8)\fR.
+.TP 25
+TPOPT_PSTATISTICS\fB\fR
+No associated value on input.
+On output, struct tp_pmeas.
+.IP
+This command is used to read the performance statistics accumulated
+during a connection's lifetime.
+It can only be used with \fIgetsockopt()\fR.
+The structure it returns is described in \fB<netargo/tp_stat.h>\fR.
+See \fItpperf(8)\fR.
+.TP 25
+TPOPT_FLAGS
+unsigned integer. [ 0x0 ]
+.IP
+This command can only be used with \fIgetsockopt()\fR.
+See the description of the flags below.
+.TP 25
+TPOPT_PARAMS\fB\fR
+struct tp_conn_param.
+.IP
+Used to get or set a group parameters for a connection.
+The struct tp_conn_param is the argument used with the
+\fIgetsockopt()\fR or \fIsetsockopt()\fR system call.
+It is described in
+\fB<netargo/tp_user.h>\fR.
+.PP
+The fields of the \fItp_conn_param\fR structure are
+described below.
+.nf
+.sp 1
+\fIValues for TPOPT_PARAMS:\fR
+.fi
+.TP 25
+\fBField\fR
+\fBValue [default]\fR
+.IP
+\fBDescription\fR
+.\" ******************8
+.TP 25
+p_Nretrans
+nonzero short integer [ 1 ]
+.IP
+Number of times a TPDU will be retransmitted before the
+local TP entity closes a connection.
+.\" ******************8
+.TP 25
+p_dr_ticks
+nonzero short integer [ various ]
+.IP
+Number of clock ticks between retransmissions of disconnect request TPDUs.
+.\" ******************8
+.TP 25
+p_dt_ticks
+nonzero short integer [ various ]
+.IP
+Number of clock ticks between retransmissions of data TPDUs.
+This parameter applies only to class 4.
+.\" ******************8
+.TP 25
+p_cr_ticks
+nonzero short integer [ various ]
+.IP
+Number of clock ticks between retransmissions of connection request TPDUs.
+.\" ******************8
+.TP 25
+p_cc_ticks
+nonzero short integer [ various ]
+.IP
+Number of clock ticks between retransmissions of connection confirm TPDUs.
+This parameter applies only to class 4.
+.\" ******************8
+.TP 25
+p_x_ticks
+nonzero short integer [ various ]
+.IP
+Number of clock ticks between retransmissions of expedited data TPDUs.
+This parameter applies only to class 4.
+.\" ******************8
+.TP 25
+p_sendack_ticks
+nonzero short integer [ various ]
+.IP
+Number of clock ticks that the local TP entity
+will wait before sending an acknowledgment for normal data
+(not applicable if the acknowlegement strategy is TPACK_EACH).
+This parameter applies only to class 4.
+.\" ******************8
+.TP 25
+p_ref_ticks
+nonzero short integer [ various ]
+.IP
+Number of clock ticks for which a reference will
+be considered frozen after the connection to which
+it applied is closed.
+This parameter applies to classes 4 and 0 in the
+ARGO implementation, despite the fact that
+the frozen reference function is required only for
+class 4.
+.\" ******************8
+.TP 25
+p_inact_ticks
+nonzero short integer [ various ]
+.IP
+Number of clock ticks without an incoming packet from the peer after which
+TP close the connection.
+This parameter applies only to class 4.
+.\" ******************8
+.TP 25
+p_keepalive_ticks
+nonzero short integer [ various ]
+.IP
+nonzero short integer [ various ]
+Number of clock ticks between acknowledgments that are sent
+to keep an inactive connection open (to prevent the peer's
+inactivity control function from closing the connection).
+This parameter applies only to class 4.
+.\" ******************8
+.TP 25
+p_winsize
+short integer between 128 and 16384. [4096 bytes]
+.IP
+The buffer space limits in bytes for incoming and outgoing data.
+There is no way to specify different limits for incoming and outgoing
+paths.
+The actual window size at any time
+during the lifetime of a connection
+is a function of the buffer size limit, the negotiated
+maximum TPDU size, and the
+rate at which the user program receives data.
+This parameter applies only to class 4.
+.\" ******************8
+.TP 25
+p_tpdusize
+unsigned char between 0x7 and 0xd.
+[ 0xc for class 4 ] [ 0xb for class 0 ]
+.IP
+Log 2 of the maximum TPDU size to be negotiated.
+The TP standard (ISO 8473) gives an upper bound of
+0xd for class 4 and 0xb for class 0.
+The ARGO implementation places upper bounds of
+0xc on class 4 and 0xb on class 0.
+.\" ******************8
+.TP 25
+p_ack_strat
+TPACK_EACH or TPACK_WINDOW. [ TPACK_WINDOW ]
+.IP
+This parameter applies only to class 4.
+Two acknowledgment strategies are supported:
+.IP
+TPACK_EACH means that each data TPDU is acknowledged
+with an AK TPDU.
+.IP
+TPACK_WINDOW
+means that upon receipt of the packet that represents
+the high edge of the last window advertised, and AK TPDU is generated.
+.\" ******************8
+.TP 25
+p_rx_strat
+4 bit mask
+[ TPRX_USE_CW | TPRX_FASTSTART over
+connectionless network protocols ]
+[ TPRX_USE_CW over
+connection-oriented network protocols ]
+.IP
+This parameter applies only to class 4.
+The bit mask may include the following values:
+.IP
+TPRX_EACH: When a retransmission timer expires, retransmit
+each packet in the send window rather than
+just the first unacknowledged packet.
+.IP
+TPRX_USE_CW: Use a "congestion window" strategy borrowed
+from Van Jacobson's congestion window strategy for TCP.
+The congestion window size is set to one whenever
+a retransmission occurs.
+.IP
+TPRX_FASTSTART: Begin sending the maximum amount of data permitted
+by the peer (subject to availability).
+The alternative is to start sending slowly by
+pretending the peer's window is smaller than it is, and letting
+it slowly grow up to the real peer's window size.
+This is to smooth the effect of new connections on a congested network
+by preventing a transport connection from suddenly
+overloading the network with a burst of packets.
+This strategy is also due to Van Jacobson.
+.\" ******************8
+.TP 25
+p_class
+5 bit mask
+[ TP_CLASS_4 | TP_CLASS_0 ]
+.IP
+Bit mask including one or both of the values TP_CLASS_4 and TP_CLASS_0.
+The higher class indicated is the preferred class.
+If only one class is indicated, negotiation will not occur
+during connection establishment.
+.\" ******************8
+.TP 25
+p_xtd_format
+Boolean.
+[ false ]
+.IP
+Boolean indicating that extended format shall be negotiated.
+This parameter applies only to class 4.
+.\" ******************8
+.TP 25
+p_xpd_service
+Boolean.
+[ true ]
+.IP
+Boolean indicating that
+the expedited data transport service will be negotiated.
+This parameter applies only to class 4.
+.\" ******************8
+.TP 25
+p_use_checksum
+Boolean.
+[ true ]
+.IP
+Boolean indicating the the use of checksums will be negotiated.
+This parameter applies only to class 4.
+.\" ******************8
+.TP 25
+p_use_nxpd
+Reserved for future use.
+.\" ******************8
+.TP 25
+p_use_rcc
+Reserved for future use.
+.\" ******************8
+.TP 25
+p_use_efc
+Reserved for future use.
+.\" ******************8
+.TP 25
+p_no_disc_indications
+Boolean.
+[ false ]
+.IP
+Boolean indicating that the local TP entity shall not issue
+indications (signals) when a TP connection is disconnected.
+.\" ******************8
+.TP 25
+p_dont_change_params
+Boolean.
+[ false ]
+.IP
+If \fBtrue\fR the TP entity will not override
+any of the other values given in this structure.
+If the values cannot be used, the TP entity will drop, disconnect,
+or refuse to establish the connection to which this structure pertains.
+.\" ******************8
+.TP 25
+p_netservice
+One of { ISO_CLNS, ISO_CONS, ISO_COSNS, IN_CLNS }.
+[ ISO_CLNS ]
+.IP
+Indicates which network service is to be used.
+.IP
+ISO_CLNS indicates the connectionless network service provided
+by CLNP (ISO 8473).
+.IP
+ISO_CONS indicates the connection-oriented network service provided
+by X.25 (ISO 8208) and ISO 8878.
+.IP
+ISO_COSNS indicates the
+connectionless network service running over a
+connection-oriented subnetwork service : CLNP (ISO 8473) over X.25 (ISO 8208).
+.IP
+IN_CLNS indicates the
+DARPA Internet connectionless network service provided by IP (RFC 791).
+.\" ******************8
+.TP 25
+p_dummy
+Reserved for future use.
+.sp 1
+.PP
+The TPOPT_FLAGS option is used for obtaining
+various boolean-valued options.
+Its meaning is as follows.
+The bit numbering used is that of the PC/RT, which means that bit
+0 is the most significant bit, while bit 8 is the least significant bit.
+.nf
+.sp 1
+\fIValues for TPOPT_FLAGS:\fR
+.fi
+.TP 10
+\fBBits\fR
+\fBDescription [Default]\fR
+.TP 10
+0
+TPFLAG_NLQOS_PDN : set when the quality of the
+network service is
+similar to that of a public data network.
+.TP 10
+1
+TPFLAG_PEER_ON_SAMENET : set when the peer TP entity
+is considered to be on the same network as the local
+TP entity.
+.TP 10
+2
+Not used.
+.TP 10
+3
+TPFLAG_XPD_PRES : set when expedited data are present
+[ 0 ]
+.TP 10
+4..7
+Reserved.
+.\".TP 10
+.\"4
+.\"Reserved.
+.\".TP 10
+.\"5
+.\"TPFLAG_DISC_DATA_IN : read only flag, if set indicates that
+.\"data from a disconnect TPDU are present.
+.\".TP 10
+.\"6
+.\"Reserved.
+.\".TP 10
+.\"7
+.\"TPFLAG_CONN_DATA_IN : read only flag, if set indicates that
+.\"data from a connect TPDU are present.
+.SH "LIBRARIES
+.PP
+The new system calls \fIrecvv\fR and \fIsendv\fR are supported by a
+library, \fIlibtp.a\fR (rather than a modified C library).
+Also in this
+library are new optional interfaces to the \fIconnect\fR and \fIaccept\fR
+system calls. See LIBTP(3).
+.SH FILES
+.PP
+The following files in have entries necessary for the correct operation
+of the TP utilities.
+.nf
+\fC
+ /etc/isodir
+ /etc/protocols
+\fR
+.fi
+.PP
+The symbolic link is needed for users to write programs using IPC
+with TP:
+.nf
+\fC
+ /usr/include/netargo@ -> /sys/netargo
+\fR
+.fi
+.PP
+The following utilities have changed:
+.nf
+ netstat
+ ifconfig
+ config
+.fi
+.PP
+The following are new utilities and daemons:
+.nf
+ isoroute
+ rlogin.iso, rcp.iso, rsh.iso, isod, rlogind
+ tpdiscard
+ tpping
+ tppt (for maintenance and debugging)
+ bark (for maintenance and debugging)
+ tpfileget, tpfileput (for debugging)
+ tpstat, tpmon
+ tpset
+ tppkt
+ viid
+.fi
+.PP
+In the kernel source, many files have changed or been added.
+For a list of these, see the installation guide,
+"Installing Wisconsin ARGO 1.0 on Academic Operating System 4.3
+Release 2".
+.SH "ERROR VALUES
+.PP
+The TP entity returns \fIerrno\fR error values as defined in
+\fB<sys/errno.h>\fR
+and
+\fB<netargo/iso_errno.h>\fR.
+User programs may print messages associated with these value by
+using an expanded version of \fIperror()\fR
+found in the ISO library, \fIlibisodir.a\fR.
+.PP
+If the TP entity encounters asynchronous events
+that will cause a transport connection to be closed,
+such as
+timing out while retransmitting a connect request TPDU,
+or receiving a DR TPDU,
+the TP entity issues a SIGURG signal, indicating that
+disconnection has occurred.
+If the signal is issued during a
+a system call, the system call may be interrupted,
+in which case the
+\fIerrno\fR value upon return from the system call is EINTR.
+If the signal SIGURG
+is being handled by reading
+from the socket, and it was a \fIaccept()\fR that
+timed out, the read may result in ENOTSOCK,
+because the \fIaccept()\fR call had not yet returned a
+legitimate socket descriptor when the signal was handled.
+ETIMEDOUT (or a some other errno value appropriate to the
+type of error) is returned if SIGURG is blocked
+for the duration of the system call.
+A user program should take one of the following approaches:
+.IP "Block SIGURG." 5
+If the program is servicing
+only one connection, it can block or ignore SIGURG during connection
+establishment.
+The advantage of this is that the \fIerrno\fR value
+returned is somewhat meaningful.
+The disadvantage of this is that
+if ignored, disconnection and expedited data indications could be
+missed.
+For some programs this is not a problem.
+.IP "Handle SIGURG." 5
+If the program is servicing more than one connection at a time
+or expedited data may arrive or both, the program must
+service SIGURG.
+It can use the \fIgetsockopt(...TPOPT_FLAGS...)\fR system
+call to see if the signal
+was due to the arrival of expedited data or due to a disconnection.
+In the latter case,
+\fIgetsockopt()\fR
+will return ENOTCONN.
+.SH BUGS
+.PP
+When running TP over the token ring, if checksumming
+is NOT used, the TP entity sents packets to the lan driver faster than
+the driver can reasonably handle them.
+A bug in the lan driver causes it to reorder the packets in this
+situation, causing an overall degradation of TP performance.
+In general, this is not a problem because very few applications
+will actually be able to send packets this fast.
+Nevertheless,
+in order to prevent this reordering,
+one may induce a delay in the TP entity by setting the 1-byte
+value
+\fItp_delay\fR
+to 1
+using the debugger.
+Hit the <pause> key, then
+type \fB/b tp_delay\fR followed by the <enter key>.
+The debugger will print the value 00.
+You then type \fB1\fR followed by the <enter key>.
+Then type \fBend\fR <enter key>.
+Then type \fBgo\fR <enter key>.
+.SH SEE ALSO
+.PP
+tcp(4P), sendv(2), recvv(2), libtp(3),
+isodir(3), isodir(5), netstat(1),
+iso(4F), clnp(4P), viid(8)
+tppt(8), tpstat(8), bark(8), tppkt(8), tpset(8), tpperf(8)
+isoroute(8), ifconfig(8), isod(8), rlogin.iso(1),
+"Installing Wisconsin ARGO 1.0 on Academic Operating System 4.3
+Release 2",
+"ARGO 1.0 Kernel Programmer's Manual"