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.
   --------