IEN 176
Dave Lyons
Digital Equipment
Corporation
March, 1981
The DECSYSTEM-20 TCP/IP user interface
This document describes the USER / TCP
interface for the DECSYSTEM-20
operating system. It also includes
information on an interface which may
be used for developmenting
experimental higher level protocols.
The information in this document is subject to change without
notice and should not be construed as a commitment by Digital
Equipment Corporation. Digital Equipment Corporation assumes no
responsibility for any errors that may appear in this document.
The software described in this document is furnished under a
license and may be used or copied only in accordance with the
terms of such license.
Digital Equipment Corporation assumes no responsbility for the
use or reliability of its software on equipment that is not
supplied by DIGITAL.
Copyright (C) 1981 by Digital Equipment Corporation
The following are trademarks of Digital Equipment Corporation:
DIGITAL DECsystem-10 MASSBUS
DEC DECtape OMNIBUS
PDP DIBOL OS/8
DECUS EDUSYSTEM PHA
UNIBUS FLIP CHIP RSTS
COMPUTER LABS FOCAL RSX
COMTEX INDAC TYPESET-8
DDT LAB-8 TYPESET-10
DECCOM DECSYSTEM-20 TYPESET-11
Page 1
This document describes the formats and relations of the USER
interface and the Department of Defense Transmission Control
Protocol and Internet Protocol.
This document is divided into four sections. The first deals
with the "Raw packet" interface to the Internet Protocol. This
interface may be used by programmer to implement higher level
protocols such as the Transmission Control Protocol, a datagram
service, or a specialized protocol such as voice transmission.
This interface is not intended to be used as a user datagram
service. It is included to allow protocols other than TCP to be
implemented and used.
The second section is concerned with the TCP / USER interface
itself. It describes the various attributes that may be
associated with a connection, and the formats of the monitor
calls to set and read these attributes. It is assumed that the
reader is familiar with the DECSYSTEM-20 user interface for
files.
The third section explains the interrelations of the user
interface and certain network events (such as receiving data).
This section also covers differences between "local" I/O, and
"network" I/O.
The fourth section covers the retransmission algorithm
exponential smoothing function.
Page 2
Section 1. The INTERNET interface.
IPOPR% JSYS (754) - I P operations
This section covers the IPOPR JSYS and its functions. These
functions can be used to send and receive special messages directly,
or to set various system parameters related to the IP network layer.
Restrictions: Some functions may require WHEEL or OPERATOR. In
addition, some other functions may require
NETWORK-WIZARD.
Accepts in AC1: JFN, Special Queue number, or other designator.
AC2: Function code and optional flags.
AC3: Argument or pointer to argument block.
Returns: +1 Always
A RESET% JSYS will release all special queues that have been
assigned.
Code Symbol Meaning
0 .IPASQ Assign special queue for IP packets. This function
requires NETWORK-WIZARD. AC3 points to a block of
the form:
Word 0: .IPPPV ! 32 bits internet protocol ! 4 bits !
! number ! !
Word 1: .IPFHV ! 32 bits foreign host ! 4 bits !
! number ! !
Word 2: .IPLHV ! 32 bits local host number ! 4 bits !
Word 3: .IPPTV ! 16 bits local port, ! 4 bits !
! 16 bits distant port ! !
Word 4: .IPPPM ! mask for .IPPPV ! 4 bits !
Word 5: .IPFHM ! mask for .IPFHV ! 4 bits !
Word 6: .IPLHM ! mask for .IPLHV ! 4 bits !
Word 7: .IPPTM ! mask for .IPPTV ! 4 bits !
If IP%SPP is set, word 3 distant port bits are
ignored.
Other flag bits in AC2 are:
IP%RPI = 1B0 ;Raw Packet Interface
IP%SPP = 1B1 ;Single Port Protocol
On a successful return, AC1 contains a Special queue
handle.
Page 3
1 .IPRSQ Release IP special queues. AC3 contians the queue
handle or -1 for all assigned queues.
2 .IPSSM Send Special Message. AC3 points to an argument
block of the following form.
1. Word 0 of the buffer must be a word count
(including word 0)
2. Words 1 thru 5 must be a legal Internet Header
3. If IP%SPP was set when the ASNSQ jsys was done,
word 6 must contain port number(s)
The monitor will validate the local host field and
compute the header checksum.
3 .IPRSM Receive Special Message. AC3 points to a buffer
which receive the data. The first word of the buffer
must contain the length of the buffer in the right
half. After the call, the length is stored in the
left half. If the message is too long, a size error
is given, and the message is truncated to the length
of the buffer.
Possible errors:
NTWZX1 NETWORK-WIZARD capability required
IPOX1 Illegal function code
IPOX2 All Special Queues are in use
IPOX3 Special Queue allocation conflict
IPOX4 Invalid message size
IPOX5 Insufficient system resources
IPOX6 Invalid header value in this queue
IPOX7 Queue handle out of range
IPOX8 Queue was not assigned
IPOX9 WHEEL, OPERATOR or NETWORK-WIZARD capability required
Page 4
Section 2. The USER / TCP interface
It is the programmers responsibility to provide information to the
operating system about the network connection required. This
information is passed to the operating system thru a GTJFN monitor
call. Although TCP has full duplex data connections, there is a need
for two types of connections, active, and passive. The active
connection can be thought of as going out and finding someone to talk
with. This is also refered to as the Caller. The passive connection
can be thought of as waiting until someone shows up to talk with.
This is also refered to as a Listener. The format used by the TCP
network protocol is as follows.
TCP:[LOCAL_HOST][-LOCAL_PORT[#]].[FOREIGN_HOST][-FOREIGN_PORT][;A1..]
The following examples show the various ways that connections may be
specified.
1. TCP:.RADC-TOPS20-1;CONN:ACTIVE
2. TCP:1#
3. TCP:1#.-5000
4. TCP:1#.1200200002;CONN:PASIVE
5. TCP:4500000254.1200200117-3;CONN:ACT
6. TCP:4500000254-177#.1200200117-123;CON:A;BUF:128;PER:0
;TI:60;TY:2;SEC:2;COM:2
In case 1, the local information is not present and will be
defaulted. Port numbers are controlled as follows:
If the number is in the range of 0 to 377 (octal), it must be
followed by a "#", and the user must have WHEEL, OPERATOR or
NETWORK-WIZARD. The "#" is redundant, but is included to
prevent mistakes. This range of numbers is reserved for
system servers.
The numbers between 400 and 77777 are reserved for users and
are not controlled by the system.
Numbers in the range of 100000 to 177777 are reserved by the
system, and assigned on a "need" basis.
Note: The monitor will assign the numbers in the following
manner. The "sign" bit of the port number will always be
set, the next 9 bits will be reserved for the job number, and
the last 6 bits will the the JFN number assigned the
Page 5
connection. These assignments are subject to change without
notice.
As example 1 fits into the third case, it will be assigned a port
number by the system. The destination system is identified as
"RADC-TOPS20" and the port number is "1". The CONNECTION attribute
is present with the ACTIVE option, and this system will attempt the
connection.
The name/Internet Number binding is local to only this system. It is
the responsibility of the system administrator to maintain this
binding. There are no restrictions on having many names identify the
same system, or having the same name on different systems disagree.
The later situation should be avoided, but this is not required.
The second case shows a passive open on port 1. The connection will
be accepted from any host and any port
The third case shows a passive open on port 1 that will only accept
connections from any system with a port number of 5000.
The fourth case shows a passive open on port 1 for any user on node
1200200002 (SRI-KL).
The fifth case shows an active connection from host 4500000254 (the
DECnet side of DEC-2136) with a defaulted port number. The target
side of the connection is the ARPANET side of DEC-2136.
The sixth example shows a connection from DEC-2136 (DECnet) to
DEC-2136 (ARPANET). This connection includes the following
attributes:
;CON:A show an active connection
;BUF:128 buffer size of 128 bytes
;PER:0 persist in opening the connection
;TI:60 time the connection out if there is a 60 second
failure
;TY:2 type of service is Speed vs. Reliability
;S:2 security level of 2
;COM:2 compartment of 2
Page 6
The following are valid attributes:
;CONNECTION:ACTIVE
;CONNECTION:PASSIVE This attribute is used to indicate if the
operating system should actively connect to the foreign
system. The default is PASSIVE.
;BUFFER:n This attribute indicates that record mode I/O with records
of N bytes is to be used. N may be in the range of 0 to
2^16-1. If not given, unbuffered I/O will be used.
;PERSIST:n
;PERSIST:(n,m) With an argument of 0, attempt to open the connection
and keep trying until successful. If n is given, try for n
seconds, at which time an error return is given if no
connection has been established. An attempt is made every m
seconds, where m is an estimate of the round trip delay
between systems or provided by the user. If no persistence
is given, 30 seconds will be used.
;TIMEOUT:n The amount of time allowed to pass while waiting for a
message from the foreign system before an error is given to
the user. If not given, a default 30 seconds will be used.
If the value of n is 0, no timeout will occur. N may be in
the range of 0 to 2^18-1.
;TYPE-OF-SERVICE:n The type of service required by the user indicates
what tradeoffs are to be made in providing data transmission.
N may be in the range of 0 to (2^18-1). The TCP
implementation will only use the low order 8 bits.
;SECURITY:n The security level of the connection may range from 0 to
3. If not specified, a value of 0 will be used.
;COMPARTMENT:n The compartment level of a connection is specified as
a code provided for the user by the Defense Communications
Agency. N may be in the range of 0 to 255.
Note that these last two fields are not used in TCP itself, but in
lower layers of the protocols. The are provided for at this level to
allow the user control over these fields. Also, the use of either of
these two fields will invoke a request to the Access Control Job, or
will fail if the Access Control is not enabled for these functions.
The TYPE-OF-SERVICE field will also invoke a call to the Access
Control Job, but will be allowed if Access Control is not enabled for
Page 7
this function.
Page 8
TCOPR% JSYS (755)
The following are the TCOPR functions related to the TCP: device.
These functions are like the MTOPR JSYS, but are only used with the
TCP device.
ACCEPTS AC1: JFN of device
AC2: function code (see below)
AC3: function argument or address of argument block.
See each function for details.
RETURNS +1 always
Code Symbol Meaning
0 .TCRCS read connection status. AC3 points to a
block which at least .TCRCL words long.
.TCLEN 0 Length of block
.TCTFP 1 Foreign port
TC%TFP 16 bits, right justified
.TCTFH 2 Foreign host
TC%TFH 32 bits, right justified
.TCTLP 3 Local port
TC%TLP 16 bits, right justified
.TCTLH 4 Local host
TC%TLH 32 bits, right justified
.TCTRW 5 Receive window
TC%TRW 16 bits, right justified
.TCTSW 6 Send window
TC%TSW 16 bits, right justified
.TCTCS 7 Connection state
TC%TCS 4 bits, right justified
.TCPCL closed
.TCPLI listen
.TCPSS syn sent
.TCPSR syn received
.TCPES established
.TCPF1 fin wait 1
.TCPF2 fin wait 2
.TCPTW time wait
.TCPCW close wait
.TCPCG closing
Page 9
.TCTBW 10 Buffers waiting ack
TC%TBW 8 bits, right justified
.TCTBP 11 Buffers pending receipt
TC%TBP 8 bits, right justified
.TCTBS 12 Buffer size
TC%TBS 16 bits, right justified
.TCTTS 13 Type-of-service and security fields
TC%TTS 18 bits, 1st 18 bit byte
TC%TSF 2 bits, 3rd 9 bit byte
TC%TCF 8 bits, 4th 9 bit byte
The bits used in the TCP implementation are
as follows.
.TCTPR 3 bits Precedence
.TCTST 1 bit Stream / Datagram
.TCTRE 2 bits Reliability
.TCTSR 1 bit Speed / Reliability
.TCTSP 1 bit Speed
.TCTTT 14 Transmission timeout
TC%TTT 9 bits, right justified
.TCTUD 15 Urgent data information (to be
defined)
.TCTRA 16 Retransmission parameters - Alpha
TC%TRA Alpha, a floating point number.
.TCTRB 17 Retransmission parameters - Beta
TC%TRB Beta, a floating point number.
See the section on message retransmission for
a description of these fields, their uses,
and limitations.
.TCTPI 20 PSI channel assignment. See function
.TCSPC for a definition of this field.
1 .TCSUD Send urgent data. AC3 points to a block of
the form
0 Pointer to data
1 Count of bytes or 0
2 Byte to terminate output on
(note that these are the same as AC2 - AC4 of
the SOUT and SOUTR JSYS's)
Page 10
Setting TC%FEL in AC3 will force End Of
Letter to be set.
2 .TCSBS Set buffer size. AC3 contains a number in
the range of 0 to 2^16-1. A value of 0
indicates non-buffered mode.
3 .TCSPA Set passive/active flag. TC%APF is set in
AC3 to indicate an active connection, and
cleared to indicate a passive connection.
4 .TCSPP Set persistence parameters. AC3 is the time
to wait for connections.
If AC3 is 0, do not timeout the connection.
If AC3 contains 0,,n an attempt to connect
will be made for n seconds with
retransmission time estimated by the system
If AC3 contains m,,n an attempt to connect
will be made for n seconds with
retransmission every m seconds. M must be
less than n.
5 .TCSTP Set timeout parameters. AC3 contains the
time to wait before a timeout. The value
given must be in the range of 0 to 2^18-1.
If AC3 contains a 0, no timeout will occur.
6 .TCSRP Set retransmission parameters. AC3 points to
an argument block which is two words long.
The first word contain a floating point
number, Alpha, and the second contains
another floating point number Beta. For a
description of these two fields see the
section on message retransmission.
7 .TCSTS Set Type-of-service. AC3 contains the type
of service desired. The value must be in the
range of 0 to 2^18-1.
10 .TCSSC Set security and compartment levels. AC3
contains the security level and the
compartment levels in the form
(security),,(compartment)
Page 11
Security may be in the range of 0 to 3.
Compartment may be in the range of 0 to
2^8-1.
11 .TCSPC Set PSI channels. AC3 contains six 6 bit
fields as follows
TC%TPU 1st byte, Urgent data channel
TC%TRI 2nd byte, Read data channel
TC%TSI 3rd byte, Send data channel
TC%TER 4th byte, Error channel
TC%TSC 5th byte, State change
TC%TXX 6th byte, unused, must be 77 (octal)
To indicate that no interrupt is desired for
a given function, specify the value 77
(octal) for the channel.
12 .TCRTW Read a single entry from the TCB. AC3
contains the word of the TCB that is desired.
On return, AC3 will contain the value of the
word in question.
For a list of the words that may be returned,
see the function .TCRCS.
13 .TCSIL Set the interrupt level for buffers. AC3
contains a number between 0 and 1024 in each
half. The left half sets the number of bytes
received before an interrupt will occur. The
right half sets the number of bytes which
must be available in the output buffer before
an interrupt will occur. In both cases, a
value of 0 (the default) will be treated
exactly like a value of 1.
14 .TCSSR Set the route to be used in transmission of
the message. AC3 points to an argument
block. The first word of that block is the
total length of the block. Each word
thereafter is the Internet Address of the
next node to route to, right justified.
15 .TCRLB Read lower bound for retransmission. The
number of seconds is returned in AC3 as a
floating point number.
16 .TCSLB Set lower bound for retransmission. The
number of seconds will be in AC3 as a
floating point number. Requires WHEEL,
OPERATOR or NETWORK-WIZARD. The number must
be larger than 0 and less than the current
Page 12
upper bound.
17 .TCRUB Read upper bound for retransmission. The
number of seconds is returned in AC3 as a
floating point number.
20 .TCSUB Set upper bound for retransmission. The
number of seconds will be in AC3 as a
floating point number. Requires WHEEL,
OPERATOR or NETWORK-WIZARD. The number must
be larger than the current lower bound and
less than 250.
The following functions do not require a JFN in AC1, as they are
system wide. AC1 must contain a 0.
100 .TCRDLB Read default lower bound for retransmission.
The number of seconds is returned in AC3 as a
floating point number.
101 .TCSDLB Set default lower bound for retransmission.
The number of seconds will be in AC3 as a
floating point number. Requires WHEEL,
OPERATOR or NETWORK-WIZARD. The number must
be larger than 0 and less than the current
upper bound.
102 .TCRDUB Read default upper bound for retransmission.
The number of seconds is returned in AC3 as a
floating point number.
103 .TCSDUB Set default upper bound for retransmission.
The number of seconds will be in AC3 as a
floating point number. Requires WHEEL,
OPERATOR or NETWORK-WIZARD. The number must
be larger than the current lower bound and
less than 250.
Error codes:
DESX1 Invalid source/destination designator
DESX3 JFN is not assigned
DESX4 Invalid use of terminal designator or string pointer
DESX9 Invalid operation for this device
IOX5 Device or data error
Page 13
TCOX1 Invalid function
TCOX2 input error or not all data read
TCOX3 invalid software interrupt channel
TCOX4 Field conflict. Returned if two fields must be specified,
and there was an error in the relative size of the fields.
TCOX5 Illegal function after OPENF call. The function can only be
performed before the OPENF JSYS is executed.
TCOX6 WHEEL, OPERATOR, or NETWORK-WIZARD capability required
Page 14
Section 3. I/O interrelations.
This section describes the relations of various monitor calls which
relate to performing I/O for a TCP device.
First, the user may execute a TCOPR JSYS to set various fields within
the transmission control block (TCB). Some of these functions are
allowed only before the OPENF. These include
.TCSSC Set security and compartment levels
.TCSPA Set passive/active flag (makes no sense after the
OPENF has been done)
.TCSBS Set buffer size
.TCSPP Set persistence parameters (makes no sense after the
OPENF has been done)
If the user has enabled for PSI interrupts on state changes, an
interrupt will be given the user every time the state machine is
stepped.
If the user has enabled interrupts for URGENT data, an interrupt will
be given to the user each time the urgent data pointer is increased,
that is, we have been notified of more urgent data than we previously
knew about. If the user has not read all of the previous urgent
data, the interrupt will still be sent.
If the user has enabled interrupts for errors, a PSI interrupt will
be given under the following conditions:
1. A timeout has occured (either in communications, or in
opening the channel).
2. An ABORT or RST (reset) message was received.
These types of events also step the state machine, and will also
cause an interrupt on the state channel.
SIN, SINR, BIN, SIBE, DIBE and input interrupts.
If the user has enabled for input data interrupts, the program will
be interrupted when the amount of unread user data exceeds the value
provided with the .TCSIL function or non-zero if no value was
specified. At any time, a SIBE will return the number of unread
bytes available to the user, i.e. those bytes which have been
acknowledged. This is not the receive window size. To determine the
size of the receive window, the program must use a TCOPR JSYS. The
actions of the SINR JSYS are documented in the monitor calls manual,
and the TCP flag "EOL" (end of letter) will be used to determine
record blocking.
SOUT, SOUTR, BOUT, SOBE, SOBF, DOBE, and output interrupts.
Page 15
If the user has performed a passive open, and then executes a JSYS
which will cause output to occur, the TCB is converted to an active
open, and the user will block until the connection is established and
the data specified by the JSYS is moved into the monitor, or an event
which will cause the user to be notified of an error occurs.
If the user has enabled for output data interrupts, the program will
be interrupted when the output buffer becomes "non-full", that is,
space is available in the output buffer. If the user has indicated a
"buffer level" with the .TCSIL function of the TCOPR JSYS, the
interrupt will be signaled when the free space in the buffer exceeds
the specified level. At any time, a SOBE or SOBF will return the
number of bytes which are in the output buffer, i.e. the number of
bytes which are have not been acknowledged by the foreign host. When
a SOUTR is executed, the data message sent to the foreign system will
have the EOL bit set, and the byte numbering will be adjusted to the
next record boundry. This record size is set with the ;BUFFER
attribute to GTJFN, or with the .TCSBS function of the TCOPR JSYS.
Single Fork I/O. A short description.
Some concern over how to perform I/O to multiple connections with a
single fork have been raised. The way to do this is fairly straight
forward. The following description demonstrates how this might be
accomplished. For simplicity, we will only examine the case of a
single input stream, and assume some critical background process
(like computing pi to 100,000,000 places). We will also assume that
the program is only willing to be interrupted when 100 or more bytes
are available.
1. The program opens a connection to the source of the data.
2. The program enables interrupts for receive data, and sets
the interrupt level to 100. This is done with the TCOPR
functions .TCSPC and .TCSIL.
3. The program starts computing pi.
4. At some point in time, an interrupt occurs, and the
calculation of pi is interrupted. At this point the
programmer knows the there has been at least 100 bytes of
data available since the last interrupt. The program may
read any amount of this data. Let us look at the
implications.
1. The fact that an interrupt has occured implies that the
condition for the interrupt has been true at least once
since the last interrupt. This does not guaranty that
the condition is still true. The program must assure
that these conditions still exist within the interrupt
code. This is true for ALL of TOPS-20.
Page 16
2. In light of number 1, if a program receives an interrupt
for data available, and reads data until less than 100
bytes remain, that program will receive an interrupt for
data when more than 100 bytes are available, regardless
of when this event occurs.
3. Assume the program receives an interrupt for data, and
120 bytes are available. The program then reads 60
bytes. While the program is processing this data,
another 45 bytes of data is received. The program
checks for data, and finds that 105 bytes are available.
The program reads all the data, and will then dismiss
the interrupt. As the conditions in number 1 are true,
the program will receive another interrupt for data
being available right away, even though there is no data
available. As number 1 points out, the program must
assure that the conditions are still true. In this
case, they are not, and the program should dismiss the
interrupt.
4. If the program receives an interrupt, fails to read
enough data to drive the number of bytes below the
current alarm level, and dismisses the interrupt, no
more interrupts will be given for that channel. There
can be no transition over the alarm level.
5. The program enters a loop to read the data. First, the
program executes a SIBE JSYS to determine he exact number of
bytes available. The program then reads this data, and
processes it. The program continues in this loop until the
SIBE JSYS indicated there is no more data to be read.
6. The program dismisses the interrupt, and the calculation of
pi continues.
7. The program completes the calculation of pi, prints the
results, closes the TCP connection, and exits.
It is probably easiest to think of interrupts as a "pulse" which will
be queued for a job until that job is willing to receive it (i.e. at
a lower interrupt level, or not at interrupt level at all). The
"pulse" will remain queued even if the conditions which caused it no
longer true. Many different interrupts may be queued for a job, and
they will be processed in order of occurrence within order of level.
Again, this is true for all of TOPS-20.
Page 17
Section 4. Data retransmission
This section describes the data retransmission parameters, Alpha and
Beta.
The functions used provide an "elongation factor" or delay variance,
Alpha, as well as an exponential smoothing function with weighting of
Beta. Assume the following:
RTT is the delay between the sending of an octet and the ACK for
that octet.
SRTT is the exponentially weighted round trip delay.
UBND is the upper bound for data retransmission.
LBND is the lower bound for data retransmission.
RTO is the retransmission timeout for this data set.
SRTT may be calculated from the following.
SRTT = ( Beta * SRTT ) + ( ( 1 - Beta ) * RTT )
RTT and SRTT are initially set to an estimated delay time. The
retransmission time out, RTO, may be calculated as follows:
RTO = max ( LBND, min ( UBND, Alpha * SRTT ))
By default, the lower bound, LBND, will be set to 1 second and the
upper bound, UBND will be set to 250 seconds. These values may be
changed with the .TCSLB and .TCSUB functions of the TCOPR% JSYS.
Beta must be in the range of 0.0 to 1.0. It will initially be set to
0.9. Alpha must be in the range of 0.0 to 250.0. The default value
for Alpha is 1.5. Although numbers less than 1.0 and larger than
10.0 are fairly useless, they are allowed.
The system administrator may set the default upper and lower bounds
on retransmission. This may be done with the .TCSDL and .TCSUL
functions of the TCOPR% JSYS.
--------