DataMuseum.dk

Presents historical artifacts from the history of:

RegneCentralen RC850

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RegneCentralen RC850

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦24d784c80⟧ RcTekst

    Length: 275968 (0x43600)
    Types: RcTekst
    Names: »43G11738.WP«

Derivation

└─⟦975e936c7⟧ Bits:30005865 Manualer - tekstfiler 43-GL afdelingen
    └─⟦this⟧ »43G11738.WP« 

RcTekst


╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

════════════════════════════════════════════════════════════════════════
↓
┆14┆┆b3┆┆06┆i↲
┆14┆┆b3┆↲
┆a1┆┆b0┆TABLE OF CONTENTS┆05┆PAGE↲
↲
┆b0┆1.  INTRODUCTION ┆f0┆......................................................   1↲
    1.1  Structure of this Manual .....................................   1↲
    1.2  Terminology and Notation .....................................   2↲
↲
┆b0┆2.  MODULE OVERVIEW ┆f0┆...................................................   4↲
↲
┆b0┆3.  PROCESS COMMUNICATION ┆f0┆.............................................  16╞	↲
    3.1  External Communication .......................................  16↲
╞	3.1.1  DTE User Interface ....................................  17↲
╞	3.1.2  Access to the HDLCLCP .................................  18↲
╞	3.1.3  Access to the NCP Module ..............................  21↲
    3.2  Internal Communication .......................................  25↲
╞	3.2.1  Process dte ...........................................  26↲
╞	       3.2.1.1  Messages received ............................  26↲
╞	       3.2.1.2  Messages sent ................................  32↲
╞	3.2.2  Process dte access ....................................  34↲
╞	       3.2.2.1  Messages received ............................  34↲
╞	3.2.3  Process dte hrec ......................................  42↲
╞	       3.2.3.1  Messages received ............................  42↲
╞	3.2.4  Process dte lcnzero ...................................  43↲
╞	       3.2.4.1  Messages received ............................  44↲
╞	       3.2.4.2  Messages sent ................................  47↲
╞	3.2.5  Process dte chan ......................................  48↲
╞	       3.2.5.1  Messages received ............................  49↲
╞	       3.2.5.2  Messages sent ................................  52↲
╞	3.2.6  Process dte pool ......................................  54↲
↲
┆b0┆4.  PROCESS DESCRIPTIONS ┆f0┆..............................................  55↲
    4.1  General Information ..........................................  56↲
╞	4.1.1  Common Data Structures ................................  56↲
╞	       4.1.1.1  User Table ...................................  56↲
╞	       4.1.1.2  Semaphore Area for dte chan xxx ..............  57↲
╞	       4.1.1.3  x25 param type ...............................  58↲
╞	       4.1.1.4  Zones ........................................  60↲
╞	4.1.2  Common or General Procedures ..........................  60↲
╞	       4.1.2.1  X.25 Procedures ..............................  60↲

════════════════════════════════════════════════════════════════════════
↓
┆14┆┆b3┆┆06┆ii↲
↲
╞	       4.1.2.2  Modem Signals Handling .......................  63↲
╞	       4.1.2.3  User Table Operations ........................  64↲
╞	       4.1.2.4  Error Text Procedures ........................  65↲
╞	       4.1.2.5  Tracing Procedures ...........................  66↲
╞	       4.1.2.6  Internal Test Procedures .....................  67↲
╞	4.1.3  Buffer Pools ..........................................  68↲
╞	4.1.4  Timers in the DTE Module ..............................  71↲
╞	4.1.5  Relation between Streams and Logical Channels .........  72↲
╞	4.1.6  Addresses used by the DTE .............................  73↲
╞	       4.1.6.1  User Identification ..........................  76↲
╞	       4.1.6.2  DTE Address ..................................  77↲
╞	       4.1.6.3  Address Procedures ...........................  79↲
╞	4.1.7  Naming of Running Process Incarnations ................  81↲
    4.2  Description of dte ...........................................  83↲
      ╞	4.2.1  Process Parameters ....................................  83↲
╞	4.2.2  States ................................................  86↲
╞	4.2.3  Semaphore and Reference Variables .....................  88↲
╞	4.2.4  Data Structures .......................................  91↲
╞	4.2.5  Semaphores and Message Flow ...........................  94↲
╞	4.2.6  Overview of Process Operation .........................  95↲
╞	4.2.7  Creation and Removal of dte chan Process Incarnation .. 106↲
╞	4.2.8  HDLC Event Handling ................................... 110↲
    4.3  Description of dte access .................................... 113↲
╞	4.3.1  Process Parameters .................................... 113↲
╞	4.3.2  States ................................................ 114↲
╞	4.3.3  Semaphore and Reference Variables ..................... 117↲
╞	4.3.4  Data Structures ....................................... 119↲
╞	4.3.5  Semaphores and Message Flow ........................... 120↲
╞	4.3.6  Overview of Process Operation ......................... 121↲
    4.4  Description of dte hrec ...................................... 124↲
╞	4.4.1  Process Parameters .................................... 124↲
╞	4.4.2  States ................................................ 125↲
╞	4.4.3  Semaphore and Reference Variables ..................... 125↲
╞	4.4.4  Data Structures ....................................... 126↲
╞	4.4.5  Semaphores and Message Flow ........................... 127↲
╞	4.4.6  Overview of Process Operation ......................... 128↲

════════════════════════════════════════════════════════════════════════
↓
┆14┆┆b3┆┆06┆iii↲
↲
    4.5  Description of dte lcnzero ................................... 130↲
╞	4.5.1  Process Parameters .................................... 130↲
╞	4.5.2  States ................................................ 132↲
╞	4.5.3  Semaphores and Reference Variables .................... 133↲
╞	4.5.4  Data Structures ....................................... 133↲
╞	4.5.5  Semaphores and Message Flow ........................... 134↲
╞	4.5.6  Overview of Process Operation ......................... 135↲
    4.6  Description of dte chan ...................................... 138↲
╞	4.6.1  Process Parameters .................................... 138↲
╞	4.6.2  States ................................................ 140↲
╞	4.6.3  Semaphores and Reference Variables .................... 141↲
╞	4.6.4  Data Structures ....................................... 142↲
╞	4.6.5  Semaphores and Message Flow ........................... 145↲
╞	4.6.6  Overview of Process Operation ......................... 146↲
╞	4.6.7  Description of dte chan local input semaphores ........ 154↲
╞	4.6.8  The Strategy for Acknowledgement of Data Packets ...... 155↲
╞	4.6.9  Maintance of Output Data Sequence ..................... 158↲
↲
┆b0┆5   ERROR MESSAGES ┆f0┆.................................................... 160↲
    5.1  Error Messages from error text ............................... 160↲
    5.2  Error Messages from error report and trace ................... 171↲
↲
┆b0┆6.  TRACE AND DEBUG TOOLS ┆f0┆............................................. 173↲
    6.1  Trace System ................................................. 173↲
         6.1.1  Process Overview and Operation ........................ 173↲
         6.1.2  External Communication ................................ 177↲
         6.1.3  Operator Commands ..................................... 180↲
         6.1.4  Traceoutput Description ............................... 181↲
    6.2  Internal Test System ......................................... 183↲
         6.2.1  Process Overview and Operation ........................ 183↲
         6.2.2  External Communication ................................ 188↲
         6.2.3  Operator Commands ..................................... 191↲
         6.2.4  Testoutput Description ................................ 193↲
                6.2.4.1  Testoutput frm Process dte ................... 194↲
                6.2.4.2  Testoutput from Process dte lcnzero .......... 196↲

════════════════════════════════════════════════════════════════════════
↓
┆14┆┆b3┆┆06┆iv↲
↲
                6.2.4.3  Testoutput from Process dte chan ............. 198↲
                6.2.4.4  Communication Line Status Information ........ 200↲
                6.2.4.5  dte access Test Message Print ................ 203↲
    6.3  Message Snoop ................................................ 205↲
↲
┆b0┆7.  CONFIGURATION GUIDE ┆f0┆............................................... 207↲
    7.1  Configuration Parameters ..................................... 207↲
         7.1.1  Compilation Parameters ................................ 207↲
         7.1.2  Creation Parameters ................................... 208↲
         7.1.3  Special Default Values ................................ 210↲
         7.1.4  Configuration of Trace, Test and Snoop Systems ........ 211↲
    7.2  Storage Requirements ......................................... 212↲
         7.2.1  Code .................................................. 213↲
         7.2.2  Stack ................................................. 214↲
         7.2.3  Buffer Pools .......................................... 215↲
         7.2.4  Static and Dynamic Requirements ....................... 218↲
    7.3  Module Compilation ........................................... 222↲
         7.3.1  Version Information ................................... 222↲
         7.3.2  Compilation Jobs ...................................... 223↲
    7.4  Creation of the DTE Module/System ............................ 224↲
↲
┆b0┆8.  SOURCE TEXT ORGANIZATION ┆f0┆.......................................... 225↲
↲
┆b0┆A.  REFERENCES ┆f0┆........................................................ 229↲
↲
┆b0┆B.  ENVIRONMENTS ┆f0┆...................................................... 231↲
    B.1  External Environments ........................................ 231↲
    B.2  xdteenv ...................................................... 232↲
    B.3  xx25env ...................................................... 236↲
    B.4  xtraceenv .................................................... 244↲
    B.5  dteenv ....................................................... 247↲
    B.6  dtebreakenv .................................................. 273↲
    B.7  hdlcenv ...................................................... 274↲
    B.8  stdconf ...................................................... 276↲

════════════════════════════════════════════════════════════════════════
↓
┆14┆┆b3┆┆06┆v↲
↲
┆b0┆C.  STATE/ACTION TABLES ┆f0┆............................................... 277↲
    C.1  dte access ................................................... 277↲
         C.1.1  User Dependent ........................................ 277↲
         C.1.2  Stream Dependent ...................................... 279↲
         C.1.3  Stream Independent .................................... 282↲
    C.2  dte lcnzero .................................................. 283↲
    C.3  dte chan ..................................................... 286↲
↲
┆b0┆D.  TRACE AND TEST DESCRIPTION ┆f0┆........................................ 303↲
    D.1  Trace Example ................................................ 304↲
    D.2  Testoutput Conversion ........................................ 305↲
    D.3  Testoutput Examples .......................................... 311↲
         D.3.1  Process dte ........................................... 311↲
         D.3.2  Process dte chan 001 .................................. 312↲
↲
┆b0┆E.  CONTENTS OF LIBRARIES ┆f0┆............................................. 313↲
    E.1  Lib-Files .................................................... 313↲
    E.2  Plib-Files ................................................... 315↲
↲
┆b0┆F.  COMPILATION EXAMPLES ┆f0┆.............................................. 317↲
    F.1  Update of an Existing Binary dte ............................. 318↲
    F.2  Generation of the X.25 Procedure Library ..................... 319↲
    F.3  Update of the X.25 Procedure Library ......................... 320↲
    F.4  Generation of the Trace System ............................... 321↲
↲
┆b0┆G.  BUFFER LAYOUT IN CALL SET-UP PHASE ┆f0┆................................ 323↲
↲
┆b0┆H.  INDEX ┆f0┆............................................................. 325↲
    H.1  Survey of Figures ............................................ 325↲
    H.2  Survey of Tables ............................................. 326↲
    H.3  Survey of Examples ........................................... 327↲

════════════════════════════════════════════════════════════════════════
↓
«index» formatlinie til RC manualer↲
┆14┆┆b3┆↲
┆14┆┆b3┆┆06┆- ┆0b┆ -↲
┆a1┆┆b0┆1.╞	INTRODUCTION.↲
↲
╞	┆84┆This paper is the reference document for the External DTE Module. ↓
┆19┆┆89┆┄┄This mo┄dule interfaces a CENTERNET Terminal Concentrator (TC) to a ↓
┆19┆┆89┆┄┄packet switched network using the CCITT recommendation X.25 (ref. ↓
┆19┆┆89┆┄┄(1)) for the communication between a TC and a network access node.↲
↲
╞	┆84┆The module does not support the total set of functions described ↓
┆19┆┆89┆┄┄in ref. (1). The following services are ┆a1┆not┆e1┆ implemented:↲
↲
╞	   - Permanent Virtual Circuit (PVC).↲
╞	   - Datagram.↲
╞	   - The Optional User Facilities :↲
  ╞	        - Fast select.↲
╞	        - DTE-reject.↲
↲
╞	┆84┆Additional functions at the user interface (several simultaneous ↓
┆19┆┆89┆┄┄users, two type of user inputs) are supported.↲
↲
╞	┆84┆The module described in this Reference Manual is level 3 of Recom┄↓
┆19┆┆89┆┄┄mendation X.25. It utilizes the RC3502 HDLC Driver (ref. (9)) to ↓
┆19┆┆89┆┄┄implement the whole recommendation.↲
↲
╞	┆84┆The implementation of the DTE System is done in RC3502 Real-Time ↓
┆19┆┆89┆┄┄Pascal (RTP) as defined in ref. (11) to ref. (15).↲
↲
╞	┆84┆The reader of this manual ought to be familiar with the documents ↓
┆19┆┆89┆┄┄listed in appendix A.↲
↲
↲
┆a1┆1.1╞	Structure of this Manual.↲
↲
╞	┆84┆An overview of the RTP processes constituting the DTE System and ↓
┆19┆┆89┆┄┄its environment is described in chapter 2.↲
↲
╞	┆84┆Chapter 3 describes the external interfaces (NCP, HDLC and User) ↓
┆19┆┆89┆┄┄very shortly and in more details the internal interfaces in the ↓
┆19┆┆89┆┄┄DTE module. This is done by describing each message received/sent ↓
┆19┆┆89┆┄┄by a process.↲
↲
┆8c┆┄┆a8┆↓
╞	┆84┆The implementation of the DTE module on a process basis is outlin┄↓
┆19┆┆89┆┄┄ed in chapter 4.↲
↲
╞	┆84┆Error messages produced by the DTE module are explained in chapter ↓
┆19┆┆89┆┄┄5.↲
↲
╞	┆84┆In chapter 6 different debugging/test tools for the DTE module are ↓
┆19┆┆89┆┄┄described, nearly in the same manner as in chapter 3 and 4 for the ↓
┆19┆┆89┆┄┄DTE module.↲
↲
╞	┆84┆In chapter 7 the configuration parameters and the compilation of ↓
┆19┆┆89┆┄┄the DTE System are described. Furthermore are the storage require┄↓
┆19┆┆89┆┄┄ments in the RC3502 calculated. This calculation is based on model ↓
┆19┆┆89┆┄┄1 (RC3502/1).↲
↲
╞	┆84┆Finally, chapter 8 describes the source text organization in an ↓
┆19┆┆89┆┄┄RC8000.↲
↲
↲
┆a1┆1.2╞	Terminology and Notation.↲
↲
╞	┆84┆To distinguish between a module and an RTP process (incarnation), ↓
┆19┆┆89┆┄┄a module is written with capital letters (e.g. NCP) and an RTP ↓
┆19┆┆89┆┄┄process with small letters (e.g. dte).↲
↲
╞	┆84┆In the state/action tables the following notation is used:↲
↲
╞	   _____________↲
╞	     P10         ╞	╞	P10: next state↲
╞	   ┆a1┆         A1  ┆e1┆╞	╞	A1 : action performed↲
↲
╞	┆84┆If the state/action table is outlined as a state transition graph ↓
┆19┆┆89┆┄┄the notation is:↲
↲
╞	       ┆a1┆╞	E   ┆e1┆                P9 : current state↲
╞	         A1                   P10: next state↲
╞	  P9             P10          E  : event causing the transition↲
╞	╞	╞	╞	A1 : action performed↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆In the figures describing message flows the following notation is ↓
┆19┆┆89┆┄┄used:↲
↲
↲
╞	╞	╞	╞	a process (incarnation)↲
↲
↲
↲
↲
╞	╞	╞	╞	┆84┆a semaphore↲
╞	╞	╞	╞	┆84┆(if the semaphore is hatched then ↓
┆19┆┆a7┆┄┄the semaphore is a main semaphore)↲
↲
↲
↲
╞	╞	╞	╞	signal to a semaphore↲
↲
↲
↲
╞	╞	╞	╞	wait at a semaphore↲
↲
↲
↲
↲
╞	╞	╞	╞	signal/wait to an internal semaphore↲
↲
↲
↲
╞	╞	╞	╞	buffer pool with an access semaphore↲

════════════════════════════════════════════════════════════════════════
↓
«index» formatlinie til RC manualer↲
┆14┆┆b3┆↲
┆14┆┆b3┆┆06┆- ┆0b┆ -↲
┆b0┆┆a1┆2.╞	MODULE OVERVIEW↲
↲
╞	┆84┆The External DTE Module consists of a number of processes, commu┄↓
┆19┆┆89┆┄┄nicating by means of internal messages.↲
↲
╞	┆84┆Before describing each individual process some general design cri┄↓
┆19┆┆89┆┄┄teria will be outlined↲
↲
╞	╞	┆b0┆- ┆84┆the user interface should be identical to the user in┄↓
┆19┆┆95┆┆81┆┆82┆terface of the Internal DTE↲
↲
╞	╞	┆b0┆- ┆84┆the interface between the DTE and the DCE is the  ↓
┆19┆┆95┆┆81┆┆82┆CCITT 1980 X.25 Recommendation (ref. (1))↲
↲
╞	╞	┆b0┆- ┆84┆the user interface is an open interface, which means ↓
┆19┆┆95┆┆81┆┆82┆that the DTE module has to be very robust and that the ↓
┆19┆┆95┆┆81┆┆82┆logical connections of each individual user should be ↓
┆19┆┆95┆┆81┆┆82┆independent of each other↲
↲
╞	╞	┆b0┆- ┆84┆only one HDLC line is used between the DTE and the DCE↲
↲
╞	╞	┆b0┆- ┆84┆it should be possible to connect two DTE's back to ↓
┆19┆┆95┆┆81┆┆82┆back for test purpose↲
↲
╞	╞	┆b0┆- ┆84┆the DTE should be able to control the modem signals↲
↲
╞	╞	┆b0┆- ┆84┆it should be possible to change important parameters ↓
┆19┆┆95┆┆81┆┆82┆dynamicly, at least at dte process creation.↲
↲
╞	┆84┆All the above mentioned design criteria leads to the below de┄↓
┆19┆┆89┆┄┄scribed module structuring principle and processes.↲
↲
╞	┆84┆One supervisor process (┆b0┆dte┆f0┆) is parent process to a number of ↓
┆19┆┆89┆┆81┆┄channel processes (┆b0┆dte_chan┆f0┆), each servicing a logical connection ↓
┆19┆┆89┆┆82┆┄(Virtual Call), a user interface process (┆b0┆dte_access┆f0┆), an HDLC in-↓
┆19┆┆89┆┆83┆┄terfacing process (┆b0┆dte_hrec┆f0┆), a channel zero process↲
         ┆84┆(┆b0┆dte_lcn_zero┆f0┆), and a buffer pool handler process (┆b0┆dte_pool┆f0┆). ↓
┆19┆┆89┆┆82┆┄Besides these processes the dte is parent process for four proces┄↓
┆19┆┆89┆┆82┆┄ses used as de┄bug and test tools (please refer to figure 2). ↓

════════════════════════════════════════════════════════════════════════
↓
┆19┆┆89┆┆82┆┄In figure 1 the pro┄┄cess tree of the DTE module and its environment ↓
┆19┆┆89┆┆82┆┄is shown, and in figure 2 the process tree of the debug and test ↓
┆19┆┆89┆┆82┆┄processes.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 1: Process tree of the External DTE and its environment.↲
↲
╞	┆84┆The channel processes are created dynamically and removed each ↓
┆19┆┆89┆┄┄time the DTE/DCE interface is restarted.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 2: Process tree of the DTE debugging, test and trace tools.↲
↲
↲
↲
╞	┆84┆In figure 3, 4, 5 and 6 an outline of message flow in four cases ↓
┆19┆┆89┆┄┄are presented. A more detailed description may be found in chapter ↓
┆19┆┆89┆┄┄3, whereas communication with the NCP module follows ref. (10). ↓
┆19┆┆89┆┄┄The HDLC driver interface is described in ref. (9) and the DTE ↓
┆19┆┆89┆┄┄user interface in ref. (3).↲
↲
╞	┆84┆In the following a short description is given of the modules and ↓
┆19┆┆89┆┄┄processes found in figures 1 and 2 together with a more comprehen┄↓
┆19┆┆89┆┄┄sive description of the individual processes of the DTE System.↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
         ┆b0┆ADAM      ┆84┆┆f0┆is the root of the dynamic tree of incarnations.↲
╞	╞	┆84┆┆a1┆ADAM┆e1┆ creates automatically three incarnations:↲
╞	╞	┆b0┆CONSOL↲
╞	╞	┆b0┆OPERATOR↲
╞	╞	┆b0┆S (cnadam)↲
╞	╞	┆a1┆ADAM┆e1┆ may remove any of the incarnations on request.↲
↲
╞	┆b0┆OPERATOR, ┆84┆CONSOLE┆f0┆ is the interface between a human operator and ↓
┆19┆┆93┆┆81┆┄the running incarnations. ┆a1┆CONSOLE┆e1┆ performs I/O to the ↓
┆19┆┆93┆┆81┆┄debug console. ┆a1┆OPERATOR┆e1┆ processes messages signalled to ↓
┆19┆┆93┆┆81┆┄the operator semaphore.↲
↲
╞	┆b0┆TIMER╞	┆f0┆performs delay timing and timeout of drivers.↲
↲
╞	ADAM, OPER┆84┆ATOR, CONSOLE, and TIMER are parts of the RC3502 basic ↓
┆19┆┆93┆┄┄system (ref. (13)).↲
↲
╞	┆b0┆cnadam╞	┆f0┆CENTERNET parent process (ref. (8)).↲
↲
╞	┆b0┆timeout╞	┆84┆┆f0┆handles timer booking and timer update (ref. (6)). The ↓
┆19┆┆93┆┆81┆┄module is used by dte_chan.↲
↲
╞	┆b0┆NCP╞	┆a1┆┆f0┆N┆e1┆etwork ┆a1┆C┆e1┆ontrol ┆a1┆P┆e1┆robe module (ref. (10)).↲
↲
╞	┆b0┆HDLCLCP╞	┆84┆┆f0┆HDLC interface module. The module supervises the HDLC ↓
┆19┆┆93┆┆81┆┄driver ┆a1┆process┆e1┆ and performs all LCP operations on the ↓
┆19┆┆93┆┆81┆┄driver.↲
↲
╞	┆b0┆dte╞	┆84┆┆f0┆Supervisor and parent process of the DTE System. The ↓
┆19┆┆93┆┆81┆┄pro┄cess handles the DTE LCP operations (ref. (4)), some ↓
┆19┆┆93┆┆81┆┄by forwarding them to the appropriate channel process ↓
┆19┆┆93┆┆81┆┄in┄car┄nation (dte_chan<xyz>). The process also receives ↓
┆19┆┆93┆┆81┆┄LCP events and forwards these events to the NCP.↲
↲
╞	╞	┆84┆At Virtual Call (VC) establishment the process is active ↓
┆19┆┆93┆┄┄creating/starting a channel process incarnation and at ↓
┆19┆┆93┆┄┄VC removal stopping the incarnation.↲
↲
╞	╞	┆84┆In connection with dte_lcnzero the process handles the ↓
┆19┆┆93┆┄┄restart phase of the DCE/DTE interface.↲
↲
┆8c┆┄┆a9┆↓
╞	╞	┆84┆Furthermore, the dte controls the HDLC driver operation ↓
┆19┆┆93┆┄┄(ref. (9)) and sets/reacts on different modem signals. ↓
┆19┆┆93┆┄┄Being parent process the dte initializes common buffer ↓
┆19┆┆93┆┄┄pools, tables, and variables.↲
↲
╞	┆b0┆dte_access┆84┆↲
                   ┆84┆The process handles the communication to the users. ↓
┆19┆┆93┆┄┄Assignment of stream numbers and validation of user ↓
┆19┆┆93┆┄┄operations are performed by the process.↲
↲
╞	╞	┆84┆All user operations equal to an X.25 operation are for┄↓
┆19┆┆93┆┄┄warded to the appropriate channel process incarnation, ↓
┆19┆┆93┆┄┄whereas all other user operations are handled by the ↓
┆19┆┆93┆┄┄dte_access process itself.↲
↲
╞	╞	┆84┆During VC establishment the process communicates with ↓
┆19┆┆93┆┄┄the dte process in order to create/start a channel pro┄↓
┆19┆┆93┆┄┄cess incarnation.↲
↲
╞	╞	┆84┆Events concerning a specific stream, a user, or the DCE ↓
┆19┆┆93┆┄┄/DTE interface are received from either the dte process ↓
┆19┆┆93┆┄┄or a channel process incarnation and forwarded to the ↓
┆19┆┆93┆┄┄user of concern, or all users.↲
↲
╞	┆b0┆dte_hrec╞	┆84┆┆f0┆The process demuliplexes all X.25 packets received on ↓
┆19┆┆93┆┆81┆┄the hdlc line and sends the packets to the appropriate ↓
┆19┆┆93┆┆81┆┄dte_chan process incarnation or dte_lcnzero process de┄↓
┆19┆┆93┆┆81┆┄pending on the channel number. Furthermore, the process ↓
┆19┆┆93┆┆81┆┄tries to keep a specified number of input buffer at the ↓
┆19┆┆93┆┆81┆┄HDLC driver.↲
↲
╞	╞	┆84┆The demultiplexing function is performed utilizing a ↓
┆19┆┆93┆┄┄com┄mon table shared by the process and the dte process.↲
↲
╞	┆b0┆dte_lcnzer┆84┆o↲
                   ┆84┆The process handles all channel zero functions of the ↓
┆19┆┆93┆┄┄X.25 level 3 communication. The restart function/phase ↓
┆19┆┆93┆┄┄is performed in connection with the dte process and re┄↓
┆19┆┆93┆┄┄ceival of an X.25 diagnostic packet is reported to the ↓

════════════════════════════════════════════════════════════════════════
↓
┆19┆┆93┆┄┄dte process, which forwards the information furtheron to ↓
┆19┆┆93┆┄┄the NC-system (see ref. (4) and (10)).↲
↲
╞	╞	┆84┆The communication with the DCE is performed utilizing ↓
┆19┆┆93┆┄┄the HDLCLCP module, directly on output and via the ↓
┆19┆┆93┆┄┄dte_hrec process on input.↲
↲
╞	┆b0┆dte_chan╞	┆84┆┆f0┆The process handles all communication with the DCE on ↓
┆19┆┆93┆┆81┆┄X.25 level 3 except on channel zero. The dte_chan pro┄↓
┆19┆┆93┆┆81┆┄cess exists in an incarnation for every active Virtual ↓
┆19┆┆93┆┆81┆┄Call.↲
↲
╞	╞	┆84┆The process incarnation receives User operations from ↓
┆19┆┆93┆┄┄the dte_access process and furthermore communicates with ↓
┆19┆┆93┆┄┄this process and the dte process during Virtual Call es┄↓
┆19┆┆93┆┄┄tablishment and removal.↲
↲
╞	╞	┆84┆The communication to the DCE is performed utilizing the ↓
┆19┆┆93┆┄┄user interface of the HDLCLCP module ("hiding" the HDLC ↓
┆19┆┆93┆┄┄driver). Output is sent directly to the HDLCLCP whereas ↓
┆19┆┆93┆┄┄input is received through the dte_hrec process.↲
↲
╞	┆b0┆dte_pool╞	┆84┆┆f0┆The process maintains a pool of buffers, which are used ↓
┆19┆┆93┆┆81┆┄for X.25 control packets. A dte_chan process ↓
┆19┆┆93┆┆81┆┄incarnation, the dte or the dte_lcnzero process requests ↓
┆19┆┆93┆┆81┆┄a buffer, build up the X.25 packet and sends the buffer ↓
┆19┆┆93┆┆81┆┄to the HDLCLCP mo┄dule. The answer is returned directly ↓
┆19┆┆93┆┆81┆┄to the dte_pool pro┄cess. The dte_pool process is capable ↓
┆19┆┆93┆┆81┆┄of managing re┄quests with different priorities and may ↓
┆19┆┆93┆┆81┆┄put a request into a waiting queue, if no bufer is ↓
┆19┆┆93┆┆81┆┄available. The dte_pool is an incarnation of the ↓
┆19┆┆93┆┆81┆┄pool_handler process.↲
↲
╞	┆b0┆dtetest╞	┆84┆┆f0┆┆b0┆The process is not mandatory for the operation of the ↓
┆19┆┆93┆┆82┆┆82┆DTE module.┆f0┆ It is only necessary if internal testoutput ↓
┆19┆┆93┆┆82┆┄is wanted. The process allocates testoutput buffers, in┄↓
┆19┆┆93┆┆82┆┄to which a process, executing internal test, copies a test ↓
┆19┆┆93┆┆82┆┄area each time this area is full, and then the process ↓
┆19┆┆93┆┆82┆┄returns the buffer to the dtetest process.↲
↲
┆8c┆┄┆a8┆↓
╞	╞	┆84┆The dtetest process communicates with an operator via ↓
┆19┆┆93┆┄┄the console to start/stop internal test in different ↓
┆19┆┆93┆┄┄pro┄cesses, to switch test mode, and to start print (on ↓
┆19┆┆93┆┄┄the console) of internal testoutput. The process inter┄↓
┆19┆┆93┆┄┄prets the packed test data in a buffer and prints it in ↓
┆19┆┆93┆┄┄a more readable form on the console.↲
↲
╞	╞	┆84┆Furthermore, a possibility to generate test messages to ↓
┆19┆┆93┆┄┄the dte_access process and print the answer exists.↲
↲
╞	┆b0┆dteclock┆f0┆╞	┆84┆This process maintains a globale (in the DTE module) ↓
┆19┆┆93┆┆81┆┄"clock" used to timestamp test records, and is a child ↓
┆19┆┆93┆┆81┆┄of the dtetest process.↲
↲
╞	┆b0┆dtetrace╞	┆84┆┆f0┆┆b0┆The process is not mandatory for the operation of the ↓
┆19┆┆93┆┆82┆┆82┆DTE module. ┆f0┆It is only necessary if tracing of X.25 ↓
┆19┆┆93┆┆82┆┄level 3 communication is wanted.↲
↲
╞	╞	┆84┆The dtetrace process communicates with an operator ↓
┆19┆┆93┆┄┄via the console to set/change different trace vari┄↓
┆19┆┆93┆┄┄ables.↲
↲
╞	╞	┆84┆Buffers containing packed trace-data are received either ↓
┆19┆┆93┆┄┄from the dte_hrec process (trace of received packets) or ↓
┆19┆┆93┆┄┄the outtrace process (trace of transmitted packets). ↓
┆19┆┆93┆┄┄The dtetrace process prints (if required) the data on ↓
┆19┆┆93┆┄┄the console in a more readable format each time a trace ↓
┆19┆┆93┆┄┄buffer is receiv┄ed.↲
↲
╞	┆b0┆outtrace╞	┆84┆The process is not mandatory for the operation of the ↓
┆19┆┆93┆┆81┆┆82┆DTE module. ┆f0┆It is only necessary if tracing of X.25 ↓
┆19┆┆93┆┆81┆┄level 3 communication is wanted.↲
↲
╞	╞	┆84┆The only purpose of the process is to gather tracing of ↓
┆19┆┆93┆┄┄transmitted X.25 packets in one process.↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆b0┆snooper╞	┆84┆┆f0┆Parent process in the snooping system. ┆b0┆The process is ↓
┆19┆┆93┆┆82┆┆82┆not mandatory for the operation of the DTE Module. ┆f0┆It ↓
┆19┆┆93┆┆82┆┄communicates via the console with an operator to set up ↓
┆19┆┆93┆┆82┆┄parameters, to start snooping, and print snooped data. ↓
┆19┆┆93┆┆82┆┄The purpose of the snooping system is to be able to ↓
┆19┆┆93┆┆82┆┄snoop the communication to/from the dte_chan process ↓
┆19┆┆93┆┆82┆┄incarnations.↲
↲
╞	┆b0┆pick_up╞	┆84┆┆f0┆Performs the actual snooping of messages and answers, ↓
┆19┆┆93┆┆81┆┄and is a child of the snooper process.↲
↲
╞	┆84┆A more detailed description of the snooping system may be found in ↓
┆19┆┆89┆┄┄ref. (7).↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 3: Message flow of normal data.↲
┆8c┆┄┆a7┆↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 4: Message flow of interrupt data.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 5: Message flow of X.25 control packet output.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 6: Message flow at Virtual Call Set-up.↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆3.╞	PROCESS COMMUNICATION↲
↲
╞	┆84┆In this chapter the external communication as well as the communi┄↓
┆19┆┆89┆┄┄cation between the processes constituting the DTE module are de┄↓
┆19┆┆89┆┄┄scribed. In section 3.1 the operations sent to the HDLCLCP and NCP ↓
┆19┆┆89┆┄┄modules are  outlined and a short description of the DTE User In┄↓
┆19┆┆89┆┄┄terface is given. In section 3.2 the operations exchanged between ↓
┆19┆┆89┆┄┄the processes dte, dte_access, dte_hrec, dte_lcnzero, dte_chan, ↓
┆19┆┆89┆┄┄and dte_pool are described.↲
↲
╞	┆84┆The communication and function of the dtetest system, the trace ↓
┆19┆┆89┆┄┄system, and the SNOOPER module are gathered in chapter 6.↲
↲
↲
┆a1┆3.1╞	External Communication↲
↲
╞	┆84┆The communication external to the DTE module can shortly be de┄↓
┆19┆┆89┆┄┄scribed by figure 7.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 7: External Interfaces of the DTE module.↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆The DTE User Interface is a service provided by the DTE module, ↓
┆19┆┆89┆┄┄whereas the NCP - and HDLCLCP interfaces are services utilized by ↓
┆19┆┆89┆┄┄the DTE module.↲
↲
↲
┆a1┆3.1.1╞	DTE User Interface↲
↲
╞	┆84┆For a detailed description of the format and function of all user ↓
┆19┆┆89┆┄┄operations please refer to ref. (3).↲
↲
╞	┆84┆All user operations are received by the dte_access process. Some ↓
┆19┆┆89┆┄┄of the operations are returned from this process, whereas others ↓
┆19┆┆89┆┄┄are forwarded to other DTE processes. It is shown in the following ↓
┆19┆┆89┆┄┄table which process handles which user operation.↲
↲

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
↲
╞	____________________________________________________________↲
╞	! ╞	╞	!╞	╞	╞	         !↲
╞	!  ╞	╞	!             handled by process       !↲
╞	┆a1┆┆e1┆!  user operation  ╞	┆a1┆!╞	╞	╞	         !↲
┆e1┆╞	!╞	╞	!               !       !╞	         !↲
╞	!╞	╞	!  dte_access   !  dte  !   dte_chan   !↲
╞	┆a1┆┆a1┆!╞	╞	!               !       !              !↲
╞	!╞	╞	!               !       !              !↲
╞	!  dte_acc_inc_call !       +       !       !      +       !↲
╞	!  dte_call_req     !       +       !   +   !      +       !↲
╞	!  dte_change_mode  !       +       !       !      +       !↲
╞	!  dte_clear_req    !       +       !       !      +       !↲
╞	!  dte_conn_user    !       +       !       !              !↲
╞	!  dte_disc_user    !       +       !       !              !↲
╞	!  dte_rec_dedic    !       +       !       !      +       !↲
╞	!  dte_rec_gen      !       +       !       !      +       !↲
╞	!  dte_reset_req    !       +       !       !      +       !↲
╞	!  dte_send_data    !       +       !       !      +       !↲
╞	!  dte_send_intrupt !       +       !       !      +       !↲
╞	!  dte_sync_stream  !       +       !       !      +       !↲
╞	!  dte_wait_event   !       +       !       !              !↲
╞	┆a1┆!╞	╞	!               !       !              !↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
↲
╞	Table 1: Processing of DTE User operations.↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆3.1.2╞	Access to the HDLCLCP↲
↲
         ┆84┆The user interface of the HDLCLCP and the HDLC driver is nearly ↓
┆19┆┆89┆┄┄equal seen from the DTE. The HDLC driver interface is described in ↓
┆19┆┆89┆┄┄ref. (9). The only difference is that the driver has 4 main sema┄↓
┆19┆┆89┆┄┄phores, whereas the HDLCLCP only has one.↲
↲
╞	┆84┆The DTE only utilizes a subset of the services provided by the ↓
┆19┆┆89┆┄┄HDLC driver. In this section an overview of the services used are ↓
┆19┆┆89┆┄┄given. A more detailed description of how the driver is used and ↓
┆19┆┆89┆┄┄how the information received from the driver influence the oper┄↓
┆19┆┆89┆┄┄ation of the DTE module is given in chapter 4.↲
↲
╞	┆84┆Driver 'control messages' is only sent by the dte process and ↓
┆19┆┆89┆┄┄'input messages' only by the dte_hrec process. 'Output messages' ↓
┆19┆┆89┆┄┄are sent both from the processes dte, dte_lcnzero, and dte_chan ↓
┆19┆┆89┆┄┄in┄carnations. In the following table 2 the formats and contents of ↓
┆19┆┆89┆┄┄the in┄dividual messages are outlined.↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Table 2: HDLC operations utilized by the DTE module.↲

════════════════════════════════════════════════════════════════════════
↓
╞	Notes:↲
↲
╞	1)╞	┆84┆The fully formats are defined in environment HDLCENV ↓
┆19┆┆93┆┄┄(appendix B.7).↲
↲
╞	2)╞	The format of the data buffer is↲
╞	╞	        record↲
╞	╞	╞	first,last,next   : integer;↲
╞	╞	╞	x25_packet        : array (1..n) of byte;↲
╞	╞	        end;↲
╞	╞	╞	(*    3< = n< = 5  *)↲
↲
╞	3)╞	┆84┆The actual size of the input buffer is determined at ↓
┆19┆┆93┆┄┄process start up, because the X.25 user data field size ↓
┆19┆┆93┆┄┄is a process parameter of the dte process.↲
╞	╞	input buffer size = 6 + x25_head_size + x25_packet_size↲
↲
╞	4)╞	┆84┆Two types of output exist↲
↲
╞	╞	a)  ┆84┆dte user data message with an dte message header ↓
┆19┆┆97┆┄┄stacked on top. This is used to transmit X.25 DATA ↓
┆19┆┆97┆┄┄packets↲
↲
╞	╞	b)  ┆84┆dte data message containing either an X.25 CALL ↓
┆19┆┆97┆┄┄REQUEST or an X.25 CALL ACCEPTED packet↲
↲
╞	╞	The format of the latter (b) is:↲
╞	╞	         record↲
╞	╞	╞	 first,last,next   : integer;↲
╞	╞	╞	 x25_packet        : array (1..n) of byte;↲
╞	╞	         end;↲
╞	╞	╞	 (*    3 ┆a1┆<┆e1┆ n < 98  *)↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆3.1.3╞	Access to the NCP Module↲
↲
╞	┆84┆All communication with the NCP is performed by the dte process. ↓
┆19┆┆89┆┄┄NC-supervisor messages (DTE LCP operations) are either performed ↓
┆19┆┆89┆┄┄by the dte process or forwarded to a dte_chan process incarnation. ↓
┆19┆┆89┆┄┄Internal NC events are received by the dte process and this pro┄↓
┆19┆┆89┆┄┄cess requests then an event buffer from the NCP and herein packs ↓
┆19┆┆89┆┄┄the NC events and returns the buffer to the NCP. In figure 8 the ↓
┆19┆┆89┆┄┄communication with the NCP is outlined. A detail description of ↓
┆19┆┆89┆┄┄the NCP User Interface may be found in ref. (10), below is only ↓
┆19┆┆89┆┄┄mentioned the operations used by the DTE module.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 8: Message flow between the DTE module and the NCP.↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆At initialization the dte process connects to the NCP utilizing ↓
┆19┆┆89┆┄┄the operation↲
↲
╞	┆a1┆┆b0┆Message name┆e1┆:  connect_lcp↲
↲
╞	┆a1┆User fields┆e1┆ :  ╞	to NCP╞	from NCP↲
╞	╞	     u1      4        unch↲
╞	╞	     u2      7       result↲
╞	╞	     u3      -      lcp_index↲
╞	╞	     u4      3        unch↲
↲
╞	┆a1┆Data to NCP┆e1┆ :  lcp_conn_type = record↲
╞	╞	╞	╞	   first,last,next : integer;↲
╞	╞	╞	╞	   i               : bit;↲
╞	╞	╞	╞	   id              : 0..32767;↲
╞	╞	╞	╞	 end;↲
↲
╞	┆a1┆Data from NCP┆e1┆ :↲
╞	╞	     unchanged↲
↲
╞	┆a1┆Parameters┆e1┆  :  lcp_index╞	: ┆84┆value returned from the NCP and ↓
┆19┆┆a9┆┄┄used in all other communications ↓
┆19┆┆a9┆┄┄with the NCP↲
↲
╞	╞	     first,last,next: ┆84┆not used↲
↲
╞	╞	     i, id          : ┆84┆set to the DTE's lcp number (2)↲
↲
╞	╞	     result          ok   (0) : ┆84┆the DTE is connected↲
╞	╞	╞	╞	 busy (2) : ┆84┆the DTE module is not ↓
┆19┆┆b3┆┄┄con┄nected to the NC-↓
┆19┆┆b3┆┄┄system, but will con┄↓
┆19┆┆b3┆┄┄tinue normal operation↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆84┆╞	┆84┆All LCP operations are received from the NCP utilizing the ↓
┆19┆┆89┆┄┄operation↲
↲
╞	┆a1┆┆b0┆Message name┆e1┆:  wait_message↲
↲
╞	┆a1┆User fields┆e1┆ :  ╞	to NCP╞	from NCP↲
╞	╞	     u1     12        unch↲
╞	╞	     u2      7       result↲
╞	  ╞	     u3  lcp_index    unch↲
╞	╞	     u4      3        unch↲
↲
╞	┆a1┆Data to NCP┆e1┆ :  not used↲
↲
╞	┆a1┆Data from NCP┆e1┆ :↲
╞	╞	     unchanged↲
↲
╞	┆a1┆Parameters┆e1┆  :  lcp_index :  ┆84┆the value returned in the operation ↓
┆19┆┆a5┆┄┄┆b0┆connect_lcp↲
↲
╞	╞	     result    :  please refer to ref. (10)↲
↲
╞	┆84┆This message is always waiting at the NCP. The NCP returns it, ↓
┆19┆┆89┆┄┄when it has received a NC-supervisor message to the DTE. This ↓
┆19┆┆89┆┄┄message is stacked below the ┆b0┆wait_message.↲
↲

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
╞	╞	______________↲
╞	╞	!   dte lcp  !↲
╞	╞	!   message  !   = wait_message↲
╞	╞	┆a1┆!    header  !↲
↲
↲
↲
╞	╞	______________           _______________↲
╞	╞	!    NCP     !╞	     !      NC     !↲
╞	╞	!   message  !           !  supervisor !↲
╞	╞	┆a1┆!    header  !┆e1┆           ┆a1┆!    message  !┆e1┆↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
↲
╞	╞	NCP header:╞	from NCP╞	   to NCP↲
╞	╞	╞	   u1        15         unch↲
  ╞	╞	╞	   u2         7        result↲
╞	╞	╞	   u3     lcp_index     unch↲
╞	╞	╞	   u4         -         unch↲
↲
↲
┆8c┆┄┆ac┆↓
╞	┆84┆The dte process unstacks the dte lcp message header and sends it ↓
┆19┆┆89┆┄┄to the NCP, waiting the next NC-supervisor message. Then the re┄↓
┆19┆┆89┆┄┄ceived LCP operation (NC supervisor message) is performed.↲
↲
╞	┆84┆Whenever an internal event is received by the dte process an event ↓
┆19┆┆89┆┄┄buffer is requested from the NCP using the operation:↲
↲
╞	┆a1┆┆b0┆Message name┆e1┆:  request_event_buffer↲
↲
╞	┆a1┆User fields┆e1┆ :  ╞	to NCP╞	from NCP↲
╞	╞	    u1      16 ╞	  unch↲
╞	╞	    u2       7       result↲
╞	╞	    u3   lcp_index    unch↲
╞	╞	    u4       -        unch↲
↲
╞	┆a1┆Data to NCP┆e1┆ :  not used↲
↲
╞	┆a1┆Data from NCP┆e1┆ :↲
╞	╞	     not used↲
↲
╞	┆a1┆Parameters┆e1┆  :  lcp_index : ┆84┆the value returned in the operation ↓
┆19┆┆a4┆┄┄┆b0┆connect_lcp↲
↲
╞	╞	     result    : ┆84┆please refer to ref. (10)↲
↲
╞	┆84┆When the message is returned from the NCP with result ok, an event ↓
┆19┆┆89┆┄┄buffer is stacked below.↲
↲

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
╞	╞	_____________↲
╞	╞	!  dte lcp  !↲
╞	╞	!  message  !   = request_event_buffer↲
╞	╞	┆a1┆!   header  !↲
↲
↲
╞	╞	_____________           _______________↲
╞	╞	!    NCP    !╞	    !    ┆82┆event┆81┆    !↲
╞	╞	!  message  !           !   ┆82┆buffer┆81┆    !↲
╞	╞	┆a1┆!   header  !┆e1┆╞	    ┆a1┆!╞	        !↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
↲

════════════════════════════════════════════════════════════════════════
↓
╞	╞	NCP header:      from NCP╞	      to NCP↲
╞	        ╞	╞	u1        16               unch↲
                 ╞	╞	u2         7               0 (= ok)↲
╞	        ╞	╞	u3     lcp_index╞	       unch↲
╞	                    u4╞	 -               unch↲
↲
╞	┆84┆The dte lcp message header is unstacked and released and the in┄↓
┆19┆┆89┆┄┄formation in the internal event is transferred (if necessary ↓
┆19┆┆89┆┄┄packed with the event 'events lost') to the event buffer and this ↓
┆19┆┆89┆┄┄message is returned to the NCP.↲
↲
╞	┆84┆If the result is different from ok, the message header is released ↓
┆19┆┆89┆┄┄and the lost event counter is incremented by one.↲
↲
╞	┆84┆The internal event message is returned to the event pool, which is ↓
┆19┆┆89┆┄┄a module global semaphore.↲
↲
↲
┆a1┆3.2╞	Internal Communication↲
↲
╞	┆84┆All internal messages sent between processes in the DTE module are ↓
┆19┆┆89┆┄┄described. The messages are described under the receiving process. ↓
┆19┆┆89┆┄┄Furthermore, messages sent to a basic system or CENTERNET system ↓
┆19┆┆89┆┄┄process are mentioned in this section. All messages are given a ↓
┆19┆┆89┆┄┄mnemotecnic name used in the rest of this manual.↲
↲
╞	┆84┆The format used to describe a message is Real-Time Pascal and the ↓
┆19┆┆89┆┄┄following notation is used↲
↲
╞	╞	╞	-╞	not used↲
╞	╞	        unch        unchanged↲
╞	╞	        undef╞	undefined↲
↲
╞	┆84┆In subsections 3.2.1.1 messages received are described and in ↓
┆19┆┆89┆┄┄subsec┄tions 3.2.1.2 messages sent.↲
↲
╞	┆84┆All communication with the test, trace and debug systems are out┄↓
┆19┆┆89┆┄┄lined in chapter 6.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆3.2.1╞	Process dte↲
↲
╞	┆84┆The following messages are handled by the dte process↲

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
↲
╞	name╞	╞	sending           receiving        section↲
╞	╞	╞	process           process↲
↲
╞	chan_start          dte_access        dte              3.2.1.1↲
╞	diag_recv           dte_lcnzero       dte              3.2.1.1↲
╞	int_event           all               dte              3.2.1.1↲
╞	restart_end         dte_lcnzero       dte              3.2.1.1↲
╞	restart_start╞	dte_lcnzero       dte╞	     3.2.1.1↲
         break_mess                            dte              3.2.1.1↲
↲
╞	trace_sync          dte               outtrace         3.2.1.2↲
╞	get_clock           dte               timer            3.2.1.2↲
╞	short_delay         dte               timer            3.2.1.2↲
↲
╞	x25_input╞	╞	dte_hrec╞	        dte              3.2.1.1↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
↲
↲
┆a1┆3.2.1.1╞	Messages received↲
↲
╞	┆a1┆┆b0┆Message name┆e1┆   :  chan_start↲
↲
╞	┆a1┆Message format┆e1┆ :  ↲
╞	╞	        message╞	answer↲
╞	╞	u1         13        unch↲
╞	╞	u2          7       result↲
╞	╞	u3     stream_no     unch↲
╞	╞	u4          1      sem_index↲
↲
╞	╞	buf         -          -↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The message is used by the dte_access process to allocate/start a ↓
┆19┆┆89┆┄┄dte_chan process incarnation for Virtual Call Set-up. Below the ↓
┆19┆┆89┆┄┄dte_access message header is a user dte_call_req stacked. The mes┄↓
┆19┆┆89┆┄┄sage header is returned with u4 set to the index of the associated ↓
┆19┆┆89┆┄┄dte_chan incarnation's main semaphore. The user dte_call_req is ↓
┆19┆┆89┆┄┄forwarded to the dte_chan incarnation's main semaphore.↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆a1┆Result┆e1┆:↲
╞	ok                (0): only header returned, u4 = sem_index↲
╞	busy              (2): ┆84┆no resources in the dte, either logical ↓
┆19┆┆a0┆┄┄channels or dte_chan incarnations. Stacked  ↓
┆19┆┆a0┆┄┄message returned and u4 is unchanged.↲
╞	dte_restarted    (98): ┆84┆the DTE has been restarted. Stacked message ↓
┆19┆┆a0┆┄┄returned and u4 is unchanged.↲
↲
╞	┆a1┆┆b0┆Message name┆e1┆:    diag_recv↲
↲
╞	┆a1┆Message format┆e1┆:↲
╞	╞	       message╞	answer↲
╞	╞	u1       228         unch↲
╞	╞	u2         7        result↲
╞	╞	u3         -         unch↲
╞	╞	u4         2         unch↲
↲
╞	╞	buf   diag_type      unch↲
↲
╞	╞	diag_type = record↲
╞	╞	╞	    diag_code : byte;↲
╞	╞	╞	    expl      : array (0..2) of byte;↲
╞	╞	╞	  end;↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆An X.25 DIAGNOSTIC packet has been received by the dte_lcnzero ↓
┆19┆┆89┆┄┄pro┄cess. Information about this event and the data field is for┄↓
┆19┆┆89┆┄┄warded to the dte process using this message.↲
↲
╞	┆84┆The dte generates an NC event, increments a statistic counter and ↓
┆19┆┆89┆┄┄returns the message.↲
↲
╞	┆a1┆Result┆e1┆:↲
╞	ok╞	(0): message processed properly↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	┆a1┆Message name┆e1┆  : int_event↲
↲
╞	┆a1┆Message format┆e1┆:↲
╞	╞	      message↲
╞	╞	u1       -↲
╞	╞	u2       -↲
╞	╞	u3       -↲
╞	╞	u4      10↲
↲
╞	╞	buf   event_rec↲
↲
╞	╞	event_rec    = record↲
╞	╞	╞	       head       : ev_head;↲
╞	╞	╞	       data       : event_data;↲
╞	╞	╞	     end;↲
↲
╞	╞	ev_head      = record↲
╞	╞	╞	       event_type : byte;↲
╞	╞	╞	       bytecount  : byte;↲
╞	╞	╞	     end;↲
↲
╞	╞	event_data   = array (1..event_length) of byte;↲
↲
╞	╞	event_length = 87;↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The message passes an event to the dte process. The event is for┄↓
┆19┆┆89┆┄┄warded to the NCP (please refer to subsection 3.1.3) and the mes┄↓
┆19┆┆89┆┄┄sage is returned to the internal event pool. This event pool is ↓
┆19┆┆89┆┄┄represented by the module global semaphore event_pool.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	┆a1┆Message name┆e1┆   : restart_end↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       message╞	answer↲
╞	╞	u1       248         unch↲
╞	╞	u2   conn_seq_no    result↲
╞	╞	u3      reason       unch↲
╞	╞	u4         2         unch↲
↲
╞	╞	buf  cd_buf_type╞	 unch↲
↲
╞	╞	cd_buf_type =  record↲
╞	╞	     ╞	       cause,↲
╞	╞	╞	       diag_code : byte;↲
╞	╞	╞	     end;↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The dte_lcnzero process indicates to the dte process that a re┄↓
┆19┆┆89┆┄┄start phase is ended, or a timeout (DTE waiting restart confirma┄↓
┆19┆┆89┆┄┄tion) has occured.↲
↲
╞	┆84┆conn_seq_no is the last received (by dte_lcnzero) connection ↓
┆19┆┆89┆┄┄sequence number.↲
↲
╞	┆84┆reason indicates the event that causes the submission of the ↓
┆19┆┆89┆┄┄message:↲
↲
╞	        0 :  DTE is the initiator of the restart phase↲
╞	        1 :  DCE is the initiator↲
╞	       10 :  a restart timeout has occured↲
↲
╞	┆a1┆Result┆e1┆:↲
╞	ok    (0) : message processed properly↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆a1┆┆b0┆Message name┆e1┆   : break_mess↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       message↲
╞	╞	u1        -↲
╞	╞	u2        -↲
╞	╞	u3        -↲
╞	╞	u4       15↲
↲
╞	╞	buf    break_type↲
↲
╞	╞	break_type = record↲
╞	╞	╞	     name       : alfa;↲
╞	╞	╞	     break_code : integer;↲
╞	╞	╞	     vers       : byte;↲
╞	╞	╞	   end;↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆A child process (dte_chan, dte_lcnzero, dtetrace) has entered its ↓
┆19┆┆89┆┄┄exception procedure and indicates this to the dte process by ↓
┆19┆┆89┆┄┄sending this message. name is the name of the failing process ↓
┆19┆┆89┆┄┄and vers is the version identification if any. Break_code is the ↓
┆19┆┆89┆┄┄type of exception, except the value 90 which is used to break a ↓
┆19┆┆89┆┄┄process in order to get the last generated testoutput. In the lat┄↓
┆19┆┆89┆┄┄ter case the message is sent from the dtetest process. If the mes┄↓
┆19┆┆89┆┄┄sage is received from the dte_chan process a ┆b0┆sync_mess┆f0┆ (subsec┄tion ↓
┆19┆┆89┆┆81┆┄3.2.5.1) may be stacked below.↲
 ↲
╞	┆84┆The message is returned to the dte global known semaphore ↓
┆19┆┆89┆┄┄breaksem.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	┆a1┆Message name┆e1┆   : x25_input↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       received answer↲
╞	╞	u1            1↲
╞	╞	u2            0↲
╞	╞	u3            -↲
╞	╞	u4            6↲
↲
╞	╞	buf     x25_buf_type↲
↲
╞	╞	x25_buf_type = record↲
╞	╞	╞	       first,last,next: integer;↲
╞	╞	╞	       head           : x25_head;↲
╞	╞	╞	       data           : array (first+3..last);↲
╞	╞	╞	     end;↲
↲
╞	╞	x25_head     = packed record↲
╞	╞	╞	       q_bit,↲
╞	╞	╞	       d_bit,↲
╞	╞	╞	       m128,↲
╞	╞	╞	       m8              : bit;↲
╞	╞	╞	       lcgn            : bit4;↲
╞	╞	╞	       lcn ╞	   : byte;↲
╞	╞	╞	       packet_id╞	   : byte;↲
╞	╞	╞	     end;↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The buffer is received from the dte_hrec process. It contains a ↓
┆19┆┆89┆┄┄received X.25 packet on a logical channel, which not yet has been ↓
┆19┆┆89┆┄┄set up. The packet type is identified and if it is an INCOMING ↓
┆19┆┆89┆┄┄CALL a Call Set-up phase is entered. All other packets are for┄↓
┆19┆┆89┆┄┄warded to the associated dte_chan process incarnation, and in case ↓
┆19┆┆89┆┄┄the channel is not set up the dte either clears the channel or ↓
┆19┆┆89┆┄┄dis┄cards the packet.↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆3.2.1.2╞	Messages sent↲
↲
╞	┆84┆The next three messages are both sent and received by the dte ↓
┆19┆┆89┆┄┄process. It is internal communication or external communication ↓
┆19┆┆89┆┄┄not described in section 3.1.↲
↲
┆b0┆╞	┆a1┆Message name┆e1┆   : trace_sync↲
↲
╞	┆a1┆Message format┆a1┆┆e1┆ : ↲
╞	╞	       message sent╞	   answer recv.↲
╞	╞	u1          255            unch↲
╞	╞	u2           -             unch↲
╞	╞	u3           -╞	       unch↲
╞	╞	u4           -   ╞	       unch↲
↲
╞	╞	buf          -╞	       unch↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The message is sent to the outtrace process to synchronize the ↓
┆19┆┆89┆┄┄two processes in case the Trace System has to be removed.↲
↲
┆b0┆╞	┆a1┆Message name┆e1┆   : get_clock↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       message sent    answer recv.↲
╞	╞	u1╞	   1╞	       unch↲
╞	╞	u2╞	   -╞	         0↲
╞	╞	u3           -               0↲
╞	╞	u4           -             unch↲
↲
╞	╞	buf╞	   -          delaytype↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	╞	delaytype = record↲
╞	╞	╞	    prev_date : coded_date;↲
╞	╞	╞	    prev_time : coded_time;↲
╞	╞	╞	    prev_secs : coded_secs;↲
╞	╞	╞	    inc       : packed record↲
╞	╞	╞	╞	        days  : 0..63;↲
╞	╞	╞	╞	        hours : 0..31;↲
╞	╞	╞	╞	        mins  : 0..63;↲
╞	╞	╞	╞	        secs  : 0..63;↲
╞	╞	╞	╞	        msecs : 0..1023;↲
╞	╞	╞	╞	      end;↲
╞	╞	╞	  end;↲
↲
╞	┆84┆The type definition of coded_date, coded_time, and coded_secs may ↓
┆19┆┆89┆┄┄be found in the RTP standard environment.↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The dte process requests the timer process to return the date and ↓
┆19┆┆89┆┄┄time. These are used as time stamp on console output.↓
↲
↲
┆b0┆╞	┆a1┆Message name┆e2┆┆e1┆   : short_delay↲
↲
╞	┆a1┆Message format┆e1┆ :↲
╞	╞	       message sent     answer recv.↲
╞	╞	u1           5              unch↲
╞	╞	u2          60             result↲
╞	╞	u3          10╞	          0↲
╞	╞	u4           5╞	        unch↲
↲
╞	╞	buf╞	   -╞	        unch↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The dte process requests the timer process to return the message ↓
┆19┆┆89┆┄┄after 60 * 2 ** 10 msecs. (= 61,44 secs). The result may either be ↓
┆19┆┆89┆┄┄ok or regretted, but the dte does not regret this message. The ↓
┆19┆┆89┆┄┄timer periode is used in the hdlc connection and modem signals set ↓
┆19┆┆89┆┄┄up phases, to give a suitable periode between retries.↲
↲
╞	┆a1┆Result┆e1┆:↲
╞	┆84┆ok                (0) : message processed properly↲
╞	sys_not_processed (1) : message regretted.↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆┆a1┆3.2.2╞	Process dte_access↲
↲
╞	┆84┆The following internal messages are handled by the dte_access ↓
┆19┆┆89┆┄┄process.↲
↲

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
╞	name╞	╞	sending           receiving       section↲
╞	╞	╞	process╞	        process↲
↲
╞	clear_event         dte_chan╞	        dte_access      3.2.2.1↲
╞	inc_call            dte_chan╞	        dte_access      3.2.2.1↲
╞	inc_s_event╞	dte_chan          dte_access      3.2.2.1↲
╞	inc_u_event╞	dte_chan          dte_access      3.2.2.1↲
╞	restart_end╞	dte               dte_access      3.2.2.1↲
╞	restart_start       dte╞	        dte_access      3.2.2.1↲
╞	stream_cleared      dte_chan╞	        dte_access      3.2.2.1↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
↲
╞	┆84┆Besides these messages the dte_access process receives all user ↓
┆19┆┆89┆┄┄messages (ref. (3)) and either reacts on these or forwards them ↓
┆19┆┆89┆┄┄to a dte_chan process incarnaion (please refer to subsection ↓
┆19┆┆89┆┄┄3.1.1).↲
↲
↲
┆a1┆3.2.2.1╞	Messages received↲
↲
╞	┆a1┆┆b0┆Message name┆e1┆   : clear_event↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       message╞	answer↲
╞	╞	u1       22          unch↲
╞	╞	u2       15╞	result↲
╞	╞	u3    stream_no      unch↲
╞	╞	u4        0╞	 unch↲
↲
╞	╞	buf   ch_ev_data     unch↲
↲
╞	╞	ch_ev_data = record↲
╞	╞	╞	     first,last,next : integer;↲
╞	╞	╞	     gen_u_event     : boolean;↲
╞	╞	╞	     type_event,↲
╞	╞	╞	     cause,↲
╞	╞	╞	     diag_code       : byte;↲
╞	╞	╞	   end;↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆Clearing of the stream is started. If gen_u_event is true the user ↓
┆19┆┆89┆┄┄is informed about the clearing of the stream, including a cause ↓
┆19┆┆89┆┄┄and a diagnostic code (diag_code) if any.↲
↲
╞	┆a1┆Result┆e1┆:↲
╞	ok             (0) : message processed properly↲
╞	fct_not_allw  (12) : function not allowed in this state↲
╞	dte_restarted (98) : dte_access in restart phase↲
↲
╞	┆84┆If the dte_access process is awaiting a user accept/reject of an ↓
┆19┆┆89┆┄┄incoming call on this stream, the dte_chan buffer indicating the ↓
┆19┆┆89┆┄┄call (please see ┆b0┆inc_call ┆f0┆below) is stacked below and returned ↓
┆19┆┆89┆┆81┆┄together with the ┆b0┆clear_event┆f0┆ message.↲
↲
╞	┆a1┆┆b0┆Message name┆e1┆   : inc_call↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       message╞	answer↲
╞	╞	u1       19          unch↲
╞	╞	u2       15         result↲
╞	╞	u3    sem_index    stream_no/unch↲
╞	╞	u4        0╞	 unch↲
↲
╞	╞	buf   see below      unch↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆An X.25 INCOMING CALL packet is received by a dte_chan process ↓
┆19┆┆89┆┄┄incarnation. The dte_access process is informed and call_data is ↓
┆19┆┆89┆┄┄contained in the message (see below) and transferred to the user, ↓
┆19┆┆89┆┄┄together with an allocated stream number.↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆The message is very complex, it actually consists of three mes┄↓
┆19┆┆89┆┄┄sages:↲
↲

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
╞	╞	________________↲
╞	╞	!              !↲
╞	╞	!  internal 1  !↲
╞	╞	┆a1┆!╞	     !↲
↲
↲
╞	╞	________________          _______________↲
╞	╞	!╞	     !          !╞	          !↲
╞	╞	!  internal 2  !╞	      !    data 2   !↲
╞	╞	┆a1┆!              !┆e1┆╞	      ┆a1┆!             !↲
↲
↲
╞	╞	________________          _______________↲
╞	╞	!              !          !             !↲
╞	╞	!     user     !          !    data 3   !↲
╞	╞	┆a1┆!╞	     !┆e1┆          ┆a1┆!             !↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
↲
╞	┆84┆The message header 'internal 1' is described above and is returned ↓
┆19┆┆89┆┄┄immediately with result set to:↲
↲
╞	╞	 0 : ┆84┆action performed, message not stacked,↲
╞	╞	     u3 = allocated stream number↲
↲
╞	╞	 2 : busy = no internal resources in dte_access,↲
╞	╞	     message stacked (internal 1, internal 2, user),↲
╞	╞	     u3 = unch↲
↲
╞	╞	98 : dte_access in restart phase, message stacked↲
╞	╞	     (internal 1, internal 2, user)↲
╞	╞	     u3 = unch↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆The message internal 2 has the following user fields:↲
↲
╞	╞	message╞	       answer↲
╞	    u1╞	   19╞	        unch ↲
╞	    u2╞	   15            result2↲
╞	    u3╞	    -╞	       stream_no/diag_code/unch↲
╞	    u4        0╞	        unch↲
↲
╞	    buf╞	call_adr_buf     accept_data↲
↲
╞	call_adr_buf = record↲
╞	╞	       first,last,next : integer;↲
╞	╞	       user_address    : ┆84┆packed array (1..(xhead_call-6) ↓
┆19┆┆ac┆┄┄*2) of bit4;↲
╞	╞	       pkt_head        : dte_head_type;↲
╞	╞	       addr_lgth       : byte;↲
╞	╞	       dte_adr         : array (1..14) of byte;↲
╞	╞	     end;↲
↲
╞	xhead_call = 10     (* please see appendix B.2 *)↲
↲
╞	dte_head_type = packed record↲
╞	╞	        q_bit,↲
╞	╞	        d_bit   : bit;↲
╞	╞	        ?       : 0..63;↲
╞	╞	        ?       : byte;↲
╞	╞	        ?       : 0..7;↲
╞	╞	        m_bit   : bit;↲
╞	╞	        ?       : 0..15;↲
╞	╞	      end,↲
↲
╞	┆84┆This message is hung up in the dte_access process until the user ↓
┆19┆┆89┆┄┄accepts or rejects the received call-set up or a ┆b0┆clear_event┆f0┆ is ↓
┆19┆┆89┆┆81┆┄received from the dte_chan process incarnation. In the first case ↓
┆19┆┆89┆┆81┆┄the message is returned stacked with the user accept message and ↓
┆19┆┆89┆┆81┆┄if the user has requested any X.25 facilities, this request is ↓
┆19┆┆89┆┆81┆┄transferred from the user accept message to the data buffer ↓
┆19┆┆89┆┆81┆┄'data 2', which at return has the following format:↲

════════════════════════════════════════════════════════════════════════
↓
╞	╞	accept_data = record↲
╞	╞	╞	      first,last,next : integer;↲
╞	╞	╞	      user_address    : ┆84┆packed array ↓
┆19┆┆b5┆┄┄(1..(xhead_call-6) *2 ↓
┆19┆┆b5┆┄┄of bit4;↲
╞	╞	╞	      pkt_head        : dte_head_type;↲
╞	╞	╞	      addr_lgth       : byte;↲
╞	╞	╞	      dte_adr         : array (1..14) of byte;↲
╞	╞	╞	      faci_length     : byte;↲
╞	╞	╞	      facilities      : ┆84┆array (xhead_call + ↓
┆19┆┆b5┆┄┄19..last) of byte;↲
╞	╞	╞	    end;↲
↲
╞	┆84┆In the second case the message is returned with user fields set ↓
┆19┆┆89┆┄┄according to the user reject. The data is not changed. In the ↓
┆19┆┆89┆┄┄third case the message is returned, stacked below the ┆b0┆clear_event┆f0┆ ↓
┆19┆┆89┆┆81┆┄message, and the header and data part are unchanged. The following ↓
┆19┆┆89┆┆81┆┄table gives an overview of the possibilities.↲
↲
╞	  u2 = result2╞	    message stack╞	╞	u3↲
↲
╞	  0  (ok)╞	╞	  mess stacked with╞	       stream_no↲
╞	    ╞	         ╞	  user accept↲
↲
╞	  28 (buf_lgth_err)╞	  mess stacked with╞	       stream_no↲
╞	╞	╞	  user accept↲
↲
╞	  91 (user_reject)╞	  mess not stacked ╞	     diagnostic code↲
↲
╞	  98 (dte_restarted)  mess not stacked╞	╞	unch↲
↲
╞	     unch╞	╞	  mess stacked below╞	unch↲
╞	╞	╞	  ┆b0┆clear_event┆f0┆ message↲
↲
╞	┆84┆The message 'user' is a general input buffer containing call data ↓
┆19┆┆89┆┄┄to the user. The return of this message to the user is an indica┄↓
┆19┆┆89┆┄┄tion of the receival of an X.25 INCOMING CALL packet. The format ↓
┆19┆┆89┆┄┄of the message is described in ref. (3).↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆a1┆┆b0┆Message name┆e1┆   : inc_s_event↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       message╞	answer↲
╞	╞	u1        20         unch↲
╞	╞	u2        15        result↲
╞	          u3    stream_no╞	 unch↲
╞	╞	u4         0╞	 unch↲
↲
╞	╞	buf   ch_ev_data     unch↲
↲
╞	╞	ch_ev_data = record↲
╞	╞	╞	     first,last,next : integer;↲
╞	╞	╞	     gen_u_event     : boolean;↲
╞	╞	╞	     type_event,↲
╞	╞	╞	     cause,↲
╞	╞	╞	     diag_code       : byte;↲
╞	╞	╞	   end;↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The message contains a stream event (reset, data lost, inter┄rupt ↓
┆19┆┆89┆┄┄lost) which depending on the value of gen_u_event is transferred ↓
┆19┆┆89┆┄┄to the user in a user wait_event message.↲
↲
╞	┆a1┆Result┆e1┆:↲
╞	ok             (0) : message processed properly↲
╞	fct_not_allw  (12) : function not allowed in this state↲
╞	dte_restarted (98) : dte_access in restart phase↲
↲
↲
╞	┆b0┆┆a1┆Message name┆e1┆  : inc_u_event↲
↲
╞	┆a1┆Message format┆e1┆:↲
╞	╞	      message╞	answer↲
╞	╞	 u1      21╞	 unch↲
╞	╞	 u2      15╞	result↲
╞	╞	 u3   user_no╞	 unch↲
╞	╞	 u4       0╞	 unch↲
↲
╞	╞	 buf  ch_ev_data╞	 unch↲

════════════════════════════════════════════════════════════════════════
↓
╞	╞	ch_ev_data = record↲
╞	╞	╞	     first,last next : integer;↲
╞	╞	╞	     gen_u_event     : boolean;↲
╞	╞	╞	     type_event,↲
╞	╞	╞	     cause,↲
╞	╞	╞	     diag_code       : byte;↲
╞	╞	╞	   end;↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The message indicates a user event (incoming call lost) which is ↓
┆19┆┆89┆┄┄transferred to the user in a user wait_event message.↲
↲
╞	┆a1┆Result┆e1┆:↲
╞	ok             (0) : ok↲
╞	dte_restarted (98) : dte_access in restart phase↲
↲
╞	┆a1┆┆b0┆Message name┆e1┆   : restart_end↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       message╞	answer↲
╞	╞	u1       248╞	 unch↲
╞	╞	u2        15╞	   0↲
╞	╞	u3   ok/timeout╞	 unch↲
╞	╞	u4         8╞	 unch↲
↲
╞	╞	buf  cd_buf_type╞	 unch↲
↲
╞	          cd_buf_type = record↲
╞	╞	                cause,↲
╞	╞	                diag_code  : byte;↲
╞	╞	              end;↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The dte process indicates the ending of a restart phase or a time┄↓
┆19┆┆89┆┄┄out. The user is informed by the return of a user wait_event mes┄↓
┆19┆┆89┆┄┄sage with event_type 'dte_restarted' or 'disconnected', respecti┄↓
┆19┆┆89┆┄┄vely. If u3 = timeout (10) the dte_access stays in the dte_restart ↓
┆19┆┆89┆┄┄phase. The message is returned immediately.↲
↲
┆8c┆┄┆a7┆↓
┆b0┆╞	┆a1┆Message name┆e1┆   : restart_start↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       message╞	answer↲
╞	╞	u1       252╞	 unch↲
╞	╞	u2        15╞	   0↲
╞	╞	u3      cause╞	 unch↲
╞	╞	u4         8╞	 unch↲
↲
╞	╞	buf  cd_buf_type     unch↲
↲
╞	╞	cd_buf_type = record↲
╞	╞	╞	      cause,↲
╞	╞	╞	      diag_code  : byte;↲
╞	╞	╞	    end;↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The dte process indicates the start of a restart phase (cause = 2) ↓
┆19┆┆89┆┄┄or the disconnection of the hdlc line (cause = 1). The dte_access ↓
┆19┆┆89┆┄┄process transfers this information to the user utilizing the ↓
┆19┆┆89┆┄┄wait_event message and enters the state dte_restart. The ┆b0┆re┄↓
┆19┆┆89┆┆81┆┆82┆start_start┆f0┆ message is returned immediately.↲
↲
╞	┆a1┆┆b0┆Message name┆e1┆   : stream_cleared↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       message╞	answer↲
╞	╞	u1        23  ╞	 unch↲
╞	╞	u2        15╞	result↲
╞	╞	u3    stream_no╞	 unch↲
╞	╞	u4         0╞	 unch↲
↲
╞	╞	buf        -╞	   -↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆A dte_chan process incarnation indicates the end of a clear phase. ↓
┆19┆┆89┆┄┄All user buffers are returned and the state of the stream is ↓
┆19┆┆89┆┄┄changed to idle.↲
↲
┆8c┆┄┆a7┆↓
╞	┆a1┆Result┆e1┆:↲
╞	ok             (0) : message processed properly↲
╞	fct_not_allw  (12) : function not allowed in this state↲
╞	dte_restarted (98) : dte_access in restart phase↲
↲
↲
┆a1┆3.2.3╞	Process dte_hrec↲
↲
╞	┆84┆The following internal messages are handled by the dte_hrec ↓
┆19┆┆89┆┄┄process.↲
↲

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
╞	name╞	     sending╞	     receiving╞	     section↲
╞	╞	     process╞	     process↲
↲
╞	set_ass_chan     dte               dte_hrec╞	     3.2.3.1↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
↲
↲
┆a1┆3.2.3.1╞	Messages received↲
↲
┆b0┆╞	┆a1┆Message name┆e1┆   : set_ass_chan↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       message╞	answer↲
╞	╞	u1         6╞	 unch↲
╞	╞	u2╞	 7   ╞	result↲
╞	╞	u3         -╞	 unch↲
╞	╞	u4         8╞	 unch↲
↲
╞	╞	buf  sup_mess_type╞	 unch↲
↲
╞	╞	sup_mess_type = record↲
╞	╞	╞	        x25_var   : x25_rec_type;↲
╞	╞	╞	        in_buf    : byte;↲
╞	╞	╞	      end;↲
↲
╞	╞	x25_rec_type = record↲
╞	╞	╞	       ltc,↲
╞	╞	╞	       htc      : channel_type;↲
╞	╞	╞	       ltci,↲
╞	╞	╞	       htci     : integer;↲
╞	╞	╞	     end;↲
↲
┆8c┆┄┆aa┆↓
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The assigned logical channel interval, the lowest and highest ↓
┆19┆┆89┆┄┄index to the dte_chan process semaphore array, and the number of ↓
┆19┆┆89┆┄┄input buffers at the HDLC driver are set/updated.↲
↲
╞	┆84┆The maximum number of hdlc input buffers is set to 10 in the ↓
┆19┆┆89┆┄┄environment DTEENV (appendix B.5).↲
↲
╞	┆84┆The consistens of the parameters is checked and if not ok, the ↓
┆19┆┆89┆┄┄message is returned with 'format_error'. The following rules have to ↓
┆19┆┆89┆┄┄be observed:↲
↲
╞	1)╞	htci-ltci ┆a1┆<┆e1┆ max channels↲
╞	2)╞	ltci ┆a1┆<┆e1┆ htci↲
╞	3)╞	n_buf ┆a1┆<┆e1┆ max_inbufs  (=10)↲
↲
╞	┆a1┆Result┆e1┆:↲
╞	ok          (0) : variable updated↲
╞	format_err (20) : variable error↲
↲
↲
┆a1┆3.2.4╞	Process dte_lcnzero↲
↲
╞	┆84┆The following internal/external messages are handled by the ↓
┆19┆┆89┆┄┄dte_lcnzero process.↲
↲

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
╞	name╞	     sending╞	     receiving╞	     section↲
╞	╞	     process╞	     process↲
↲
╞	hdlc_conn      dte╞	 ╞	     dte_lcnzero╞	     3.2.4.1↲
╞	hdlc_disc╞	     dte╞	╞	     dte_lcnzero╞	     3.2.4.1↲
╞	restart_start  dte╞	╞	     dte_lcnzero╞	     3.2.4.1↲
↲
╞	l_rel_delay    dte_lcnzero╞	     timer╞	     3.2.4.2↲
╞	regret╞	     dte_lcnzero╞	     timer╞	     3.2.4.2↲
↲
╞	x25_input      dte_hrec╞	     dte_lcnzero╞	     3.2.4.1↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆3.2.4.1╞	Messages received↲
↲
┆b0┆╞	┆a1┆Message name┆e1┆   : hdlc_conn↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       message╞	answer↲
╞	╞	u1         4╞	 unch↲
╞	╞	u2         7╞	result↲
╞	╞	u3   conn_seq_no     unch↲
╞	╞	u4         8╞	 unch↲
↲
╞	╞	buf╞	 -╞	 unch↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The HDLC line has been connected. The internal state is changed to ↓
┆19┆┆89┆┄┄hdlc_active.↲
↲
╞	┆84┆An X.25 RESTART REQUEST is expected to have been transmitted to ↓
┆19┆┆89┆┄┄the DCE from the dte process, so the timer t20 is started. Connec┄↓
┆19┆┆89┆┄┄tion number is set to the value of the u3 field.↲
↲
╞	┆a1┆Result┆e1┆:↲
╞	ok╞	(0) : message processed properly↲
↲
┆b0┆╞	┆a1┆Message name┆e1┆  : hdlc_disc↲
↲
╞	┆a1┆Message format┆e1┆: ↲
╞	╞	      message╞	answer↲
╞	╞	u1        8╞	 unch↲
╞	╞	u2        7╞	result↲
╞	╞	u3        0╞	 unch↲
╞	╞	u4        8╞	 unch↲
↲
╞	╞	buf       -╞	 unch↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The hdlc line has been discconnected. The internal state is set to ↓
┆19┆┆89┆┄┄net_down. If timer t20 is running, it is stopped by a regret ↓
┆19┆┆89┆┄┄message.↲
↲
╞	┆a1┆Result┆e1┆:↲
╞	ok╞	 (0): message processed properly↲
↲
┆b0┆╞	┆a1┆Message name┆e1┆  : restart_start↲
↲
╞	┆a1┆Message format┆e1┆: ↲
╞	╞	      message╞	answer↲
╞	╞	u1      252╞	 unch↲
╞	╞	u2    ╞	7╞	result↲
╞	╞	u3   diag_code╞	 unch↲
╞	╞	u4        8╞	 unch↲
↲
╞	╞	buf╞	-╞	 unch↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆A restart phase is requested by the dte process. The internal sta┄↓
┆19┆┆89┆┄┄te is set to dte_restart. An X.25 RESTART REQUEST is transmit┄↓
┆19┆┆89┆┄┄ted to the DCE and timer t20 is started. Octet 4 in the RESTART ↓
┆19┆┆89┆┄┄REQUEST is set to 0 and octet 5 to diag_code (u3 field).↲
↲
╞	┆a1┆Result┆e1┆:↲
╞	ok╞	 (0) : message processed properly↲
╞	rejected  (17) : ┆84┆the DTE/DCE interface is already in the restart ↓
┆19┆┆9a┆┄┄phase.↲
↲
┆b0┆╞	┆a1┆Message name┆e1┆   : x25_input↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       received answer↲
╞	╞	u1            1↲
╞	╞	u2            0↲
╞	╞	u3╞	    -↲
╞	╞	u4╞	    6↲
↲
╞	╞	buf    x25_buf_type↲

════════════════════════════════════════════════════════════════════════
↓
╞	╞	x25_buf_type = record↲
╞	╞	╞	       first,last,next : integer;↲
╞	╞	╞	       head╞	  ╞	 : x25_head;↲
╞	╞	╞	       data╞	╞	 : ┆84┆array ↓
┆19┆┆be┆┄┄(first+3..last) ↓
┆19┆┆be┆┄┄of byte;↲
╞	╞	╞	     end;↲
↲
╞	╞	x25_head     = packed record↲
╞	╞	╞	       q_bit,↲
╞	╞	╞	       d_bit,↲
╞	╞	╞	       m128,↲
╞	╞	╞	       m8              : bit;↲
╞	╞	╞	       lcgn╞	   : bit4;↲
╞	╞	╞	       lcn╞	   : byte;↲
╞	╞	╞	       packet_id╞	   : byte;↲
╞	╞	╞	     end;↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The buffer is received from the dte_hrec process. It contains a ↓
┆19┆┆89┆┄┄received X.25 packet on logical channel zero (lcgn = 0 and lcn = ↓
┆19┆┆89┆┄┄0). The packet type is identified and put into one of four groups:↲
↲
╞	a)╞	┆b0┆restart indication:↲
╞	╞	┆84┆either the restart phase is ended or a new is initiated ↓
┆19┆┆93┆┄┄by the DCE. In the first case timer t20 is stopped and ↓
┆19┆┆93┆┄┄the internal state is changed to dte_ready. In the last ↓
┆19┆┆93┆┄┄case a RESTART CONFIRMATION is transmitted to the DCE. ↓
┆19┆┆93┆┄┄In both cases the dte process is informed↲
↲
╞	b)╞	┆84┆┆b0┆restart confirmation:↲
╞	╞	┆84┆the restart phase is ended by the DCE. The dte process ↓
┆19┆┆93┆┄┄is informed and timer t20 is stopped and the internal ↓
┆19┆┆93┆┄┄state is changed to dte_ready↲
↲
╞	c)╞	┆b0┆diagnostic:↲
╞	╞	┆84┆the dte process is informed↲
↲
╞	d)╞	┆b0┆all others:↲
╞	╞	┆84┆the packet is just discarded↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆3.2.4.2╞	Messages sent↲
↲
╞	┆84┆The next two messages are used in connection with timer t20 and ↓
┆19┆┆89┆┄┄are both sent and received by the dte_lcnzero process.↲
↲
╞	┆a1┆┆b0┆Message name┆e1┆   : l_rel_delay↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       message sent╞	   answer received↲
╞	╞	u1           9╞	╞	unch↲
╞	╞	u2╞	   7╞	         result↲
╞	╞	u3╞	   -╞	╞	  0↲
╞	╞	u4╞	   5╞	╞	unch ↲
↲
╞	╞	buf      delaytype╞	╞	  ?↲
↲
╞	╞	delaytype  = record↲
╞	╞	╞	     prev_date : coded_date;↲
╞	╞	╞	     prev_time : coded_time;↲
╞	╞	╞	     prev_secs : coded_secs;↲
╞	╞	╞	     inc╞	     : packed record↲
╞	╞	╞	╞	         days  : 0..63;↲
╞	╞	╞	╞	         hours : 0..31;↲
╞	╞	╞	╞	         mins  : 0..63;↲
╞	╞	╞	╞	         secs  : 0..63;↲
╞	╞	╞	╞	         msecs : 0..1023;↲
╞	╞	╞	╞	       end;↲
╞	╞	╞	   end;↲
↲
╞	┆84┆The type definition of coded_date, coded_time, and coded_secs may ↓
┆19┆┆89┆┄┄be found in the RTP standard environment.↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The dte_lcnzero process requests the timer process to return the ↓
┆19┆┆89┆┄┄message after the time specified in the record inc. The default ↓
┆19┆┆89┆┄┄value used in the X.25 recommendation is 180 seconds.↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆a1┆Result┆e1┆:↲
╞	ok                (0) : the timer period has elapsed↲
╞	sys_not_processed (1) : the message has been regretted↲
↲
┆b0┆╞	┆a1┆Message name┆e1┆   : regret↲
↲
╞	┆a1┆Message format┆e1┆ :↲
╞	╞	       message sent     answer received↲
╞	╞	u1╞	   12╞	╞	unch↲
╞	╞	u2╞	    7╞	         result↲
╞	╞	u3╞	    -╞	╞	unch↲
╞	╞	u4╞	    -╞	╞	unch↲
↲
╞	╞	buf╞	    -╞	╞	unch↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆If the dte_lcnzero process wants to stop timer t20 this message is ↓
┆19┆┆89┆┄┄sent to the timer process. The answer is always expected to have ↓
┆19┆┆89┆┄┄the result 'ok'.↲
↲
╞	┆a1┆Result┆e1┆:↲
╞	ok        (0) : message processed properly↲
↲
↲
┆a1┆3.2.5╞	Process dte_chan↲
↲
╞	┆84┆The following internal/external messages are handled by the ↓
┆19┆┆89┆┄┄dte_chan process.↲
↲

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
╞	name╞	     sending╞	     receiving╞	     section↲
╞	╞	     process╞	     process↲
↲
╞	restart_start  dte╞	╞	     dte_chan╞	     3.2.5.1↲
╞	sync_mess      dte╞	╞	     dte_chan╞	     3.2.5.1↲
↲
╞	timer_book     dte_chan╞	     timeout╞	     3.2.5.2↲
╞	timer_update   dte_chan╞	     timeout╞	     3.2.5.2↲
↲
╞	x25_input╞	     dte_hrec╞	     dte_chan╞	     3.5.2.1↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
↲

════════════════════════════════════════════════════════════════════════
↓
┆84┆╞	┆84┆Besides these messages the dte_chan process receives the following ↓
┆19┆┆89┆┄┄DTE User messages↲
↲

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
╞	╞	-  dte_call_req↲
╞	╞	-  dte_change_mode↲
╞	╞	-  dte_clear_req↲
╞	╞	-  dte_rec_dedic↲
╞	╞	-  dte_reset_req↲
╞	╞	-  dte_send_data↲
╞	╞	-  dte_send_intrupt↲
╞	╞	-  dte_sync_stream↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
↲
↲
┆a1┆3.2.5.1╞	Messages received↲
↲
┆b0┆╞	┆a1┆Message name┆e1┆   : restart_start↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       message╞	answer↲
╞	╞	u1       252╞	 unch↲
╞	╞	u2        15╞	result↲
╞	╞	u3         -╞	 unch↲
╞	╞	u4╞	 8╞	 unch↲
↲
╞	╞	buf╞	 -╞	 unch↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The DCE/DTE interface has entered a restart phase. All user mes┄↓
┆19┆┆89┆┄┄sages are returned with result 'not_processed' (9) and all timers ↓
┆19┆┆89┆┄┄stopped. The dte_chan process then enters the stopping phase util┄↓
┆19┆┆89┆┄┄izing the ┆b0┆sync_mess┆f0┆ to synchronize with the dte process, before it ↓
┆19┆┆89┆┆81┆┄is removed.↲
↲
╞	┆a1┆Result┆e1┆:↲
╞	ok            (0) : message processed properly↲
╞	not_processed (9) : message received in stopping phase↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	┆a1┆Message name┆e1┆   : sync_mess↲
↲
╞	┆a1┆Message format┆e1┆ :↲
╞	╞	       message╞	answer↲
╞	╞	u1        0╞	 unch↲
╞	╞	u2╞	7╞	result↲
╞	╞	u3╞	-╞	 cause↲
╞	╞	u4       11╞	 unch↲
↲
╞	╞	buf  sync_buf_type╞	 unch↲
↲
╞	╞	sync_buf_type = record↲
╞	╞	╞	        ch_index     : integer;↲
╞	╞	╞	        lcn_index╞	 : byte;↲
╞	╞	╞	        lcg╞	 : bit4;↲
╞	╞	╞	        lcn╞	 : byte;↲
╞	╞	╞	        user_no╞	 : byte;↲
╞	╞	╞	        local_uaddr╞	 : local_adr_type;↲
╞	╞	╞	        default_w,↲
╞	╞	╞	        max_w╞	 : bit3;↲
╞	╞	╞	        rr-timer,↲
╞	╞	╞	        ack_timer╞	 : integer;↲
╞	╞	╞	      end;↲
↲
╞	╞	local_adr_type = record↲
╞	╞	╞	         user_lgth╞	   : byte;↲
╞	╞	╞	         user_address  : bcd_adr_type;↲
╞	╞	╞	       end,↲
↲
╞	╞	bcd_adr_type = packed array (1..max_u_adr) of bit4;↲
↲
╞	╞	max_u_adr = 5;↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆This message is received at the sync semaphore. When received in ↓
┆19┆┆89┆┄┄the state xidle the buffer contains different parameter values to ↓
┆19┆┆89┆┄┄be used for the actual incarnation of an X.25 logical channel. The ↓
┆19┆┆89┆┄┄parameters are:↲

════════════════════════════════════════════════════════════════════════
↓
╞	ch_index╞	     : index to chan_proc_table, used by dte↲
╞	lcn_index╞	     : index to lcn_table, used by dte↲
╞	lcg╞	     : logical group number, used by dte and dte_chan↲
╞	lcn╞	     : logical channel number, used by dte and dte_chan↲
╞	user_no╞	     : actual user number, used by dte_chan↲
╞	local_uaddr    : local user address, used by dte_chan↲
╞	default_w      : default X.25 window size, used by dte_chan↲
╞	max_w          : max window size allowed, used by dte_chan↲
╞	rr_timer╞	     : idle timer value, used by dte_chan↲
╞	ack_timer╞	     : acknowledge timer value, used by dte_chan↲
↲
╞	┆84┆Furthermore, the message is used to synchronize the dte and ↓
┆19┆┆89┆┄┄dte_chan process in the stopping phase of the last one (see ↓
┆19┆┆89┆┄┄subsection 4.2.7).↲
↲
╞	┆84┆The cause field identifies the parts of the stoppng phase:↲
╞	╞	     cause = 3 : stopping phase initiated↲
╞	╞	╞	 = 0 : stopping phase ended↲
↲
╞	┆a1┆Result┆e1┆:↲
╞	ok╞	(0)  : message processed properly↲
↲
╞	┆a1┆┆e1┆┆a1┆┆b0┆Message name┆e1┆   : x25_input↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       received answer↲
╞	╞	u1      ╞	    1↲
╞	╞	u2╞	    0↲
╞	╞	u3╞	    -↲
╞	╞	u4╞	    6↲
↲
╞	╞	buf     x25_buf_type↲
↲
╞	╞	x25_buf_type = record↲
╞	╞	╞	       first,last,next : integer;↲
╞	╞	╞	       head            : x25_head;↲
╞	                           data    ╞	   : ┆84┆array (first+3..last) ↓
┆19┆┆b6┆┄┄of byte;↲
╞	╞	╞	     end;↲

════════════════════════════════════════════════════════════════════════
↓
╞	╞	x25_head = packed record↲
╞	╞	╞	   q_bit,↲
╞	╞	╞	   d_bit,↲
╞	╞	╞	   m128,↲
╞	╞	╞	   m8        : bit; ↲
╞	╞	╞	   lcgn      : bit4;↲
╞	╞	╞	   lcn       : byte;↲
╞	╞	╞	   packet_id : byte;↲
╞	╞	╞	 end;↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The buffer is received from the dte_hrec process. It contains a ↓
┆19┆┆89┆┄┄received X.25 packet on the X.25 logical channel handled by this ↓
┆19┆┆89┆┄┄dte_chan process incarnation. The packet type is identified and ↓
┆19┆┆89┆┄┄depending of this and the internal state a specified action is ↓
┆19┆┆89┆┄┄per┄formed.↲
↲
↲
┆a1┆3.2.5.2╞	Messages sent↲
↲
╞	┆84┆The next two messages concerns the communication with the timeout ↓
┆19┆┆89┆┄┄process. The messages are sent by calling one of the two external ↓
┆19┆┆89┆┄┄procedures: timerbook, timerupdate. For a more detailed descrip┄↓
┆19┆┆89┆┄┄tion than given below, please refer to ref. (6).↲
↲
╞	┆a1┆┆b0┆Message name┆e1┆   : timer_book↲
↲
╞	┆a1┆Message format┆e1┆ : ↲
╞	╞	       top message╞	╞	 stacked message↲
╞	╞	    message    answer╞	message      answer↲
╞	╞	u1     7╞	      unch╞	   5          unch↲
╞	╞	u2     7       result            -         result↲
╞	╞	u3     -        unch             -          unch↲
╞	╞	u4     5        unch╞	   -          unch↲
↲
╞	╞	buf    -       timers╞	updates       unch↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	╞	timers  = record↲
╞	╞	╞	  obj    : integer;↲
╞	╞	╞	end;↲
↲
╞	╞	updates = record↲
╞	╞	╞	  index,↲
╞	╞	╞	  count,↲
╞	╞	╞	  obj    : integer;↲
╞	╞	╞	end;↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The dte_chan process requests a timer entry and start of the re┄↓
┆19┆┆89┆┄┄quested timer. If ok the stacked message is returned with result ↓
┆19┆┆89┆┄┄'result_ok' (1). After the time period specified in count (number ↓
┆19┆┆89┆┄┄of ticks) the top message is returned with result 'result_ok' (1).↲
↲
╞	┆84┆The parameter obj is used to identify the timer in the ↓
┆19┆┆89┆┄┄dte_chan/timeout communication.↲
↲
╞	┆84┆Index is set by timeout at booking time and is used later on at ↓
┆19┆┆89┆┄┄each new update of the timer as a reference number by the timeout ↓
┆19┆┆89┆┄┄process.↲
↲
╞	┆a1┆Result┆e1┆:↲
╞	result_ok     (1) : message processed properly↲
╞	result_full   (2) : no timer entry available↲
↲
┆b0┆╞	┆a1┆Message name┆e1┆   : timer_update↲
↲
╞	┆a1┆Message format┆e1┆ :↲
╞	╞	       message╞	answer↲
╞	╞	u1        4╞	 unch↲
╞	╞	u2        7╞	result↲
╞	╞	u3        -╞	 unch↲
╞	╞	u4        -╞	 unch↲
↲
╞	╞	buf    updates╞	 unch↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	╞	updates = record↲
╞	╞	╞	  index,↲
╞	╞	╞	  count,↲
╞	╞	╞	  obj     : integer;↲
╞	╞	╞	end;↲
↲
╞	┆a1┆Function┆e1┆:↲
╞	┆84┆The dte_chan process requests the timeout process to update an ↓
┆19┆┆89┆┄┄already started timer. If count = 0 the dte_chan process stops the ↓
┆19┆┆89┆┄┄timer by requesting it returned immediately. For specification of ↓
┆19┆┆89┆┄┄index and obj, please refer to ┆b0┆timer_book┆f0┆.↲
↲
╞	┆a1┆Result┆e1┆:↲
╞	result_ok     (1) : message processed properly↲
╞	result_wrong  (3) : no timer message pending↲
╞	result_obj    (4) : wrong obj used↲
╞	result_index  (5) : index out of range↲
↲
↲
┆a1┆3.2.6╞	Process dte_pool.↲
↲
╞	┆84┆As already mentioned (in chapter 2) the dte_pool process is an in┄↓
┆19┆┆89┆┄┄carnation of the pool_handler process. So for a detailed descrip┄↓
┆19┆┆89┆┄┄tion of messages please refer to ref. (5).↲
↲

════════════════════════════════════════════════════════════════════════
↓
«index» formatlinie til RC manualer↲
┆14┆┆b3┆↲
┆14┆┆b3┆┆06┆- ┆0b┆ -↲
┆a1┆↓
┆a1┆4.╞	PROCESS DESCRIPTIONS.↲
↲
╞	┆84┆Section 4.1 gives some general information which is common to a ↓
┆19┆┆89┆┄┄number of DTE processes, whereas the following sections (4.2-4.6) ↓
┆19┆┆89┆┄┄describe the processes one by one.↲
↲
╞	┆84┆The actual process descriptions cover the following aspects.↲
↲
┆b0┆╞	- process parameters┆f0┆ (subsection 4.x.1)↲
 ╞	    ┆84┆The process head is shown and the parameters are described. ↓
┆19┆┆8d┆┄┄Please note that frozen VAR parameters (!) are read-only ↓
┆19┆┆8d┆┄┄parameters.↲
↲
╞	┆b0┆- states┆f0┆ (subsection 4.x.2)↲
╞	    ┆84┆A description is given of the possible values of state ↓
┆19┆┆8d┆┄┄variables in the process. This description can include a state ↓
┆19┆┆8d┆┄┄transition graph or table.↲
↲
┆b0┆╞	- semaphores and reference variables┆f0┆ (subsection 4.x.3)↲
╞	    ┆84┆The local semaphores (excl. process parameters) and the ↓
┆19┆┆8d┆┄┄reference variables are described.↲
↲
╞	┆b0┆- data structures┆f0┆ (subsection 4.x.4)↲
╞	     ┆84┆A description of important data structures is given.↲
↲
┆b0┆╞	- semaphores and message flow┆f0┆ (subsection 4.x.5)↲
╞	     ┆84┆An outline of the flow of messages to and from the process is ↓
┆19┆┆8e┆┄┄shown. The use of the main semaphore and additional semapho-↓
┆19┆┆8e┆┄┄res (incl. buffer pools) is illustrated.↲
↲
┆b0┆╞	- overview of process operation┆f0┆ (subsection 4.x.6)↲
╞	     ┆84┆A short description of the internal structure and work of the ↓
┆19┆┆8e┆┄┄process is given.↲
↲
┆b0┆╞	- special techniques┆f0┆ (subsection 4.x.7 and on)↲
             ┆84┆If any special implementation techniques or methods are used ↓
┆19┆┆8d┆┄┄these are described.↲
↲
╞	┆84┆Please refer to chapter 2 for an overall description of the ↓
┆19┆┆89┆┄┄processes.↲
↲
↲
┆8c┆┄┆ab┆↓
┆a1┆4.1╞	General Information.↲
↲
↲
┆a1┆4.1.1╞	Common Data Structures.↲
↲
↲
┆a1┆4.1.1.1╞	User Table.↲
↲
╞	┆84┆Each user connected to the DTE is described by an entry in the ↓
┆19┆┆89┆┄┄user_table. Two processes operate on this table, dte and ↓
┆19┆┆89┆┄┄dte_access. One operation on the table is to find a given user and ↓
┆19┆┆89┆┄┄for this purpose the procedure ┆b0┆found_user┆f0┆ (subsection 4.1.2.3) is ↓
┆19┆┆89┆┆81┆┄defined. An access semaphore (user_key) is associated with the ↓
┆19┆┆89┆┆81┆┄table. The process which at a given moment 'owns' the message ╞	↓
┆19┆┆89┆┆81┆┄(key) queued at the semaphore, has the rights to read and write ↓
┆19┆┆89┆┆81┆┄in the table.↲
↲
╞	┆84┆Each entry in the table is of type↲
↲
╞	   user_desc = record↲
╞	                 user_state╞	          : u_state_type;↲
╞	                 local_uaddr╞	          : bcd_adr_type;↲
                          accept_range,↲
╞	                 user_streams,↲
╞	                 lost_stream_event,↲
╞	                 lost_user_event╞	: byte;↲
╞	                 user_event_rec╞	: dte_event_type;↲
╞	                 general_bsem,↲
                          w_event_bsem╞	          : semaphore;↲
╞	               end;↲
↲
╞	user_state╞	: ┆84┆Describes the state (free, w_resc, idle, ↓
┆19┆┆9f┆┄┄active) of the entry/associated user. Please ↓
┆19┆┆9f┆┄┄refer to subsection 4.3.2 for a description ↓
┆19┆┆9f┆┄┄of the individual states.↲
↲
╞	local_uaddr╞	: ┆84┆Contains the user address (X.25 sub ad┄↓
┆19┆┆9f┆┄┄dress). See subsection 4.1.6.↲
↲
╞	accept_range╞	: ┆84┆See subsection 4.1.6.↲
↲
┆8c┆┄┆a9┆↓
╞	user_streams╞	: ┆84┆The number of streams for this user.↲
↲
╞	lost_stream_event╞	: ┆84┆Number of streams with lost events.↲
↲
╞	lost_user_event╞	: ┆84┆Number of lost user events.↲
↲
╞	user_event_rec╞	: ┆84┆Last received user event containing event ↓
┆19┆┆9f┆┄┄type, cause and diagnostic.↲
↲
╞	general_bsem╞	: ┆84┆Semaphore at which general input buffers are ↓
┆19┆┆9f┆┄┄queued.↲
↲
╞	w_event_bsem╞	: ┆84┆Semaphore at which wait_event buffers are ↓
┆19┆┆9f┆┄┄queued.↲
↲
↲
┆a1┆4.1.1.2╞	Semaphore Area for dte_chan<xxx>.↲
↲
╞	┆84┆In the dte process two tables, containing semaphore pointers to ↓
┆19┆┆89┆┄┄the main semaphores of the dte_chan incarnations, are defined. ↓
┆19┆┆89┆┄┄These two tables (hrec_table and int_table) are process parameters ↓
┆19┆┆89┆┄┄to the dte_hrec and dte_access process, respectively. In these ↓
┆19┆┆89┆┄┄processes they are used to route messages to the right dte_chan ↓
┆19┆┆89┆┄┄incarnation.↲
↲
╞	┆84┆In dte_hrec the index to the table is calculated from the logical ↓
┆19┆┆89┆┄┄channel number (see subsection 4.1.5). If the associated dte_chan ↓
┆19┆┆89┆┄┄incarnation is in state xidle the semaphore pointer points to the ↓
┆19┆┆89┆┄┄main semaphore of the dte process. This dynamical change is per┄↓
┆19┆┆89┆┄┄formed by the dte process. A snap shot is given below in figure 9.↲
↲
╞	┆84┆In dte_access the stream number is used as index to stream_table, ↓
┆19┆┆89┆┄┄which contains a semaphore pointer (chanproc_sem) to the associa┄↓
┆19┆┆89┆┄┄ted dte_chan incarnation. This pointer is assigned to the value of ↓
┆19┆┆89┆┄┄int_table(index) at stream initialization. Index is returned by ↓
┆19┆┆89┆┄┄the dte process in a chan_start answer. A snap shot is given below ↓
┆19┆┆89┆┄┄in figure 9.↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
┆06┆Figure 9. Snap shot of routing pointers.↲
↲
↲
┆a1┆┆81┆↓
┆a1┆4.1.1.3╞	x25_param_type.↲
↲
╞	┆84┆A call and return parameters to the X.25 procedures ┆b0┆code_x25┆f0┆ (sub┄↓
┆19┆┆89┆┆81┆┄section 4.1.2.1) and ┆b0┆dce_x25┆f0┆ (subsection 4.1.2.1) is of type ↓
┆19┆┆89┆┆82┆┄x25_param_type. This parameter contains all the necessary parame┄↓
┆19┆┆89┆┆82┆┄ters to code or decode an X.25 packet.↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	x25_param_type = record↲
╞	                   xlcg         : bit4;↲
                            xlcn         : byte;↲
╞	                   xpacket_id╞	  : packet_id_type;↲
╞	                   qbit,↲
╞	                   dbit,↲
╞	                   mbit╞	  : bit;↲
╞	                   spr,↲
╞	                   sps,↲
╞	                   rpr,↲
╞	                   rps╞	  : bit3;↲
╞	                   octet4,↲
╞	                   octet5╞	  : byte;↲
╞	                 end;↲
↲
╞	xlcg╞	╞	: ┆84┆Logical group number in the X.25 packet ↓
┆19┆┆9f┆┄┄header.↲
↲
╞	xlcn╞	╞	: ┆84┆Logical channel number in the X.25 packet ↓
┆19┆┆9f┆┄┄header.↲
↲
╞	xpacket_id╞	: ┆84┆Packet identificator.↲
↲
╞	qbit,dbit,mbit╞	: q, d and m bit in the X.25 packet header.↲
↲
╞	spr, sps╞	╞	: ┆84┆PR and PS numbers to be written in the X.25 ↓
┆19┆┆9f┆┄┄packet head, that has to be transmitted to ↓
┆19┆┆9f┆┄┄the DCE.↲
↲
╞	rpr, rps╞	╞	: ┆84┆PR and PS numbers read in the X.25 packet ↓
┆19┆┆9f┆┄┄head received from the DCE.↲
↲
╞	octet4╞	╞	: Octet four in some X.25 packets.↲
↲
╞	octet5╞	╞	: Octet five in some X.25 packets.↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.1.1.4╞	Zones.↲
↲
╞	┆84┆In the processes dte, dte_lcnzero a standard zone (outzone) is ↓
┆19┆┆89┆┄┄used to write error messages and other information on the console. ↓
┆19┆┆89┆┄┄For definition and use of the zone please refer to ref. (15).↲
↲
↲
┆a1┆4.1.2╞	Common or General Procedures.↲
↲
↲
┆a1┆4.1.2.1╞	X.25 Procedures.↲
↲
╞	┆84┆In order easely to operate on X.25 packets from different processes ↓
┆19┆┆89┆┄┄7 procedures are defined:↲
↲
╞	   - code_x25↲
╞	   - dec_x25↲
╞	   - init_x25faci↲
╞	   - check_x25faci↲
╞	   - check_facispec↲
╞	   - init_window↲
╞	   - w_algorithm↲
↲
╞	┆84┆code_x25 and dec_x25 is used to code and decode an X.25 header ↓
┆19┆┆89┆┄┄and sometimes octet 4 and 5 in the packets. They have the formats↲
↲
┆b0┆╞	   PROCEDURE code_x25 (↲
╞	      VAR msg╞	     : reference;↲
╞	      pfirst╞	     : integer;↲
╞	      dte╞	               : boolean;↲
╞	      VAR x25_param      : x25_param_type↲
╞	      packet_lgth        : integer↲
╞	      );↲
↲
┆b0┆╞	   FUNCTION dec_x25 (↲
╞	      VAR msg╞	     : reference;↲
╞	      pfirst             : integer;↲
╞	      dte╞	               : boolean;↲
╞	      VAR x25_param      : x25_param_type↲
╞	      VAR packet_lgth    : integer↲
╞	      ) : packet_result;↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	- ┆84┆msg is a reference to either the buffer in which the packet has ↓
┆19┆┆8b┆┄┄to be coded in or the buffer in which the packet is received in.↲
╞	- ┆84┆pfirst is a pointer to the first byte of the packet.↲
         - ┆84┆dte specifies whether the function has to be DTE (true) or DCE ↓
┆19┆┆8b┆┄┄(false).↲
╞	- x25_param is described in subsection 4.1.1.3.↲
╞	┆84┆- packet_lgth is the packet length including the head.↲
↲
╞	┆84┆┆b0┆code_x25┆f0┆ makes up the packet according to the parameters, special ↓
┆19┆┆89┆┆81┆┄x25_param.xpacket_id, and ┆b0┆dec_x25┆f0┆ returns the fields in the para┄↓
┆19┆┆89┆┆82┆┄meters and the result in packet_result (see appendix B.3).↲
↲
╞	┆84┆To handle the X.25 facilities three procedures are defined:↲
↲
┆b0┆╞	   FUNCTION init_x25faci (↲
╞	      VAR x25_ref╞	       : reference;↲
╞	      VAR faci_start,↲
╞	          faci_last,↲
╞	          index╞	       : integer;↲
╞	      VAR standard,↲
                   more             : boolean↲
               ) : boolean;↲
↲
┆b0┆╞	   FUNCTION check_x25faci (↲
╞	      VAR x25_ref         : reference;↲
               faci_start,↲
               faci_last            : integer;↲
               VAR index            : integer;↲
               VAR standard,↲
                   more             : boolean;↲
               VAR faci_size        : byte;↲
               VAR facilities       : array (1..4) of byte↲
               ) : faci_result_type;↲
↲
            ┆b0┆FUNCTION check_facispec (↲
               facility,↲
               default_faci,↲
               spec_faci            : byte↲
               ) : boolean;↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆┆b0┆init_x25faci┆f0┆ is used to initialize the variables faci_start, ↓
┆19┆┆89┆┆81┆┄faci_last, index, standard and more.↲
         - ┆84┆index points to the next facility↲
         - ┆84┆standard is true if the last returned facility was an standard ↓
┆19┆┆8b┆┄┄X.25 facility.↲
         - ┆84┆more is true if there is more facilities.↲
↲
         ┆84┆At return from ┆b0┆check_x25faci┆f0┆ the variables are updated and fa┄↓
┆19┆┆89┆┆81┆┄cilities contains the just read facility, faci_size the number of ↓
┆19┆┆89┆┆81┆┄octets defined for the facilit┄y and the result is specified as the ↓
┆19┆┆89┆┆81┆┄result of the function.↲
↲
╞	┆b0┆┆84┆check_facispec┆f0┆ is used to check that the negotiation of a facility ↓
┆19┆┆89┆┆81┆┄is towards the default value (default_faci). The parameter facili┄↓
┆19┆┆89┆┆81┆┄ty is the new value and spec_faci the current value.↲
↲
╞	┆84┆To support the X.25 window mechanism two procedures are defined:↲
↲
┆b0┆╞	    PROCEDURE init_window (↲
                VAR window_rec      : window_rec_desc;↲
╞	       queue_use,↲
                reset_only          : boolean↲
                );↲
↲
┆b0┆╞	   FUNCTION w_algorithm (↲
                packet_type         : packet_id_type;↲
                mode                : transmode_type;↲
                VAR p_r,↲
                    p_s             : bit3;↲
                VAR window_rec      : window_rec_type;↲
                VAR return_buf      : byte↲
                ) : boolean;↲
↲
╞	┆84┆┆b0┆init_window┆f0┆ is call to initialize the variables in window_rec, ↓
┆19┆┆89┆┆81┆┄containing lower window edge for receiving/sending, next P(S) to ↓
┆19┆┆89┆┆81┆┄sent, last received P(S) and number of input buffers. The ↓
┆19┆┆89┆┆81┆┄procedure is called when the call set-up or reset phase is ended.↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆┆b0┆w_algorithm┆f0┆ is call every time an RR, RNR or DATA packet is either ↓
┆19┆┆89┆┆81┆┄received or has to be sent (specified with mode). The variables in ↓
┆19┆┆89┆┆81┆┄window_rec is updated and return_buf specifies (at receival) the ↓
┆19┆┆89┆┆81┆┄number of acknowledged packets. The variables p_r and p_s either ↓
┆19┆┆89┆┆81┆┄are the values to be written in the packet (call values) or val┄↓
┆19┆┆89┆┆81┆┄ues read in the packet (return values). If the function return with ↓
┆19┆┆89┆┆81┆┄true the values were ok and the packet can either be sent or is ↓
┆19┆┆89┆┆81┆┄received ok.↲
↲
↲
┆a1┆4.1.2.2╞	Modem Signals Handling.↲
↲
╞	┆84┆In order to handle the modem signals two external procedures are ↓
┆19┆┆89┆┄┄defined:↲
↲
┆b0┆╞	   FUNCTION clear_modem (↲
               VAR reset_ref      : reference;↲
               VAR hdlc_semp,↲
                   hardwait       : ! sempointer;↲
               VAR modem_signal   : byte↲
               ) : boolean;↲
↲
┆b0┆╞	   FUNCTION set_modem (↲
               VAR reset_ref      : reference;↲
               VAR hdlc_semp,↲
                   hardwait       : ! sempointer;↲
               VAR modem_signal   : byte;↲
               test_modem         : boolean;↲
               version            : byte;↲
               ) : boolean;↲
↲
╞	┆84┆Both procedures operate on the variable modem_signal, which has to ↓
┆19┆┆89┆┄┄be interpreted as a bit string:↲
↲

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
╞	╞	_________________________↲
╞	╞	┆a1┆   !  !  !  !  !  !  !   ↲
╞	╞	╞	╞	╞	DCD↲
╞	╞	╞	╞	╞	DSR↲
╞	╞	╞	╞	╞	SQD↲
╞	╞	╞	╞	╞	RI↲
╞	╞	╞	╞	╞	RTS↲
╞	╞	╞	╞	╞	DTR↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
↲
┆8c┆┄┆ab┆↓
╞	┆84┆The procedure ┆b0┆clear_modem┆f0┆ clears the two signals DTR and RTS.↲
↲
╞	┆84┆The procedure ┆b0┆set_modem┆f0┆ first sets the signal DTR, then waits ↓
┆19┆┆89┆┆81┆┄(maximum 1 sec) on DSR setting, then sets the signal RTS and at ↓
┆19┆┆89┆┆81┆┄last waits (maximum 2 secs) on DCD setting before returning. These ↓
┆19┆┆89┆┆81┆┄two waits can be suspended by calling the procedure with ↓
┆19┆┆89┆┆81┆┄test_modem equal to false.↲
↲
╞	┆84┆reset_ref holds a message used to the hdlc operations, hdlc_semp ↓
┆19┆┆89┆┄┄is the semaphore pointer to the HDLCLCP and hardwait to the answer ↓
┆19┆┆89┆┄┄semaphore of the message.↲
↲
↲
┆a1┆4.1.2.3╞	User Table Operations.↲
↲
╞	┆84┆In order to find a specified user in the user_table one procedure ↓
┆19┆┆89┆┄┄is defined:↲
┆b0┆╞	   FUNCTION found_user (↲
╞	      opcode             : byte;↲
               bcd_nos            : bcd_adr_type;↲
               VAR user_no        : byte;↲
               VAR user_table     : u_table_type↲
               ) : boolean;↲
↲
╞	┆84┆The function is called in order to find a specified user ↓
┆19┆┆89┆┄┄(bcd_nos). If the request is to find a user for an INCOMING CALL ↓
┆19┆┆89┆┄┄(opcode = inc_call), then the result is successful depending on ↓
┆19┆┆89┆┄┄the particular matching (please refer to section 4.1.6) of the ↓
┆19┆┆89┆┄┄sub_address contained in the called dte address.↲
↲
╞	   opcode╞	╞	: ┆84┆Either inc_call (X.25 INCOMING CALL) or ↓
┆19┆┆9f┆┄┄dte_disc_user (user disconnect message).↲
↲
╞	   bcd_nos ╞	: User identification.↲
↲
╞	   user_no╞	: ┆84┆At return the index to the user_table, if ↓
┆19┆┆9f┆┄┄user is found.↲
↲
╞	   user_table╞	: Pointer to actual user_table.↲
↲
↲
┆8c┆┄┆a9┆↓
┆a1┆4.1.2.4╞	Error Text Procedures.↲
↲
╞	┆84┆To support error message writing, two procedures are defined, ┆b0┆er┄↓
┆19┆┆89┆┆81┆┆82┆ror_text┆f0┆ and ┆b0┆error_report┆f0┆. ┆b0┆error_text┆f0┆ operates on an output zone ↓
┆19┆┆89┆┆83┆┄to write the error message in text form, whereas ┆b0┆error_report┆f0┆ uses ↓
┆19┆┆89┆┆84┆┄the procedure trace to write a single integer and maybe the u-↓
┆19┆┆89┆┆84┆┄fields of a message.↲
↲
┆b0┆╞	   PROCEDURE error_text (↲
╞	      VAR out            : zone;↲
               fatal              : boolean;↲
               basic,↲
               no                 : byte;↲
               digit              : integer;↲
               name               : alfa;↲
               text               : array (1..80) of char;↲
               text length,↲
               process_vers       : byte↲
               );↲
↲
╞	┆84┆If basic = 0, no specifies the error text↲
↲
 ╞	   no = 0╞	: link error↲
╞	      = 1 : create error↲
               = 2 : pool increase error↲
               = 3 : pool init error↲
↲
╞	and name contains either a process or pool name.↲
↲
╞	┆84┆If basic >0 different output types are defined.↲
         Text is written follow by↲
↲
╞	   basic = 1 : the byte value of digit↲
                  = 2 : the integer value of digit↲
                  = 3 : name↲
                  = 4 : nothing.↲
↲
╞	┆84┆If fatal is true the procedure ends by calling ┆b0┆panic┆f0┆ with the pro┄↓
┆19┆┆89┆┆81┆┄cess_vers as parameter. process_vers is a process version number.↲
↲
┆8c┆┄┆a8┆↓
┆b0┆╞	   PROCEDURE error_report (↲
               proc_id,↲
               error_inf          : byte;↲
               mess,↲
               stop               : boolean;↲
               VAR mess_ref       : reference↲
               );↲
↲
╞	┆84┆The procedure calls ┆b0┆trace┆f0┆ with the parameter 'proc_id * 256 + ↓
┆19┆┆89┆┆81┆┄error_inf'. If mess is true, the u-fields of the message hanging ↓
┆19┆┆89┆┆81┆┄on mess_ref is printed too. If stop is true the procedure ends by ↓
┆19┆┆89┆┆81┆┄calling ┆b0┆panic┆f0┆ with the value 1.↲
↲
╞	┆84┆The different error messages are described in chapter 5.↲
↲
↲
┆a1┆4.1.2.5╞	Tracing Procedures.↲
↲
╞	┆84┆For tracing purpose three procedures are defined, ┆b0┆init_trace, ↓
┆19┆┆89┆┆81┆┆82┆end_trace┆f0┆ and ┆b0┆tracing.↲
↲
╞	┆84┆All three procedures request a buffer from the pool trace_buf ↓
┆19┆┆89┆┄┄(subsection 4.1.3), set the trace fields and return it to the ↓
┆19┆┆89┆┄┄dtetrace process (section 6.1).↲
↲
╞	┆84┆┆b0┆init_trace┆f0┆ generates a message, which provoke the dtetrace pro┄cess ↓
┆19┆┆89┆┆81┆┄to write the date, time and 'trace start' on the console and ↓
┆19┆┆89┆┆81┆┄┆b0┆end_trace┆f0┆ the date, time and 'trace stopped'. The procedure ┆b0┆trac┄↓
┆19┆┆89┆┆83┆┆82┆ing┆f0┆ copies the X.25 packet to a trace buffer.↲
↲
┆b0┆╞	   PROCEDURE init_trace (↲
               VAR trace_rec      : trace_type;↲
               VAR trace_buf      : ph_type↲
               );↲
↲
┆b0┆╞	   PROCEDURE end_trace (↲
               VAR trace_rec      : trace_type;↲
               VAR trace_buf      : ph_type↲
               );↲
↲
┆8c┆┄┆a8┆↓
┆b0┆╞	   PROCEDURE tracing (↲
               VAR dref           : reference;↲
               mode               : trace_tmode;↲
               VAR trace_rec      : trace_type;↲
               VAR trace_buf      : ph_type↲
               );↲
↲
╞	   trace_rec        : ┆84┆Variable containing a buffer request message ↓
┆19┆┆9f┆┄┄and the answer semaphore.↲
↲
╞	   trace_buf        : Trace buffer pool.↲
↲
╞	   dref             : ┆84┆Holds the message containing the X.25 ↓
┆19┆┆9f┆┄┄packet.↲
↲
╞	   mode             : ┆84┆Specifies either send (xmit) or receive ↓
┆19┆┆9f┆┄┄(recv).↲
↲
╞	┆84┆All three procedures wait on an empty buffer if no one is pres┄↓
┆19┆┆89┆┄┄ent.↲
↲
↲
┆a1┆4.1.2.6╞	Internal Test Procedures.↲
↲
╞	┆84┆In each process performing internal test a procedure of the fol┄↓
┆19┆┆89┆┄┄lowing form is defined.↲
↲
┆b0┆╞	   PROCEDURE otest (↲
╞	      oper               : 0..15;↲
╞	      (* maybe parameters *)↲
╞	      );↲
↲
╞	┆84┆This procedure produces the actual test records. Whenever the in┄↓
┆19┆┆89┆┄┄ternal test area is full a test buffer is requested from the test ↓
┆19┆┆89┆┄┄pool (testsem) and if ok the procedure ┆b0┆copy_test┆f0┆ is called to copy ↓
┆19┆┆89┆┆81┆┄the test area to the buffer and reset the pointers. For a detailed ↓
┆19┆┆89┆┆81┆┄description please refer to section 6.2.↲
↲
↲
┆8c┆┄┆a7┆↓
┆a1┆4.1.3╞	Buffer Pools.↲
↲
╞	┆84┆As already mentioned the DTE uses the pool_handler system (ref. ↓
┆19┆┆89┆┄┄(5)) to support pool handling.↲
↲
╞	A buffer pool is defined by the type:↲
↲
╞	   ph_type = record↲
╞	               key         : semaphore;↲
                        buffer_sem  : semaphore;↲
                        bpool       : bst;↲
                        prio        : prtable;↲
                      end;↲
↲
╞	   key                   : Access semaphore to the buffer pool.↲
↲
╞	   buffer_sem            : Buffers are queued at this semaphore.↲
↲
╞	   bpool                 : General statistic counters.↲
↲
╞	   prio                  : ┆84┆Contains for every priority (0..3) a ↓
┆19┆┆a4┆┄┄wait request semaphore and statistic ↓
┆19┆┆a4┆┄┄counters.↲
↲
╞	┆84┆The DTE module uses four buffer pools of this type:↲
↲
╞	   bigbuf      : ┆84┆Big input buffers for X.25 packets. Signalled to ↓
┆19┆┆9a┆┄┄the HDLCLCP as input buffers and on return routed ↓
┆19┆┆9a┆┄┄to an internal process (dte, dte_lcnzero or ↓
┆19┆┆9a┆┄┄dte_chanxxx) by the dte_hrec process. From these ↓
┆19┆┆9a┆┄┄processes they are returned to the pool.↲
↲
╞	   smallbuf    : ┆84┆Small input buffers. Used to copy a small X.25 ↓
┆19┆┆9a┆┄┄packet (┆a1┆<┆e1┆ 5 bytes) into and signal this buffer to ↓
┆19┆┆9a┆┄┄an internal process (dte, dte_lcnzero or ↓
┆19┆┆9a┆┄┄dte_chanxxx) by the dte_hrec process. From these ↓
┆19┆┆9a┆┄┄processes they are returned to the pool.↲

════════════════════════════════════════════════════════════════════════
↓
╞	   x25buf      : ┆84┆X.25 output control buffers. The processes dte, ↓
┆19┆┆9a┆┄┄dte_lcnzero and dte_chanxxx request these buf┄fers ↓
┆19┆┆9a┆┄┄for X.25 packets less than or equal to 5 bytes, ↓
┆19┆┆9a┆┄┄signal the message to the HDLCLCP for trans┄↓
┆19┆┆9a┆┄┄mission to the DCE. They are returned to the ↓
┆19┆┆9a┆┄┄dte_pool process, which return them to the pool.↲
↲
╞	   trace_buf   : ┆84┆Trace buffer pool. Please refer to section 6.1.↲
↲
╞	┆84┆In figure 10 the flow of the buffers are shown.↲
↲
╞	   bigbuf:↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	  smallbuf:↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
┆8c┆┄┆a7┆↓
╞	   x25buf:↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 10: Buffer flow for bigbuf, smallbuf and x25buf.↲
↲
╞	┆84┆For management of these buffer pools (incl. NC operations) the DTE ↓
┆19┆┆89┆┄┄uses the following procedures:↲
↲
┆b0┆╞	   PROCEDURE request_buffer ┆f0┆(VAR ref : reference;↲
╞	      VAR ph : ph_type; priority : 0..3;↲
               VAR result : reference);↲
↲
┆b0┆╞	   PROCEDURE return_buffer ┆f0┆(VAR ref : reference;↲
               VAR ph : ph_type; VAR help_ref : reference);↲
↲
┆b0┆╞	   PROCEDURE remove_buffers ┆f0┆(VAR ph : ph_type;↲
╞	      count : integer);↲
↲
┆b0┆╞	   PROCEDURE deliver_buffer ┆f0┆(VAR ref : reference;↲
╞	      VAR ph : ph_type);↲
↲
┆b0┆╞	   PROCEDURE reset_ph_stat ┆f0┆(VAR ph : ph_type);↲
↲
┆b0┆╞	   PROCEDURE init_ph ┆f0┆(VAR ph : ph_type;↲
╞	      VAR lockpool : pool 1);↲
↲
┆8c┆┄┆a7┆↓
╞	┆84┆For a detailed description please refer to ref. (5).↲
↲
↲
┆a1┆4.1.4╞	Timers in the DTE Module.↲
↲
╞	┆84┆Several timers are used in the DTE module. Some of these concern ↓
┆19┆┆89┆┄┄internal events and communication with other processes in the TC. ↓
┆19┆┆89┆┄┄The rest concern communication with the DCE. These last timers are ↓
┆19┆┆89┆┄┄described by↲
↲
╞	   timer_desc = record↲
╞	                  ticks           : integer;↲
╞	                  state           : timer_state;↲
                           timer_event_no  : integer;↲
                         end;↲
↲
╞	   ticks                 : ┆84┆Defines the number of ticks, if the ↓
┆19┆┆a4┆┄┄TIMEOUT module is used as timer ↓
┆19┆┆a4┆┄┄process.↲
↲
╞	   state                 : ┆84┆Defines the state of the timer (see ↓
┆19┆┆a4┆┄┄below).↲
↲
╞	   timer_event_no        : Event number for state_machine action.↲
↲
╞	A timer may be in one of three states↲
↲
╞	   t_stop╞	     : The timer is not active.↲
↲
╞	   t_run       : The timer is active.↲
↲
╞	   t_update    : ┆84┆At the time where an update was required, the ti┄↓
┆19┆┆9a┆┄┄mer message was not returned. When the timer mes┄↓
┆19┆┆9a┆┄┄sage is received, the timer is started again.↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆The names of the above mentioned timers are:↲
↲
╞	   t11m╞	     : DCE call request timer.↲
            t12m        : DCE reset request timr.↲
            t20         : DTE restart request timer.↲
            t21         : DTE call request timer.↲
            t22         : DTE reset request timer.↲
            t23         : DTE clear request timer.↲
            t30         : Virtual Call idle timer.↲
            t31         : Data hold timer.↲
↲
╞	┆84┆The value for each timer in the DTE module is specified in the ↓
┆19┆┆89┆┄┄array timer_def (DTEENV, appendix B.5).↲
↲
↲
┆a1┆4.1.5╞	Relation between Streams and Logical Channels.↲
↲
╞	┆84┆Each connected user has its own ┆a1┆streams┆e1┆ (data pathes), identified ↓
┆19┆┆89┆┄┄by numbers, in the dte_access process. All streams for all users ↓
┆19┆┆89┆┄┄have individual numbers, so a data path is always identified by ↓
┆19┆┆89┆┄┄one number (stream number) in the DTE/User interface. The ↓
┆19┆┆89┆┄┄dte_access process handles the connection between an ┆b0┆X.25 Virtual ↓
┆19┆┆89┆┆81┆┆82┆Call ┆f0┆and the ┆b0┆stream.↲
↲
╞	┆84┆The Virtual Call has a logical channel number at the DTE/DCE in┄↓
┆19┆┆89┆┄┄terface, and all Virtual Calls are multiplexed on one hdlc line to ↓
┆19┆┆89┆┄┄the DCE (figure 11).↲
↲
╞	┆84┆The stream number is always assigned by the dte_access process, ↓
┆19┆┆89┆┄┄and the data path to the remote user is identified by this number, ↓
┆19┆┆89┆┄┄when it has been set up. The user needs not care about the logical ↓
┆19┆┆89┆┄┄channel numbers, they are only significant for the DTE module.↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 11. Relation between streams and logical channels.↲
↲
↲
┆a1┆4.1.6╞	Addresses used by the DTE.↲
↲
╞	The DTE utilizes two types of addresses:↲
↲
╞	   - user identification↲
╞	   - DTE address↲
↲
╞	┆84┆The user identification is used to separate the connected users in ↓
┆19┆┆89┆┄┄order to make it possible for the DTE to route an INCOMING CALL to ↓
┆19┆┆89┆┄┄the right user. Furthermore it is used as part (sub address) of ↓
┆19┆┆89┆┄┄the DTE address.↲
↲
╞	┆84┆The DTE address is the identification of the DTE and user in the ↓
┆19┆┆89┆┄┄total network. The DTE module applies no constraints on the format ↓
┆19┆┆89┆┄┄of the addresses, but it is recommended to follow CCITT recommen┄↓
┆19┆┆89┆┄┄dation X.121 (ref. (2)). Below is given an example of a DTE ↓
┆19┆┆89┆┄┄address.↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆The types and constants defining the addresses and length of these ↓
┆19┆┆89┆┄┄are:↲
↲
╞	   dte_addr_lgt   = 14   : ┆84┆Maximum DTE address length.↲
                                    ┆b0┆Cannot be changed.↲
↲
╞	   max_u_adr      =  5   : ┆84┆Maximum length of user identification. ↓
┆19┆┆a4┆┄┄┆b0┆Cannot be changed.↲
↲
╞	   net_adr_length = 13   : ┆84┆Actual length of network address.↲
                                    ┆b0┆May be changed at compilation.↲
↲
╞	   user_id_lgth   =  3   : ┆84┆Actual length of user identification. ↓
┆19┆┆a4┆┄┄┆b0┆May be changed at compilation.↲
↲
╞	   actual_u_lgt   =↲
╞	     dte_addr_lgt - net_adr_length: actual length of sub address.↲
↲
╞	   x25_adr_type   = array (1.. dte_addr_lgt) of byte;↲
↲
╞	   bcd_adr_type   = array (1.. max_u_adr) of bit4;↲
↲
╞	   adr_rec_type   = record↲
╞	                      extended_format    : boolean;↲
╞	                      adr_lgth           : byte;↲
╞	                      adr                : x25_adr_type;↲
╞	                    end;↲
↲
╞	   local_adr_type = record↲
╞	                      user_lgth          : byte;↲
╞	                      user_address       : bcd_adr_type;↲
╞	                    end;↲
↲
╞	┆84┆The environments, in which the individual types and constants are ↓
┆19┆┆89┆┄┄defined, is outlined in table 3 below.↲
↲
╞	┆84┆adr_rec_type is used to define variables containing own DTE ↓
┆19┆┆89┆┄┄address or remote DTE address.↲
↲
┆8c┆┄┆a7┆↓
╞	┆84┆local_adr_type is used to define variables containing converted ↓
┆19┆┆89┆┄┄(from ASCII string to binary digits) user identification.↲
↲
╞	_________________________________________________________________ ↲
╞	! type/constant   !   changable   !  defined in    !  appendix   !↲
╞	┆a1┆!    name         !               !  environment   !             !↲
╞	!                 !               !                !             !↲
╞	! dte_addr_lgt    !      no       !   netenv       !      -      !↲
╞	! max_u_adr       !      no       !   cnnetenv     !      -      !↲
╞	! net_adr_length  !      yes      !   cnnetenv     !      -      !↲
╞	! user_id_lgth    !      yes      !   xdteenv      !     B.2     !↲
╞	! actual_u_lgt    !   implicit    !   cnnetenv     !      -      !↲
╞	! x25_adr_type    !      -        !   cnnetenv     !      -      !↲
╞	! bcd_adr_type    !      -        !   cnnetenv     !      -      !↲
╞	! adr_rec_type    !      -        !   cnnetenv     !      -      !↲
╞	! local_adr_type  !      -        !   cnnetenv     !      -      !↲
╞	┆a1┆!                 !               !                !             !↲
↲
↲
╞	Table 3: ┆84┆Environments in which address types and constants are ↓
┆19┆┆92┆┄┄defined.↲
↲
↲
┆b0┆         ┆a1┆Example 1:↲
↲
╞	                                      country code↲
╞	                                      national number↲
↲
↲
╞	     _____________________________↲
╞	     ┆a1┆ 2 3 8 1 0 4 0 1 0 1 2 0 1 1 ↲
╞	╞	╞	╞	        data network number↲
↲
╞	╞	╞	╞	        sub address↲
                                               network address↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.1.6.1╞	User Identification.↲
↲
╞	┆84┆At connect time the user identifies itself by a numeric text ↓
┆19┆┆89┆┄┄string. The length of this text string may vary from 1 to ↓
┆19┆┆89┆┄┄max_u_adr digits. The actual length is specified by user_id_lgth ↓
┆19┆┆89┆┄┄and is a compilation parameter of the DTE module.↲
↲
╞	┆84┆The dte_access process converts this identification to binary dig┄↓
┆19┆┆89┆┄┄its before using it as sub address in the Virtual Call establish┄↓
┆19┆┆89┆┄┄ment phase.↲
↲
╞	┆84┆Furthermore the user may at connect time specify how many digits, ↓
┆19┆┆89┆┄┄the DTE shall use in the routing algorithm of an INCOMING CALL.↲
↲
╞	┆84┆The field sub_id_lgt (accept_range internal in the DTE) in the ↓
┆19┆┆89┆┄┄service primitive connect_user specifies the number of leading di┄↓
┆19┆┆89┆┄┄gits of the converted user identification to be used in filtering ↓
┆19┆┆89┆┄┄an INCOMING CALL:↲
↲
╞	   sub_id_lgt = 0↲
╞	      all calls are accepted↲
╞	   sub_id_lgt = 1↲
╞	      ┆84┆only calls, where the first digit of the subaddress matches ↓
┆19┆┆8f┆┄┄with the first digit of the user identification, are accept┄↓
┆19┆┆8f┆┄┄ed↲
╞	   sub_id_lgt = 2↲
╞	      only calls, where two digits match, are accepted↲
╞	   sub_id_lgt = 3↲
╞	      only calls, where three digits match, are accepted↲
╞	   sub_id_lgt > 3↲
╞	      no calls are accepted↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.1.6.2╞	DTE Address.↲
↲
╞	┆84┆The DTE address is the address of the receiver/sender of a CALL ↓
┆19┆┆89┆┄┄REQUEST packet, and consists of two parts (see above), a network ↓
┆19┆┆89┆┄┄address and a sub address. The maximum length of a DTE address is ↓
┆19┆┆89┆┄┄14 digits (dte_addr_lgt).↲
↲
╞	┆84┆The network address identifies a DTE module/physical unit among ↓
┆19┆┆89┆┄┄all DTE modules in the network.↲
↲
╞	┆84┆The own network address and the length of it (own_dte_adr), toget┄↓
┆19┆┆89┆┄┄her with the actual sub address length (dte_conf_rec.user_length) ↓
┆19┆┆89┆┄┄are process parameters to the dte process. At initialization the ↓
┆19┆┆89┆┄┄dte process checks these three parameters:↲
↲
╞	╞	user_length <= max_u_adr↲
╞	╞	adr_lgth    <= dte_addr_lgt↲
╞	╞	user_length + adr_lgth <= dte_addr_lgt↲
╞	╞	adr(I) are all digits↲
↲
╞	┆84┆A user_length and adr_lgth of zero is allowed. If adr_lgth is zero ↓
┆19┆┆89┆┄┄user_length should also be set to zero.↲
↲
╞	┆84┆The concatenation of the network address and the subaddress may ↓
┆19┆┆89┆┄┄not always fit the DTE address in length. The DTE handles this ↓
┆19┆┆89┆┄┄problem according to the following four rules:↲
↲
╞	Given:╞	DTE address length╞	╞	= 14↲
╞	╞	network address length   ╞	=  x↲
╞	╞	user identification length╞	=  y↲
╞	╞	sub address length╞	╞	= 14-x↲
↲
╞	┆a1┆Rule 1┆e1┆:↲
╞	   ┆84┆If ┆b0┆sending a CALL REQUEST packet ┆f0┆and ┆b0┆(14-x) < y ┆f0┆the user iden┄↓
┆19┆┆8c┆┆82┆┄tification is truncated to fit the subaddress length.↲
↲
╞	┆a1┆Rule 2┆e1┆:↲
╞	   ┆84┆If ┆b0┆sending a CALL REQUEST packet ┆f0┆and ┆b0┆(14-x) > y ┆f0┆the DTE address ↓
┆19┆┆8c┆┆82┆┄if filled with binary zero's after the subaddress.↲
↲
┆8c┆┄┆a8┆↓
╞	┆a1┆Rule 3┆e1┆:↲
╞	   ┆84┆If ┆b0┆receiving an INCOMING CALL packet ┆f0┆and ┆b0┆(14-x) < y ┆f0┆the receiv┄↓
┆19┆┆8c┆┆82┆┄ed user identification is filled with binary zero's, before the ↓
┆19┆┆8c┆┆82┆┄routing/searching algorithm is invoked.↲
↲
╞	┆a1┆Rule 4┆e1┆:↲
╞	   ┆84┆If ┆b0┆receiving an INCOMING CALL packet ┆f0┆and ┆b0┆(14-x) > y ┆f0┆the re┄↓
┆19┆┆8c┆┆82┆┄ceived user identification is truncated, before the rou┄↓
┆19┆┆8c┆┆82┆┄ting/sear┄ch┄ing algorithm is invoked.↲
↲
↲
╞	The next two examples show the rules impact on the addresses.↲
↲
┆b0┆╞	┆a1┆Example 2:↲
╞	Given:╞	user_id_length╞	= 3↲
╞	╞	user_id╞	╞	= '123'↲
╞	╞	network_addr_length = 13↲
╞	╞	own_network_addr╞	= 2381040101201↲
╞	╞	called_dte_address  = 23810401012011↲
↲
╞	This will give:↲
↲
╞	Calling dte address in CALL REQUEST packet (rule 1):↲
╞	╞	┆a1┆23810401012011↲
↲
╞	┆84┆User identification subtracted from called_dte_address in an INCO┄↓
┆19┆┆89┆┄┄MING CALL packet and used in the routing/searching algorithm (rule ↓
┆19┆┆89┆┄┄3):↲
╞	╞	┆a1┆1↲
↲
┆b0┆╞	┆a1┆Example 3:↲
╞	Given:╞	user_id_length╞	= 3↲
╞	╞	user_id╞	╞	= '123'↲
╞	╞	network_addr_length╞	= 10↲
╞	╞	own_network_addr╞	= 2381040201↲
╞	╞	called_dte_address╞	= 23810402011234↲

════════════════════════════════════════════════════════════════════════
↓
╞	This will give:↲
↲
╞	Calling dte address in CALL REQUEST packet (rule 2):↲
╞	╞	┆a1┆23810402011230↲
↲
╞	┆84┆User identification subtracted from called_dte_address in an INCO┄↓
┆19┆┆89┆┄┄MING CALL packet and used in the routing/searching algorithm (rule ↓
┆19┆┆89┆┄┄4):↲
╞	╞	┆a1┆1234↲
↲
↲
┆a1┆4.1.6.3╞	Address Procedures.↲
↲
╞	┆84┆In order to be able to perform the above described concatenation/ ↓
┆19┆┆89┆┄┄separation and packing/unpacking of DTE address to/from X.25 pack┄↓
┆19┆┆89┆┄┄ets two procedures are defined:↲
↲
┆b0┆╞	   PROCEDURE pack_adr (↲
╞	      pkt_type╞	     : packet_id_type;↲
╞	      VAR user_ref,↲
╞	╞	x25_ref        : reference;↲
╞	      VAR ufaci_start,↲
╞	          xfaci_start    : integer;↲
╞	      head_index         : integer;↲
               VAR local_user     : local_adr_type;↲
╞	      VAR own,↲
╞	╞	remote         : adr_rec_type;↲
╞	      VAR result         : byte↲
               );↲
↲
╞	   pkt_type╞	: ┆84┆Specifies whether it is a CALL REQUEST or ↓
┆19┆┆9f┆┄┄CALL ACCEPT packet.↲
↲
╞	   user_ref╞	: ┆84┆Holds the user dte_call_req message.↲
↲
╞	   x25_ref╞	: Holds the buffer containing the X.25 packet.↲
↲
╞	   ufaci_start╞	: ┆84┆Points at return to the facilities in the ↓
┆19┆┆9f┆┄┄user dte_call_req.↲
↲
┆8c┆┄┆a8┆↓
╞	   xfaci_start╞	: ┆84┆Points at return to the first byte for ↓
┆19┆┆9f┆┄┄facilities in the X.25 packet.↲
↲
╞	   head_index╞	: ┆84┆Points at call to the first data byte in the ↓
┆19┆┆9f┆┄┄user dte_call_req.↲
↲
╞	   local_user╞	: ┆84┆Defines the calling local user (sub add┄↓
┆19┆┆9f┆┄┄ress).↲
↲
╞	   own╞	╞	: Defines the calling network address.↲
↲
╞	   remote╞	╞	: Contains at return the called DTE address.↲
↲
╞	   result╞	╞	: ┆84┆If different from ok (0) there were problems ↓
┆19┆┆9f┆┄┄in packing the addresses.↲
↲
↲
┆b0┆╞	   PROCEDURE unpack_adr (↲
╞	      VAR user_ref,↲
╞	      ╞	x25_ref╞	     : reference;↲
╞	      VAR ufaci_start↲
╞	      ╞	xfaci_start    : integer;↲
╞	      head_index         : integer;↲
╞	      VAR local_user     : local_adr_type;↲
╞	      VAR own,↲
╞	╞	remote         : adr_rec_type↲
               );↲
↲
╞	   user_ref╞	: ┆84┆Holds the 'user' buffer for an INCOMING ↓
┆19┆┆9f┆┄┄CALL.↲
↲
╞	   x25_ref╞	: ┆84┆Holds the message containing the X.25 ↓
┆19┆┆9f┆┄┄INCOMING CALL packet.↲
↲
╞	   ufaci_start╞	: ┆84┆Points at return to the first byte for ↓
┆19┆┆9f┆┄┄facilities in the 'user' buffer.↲
↲
╞	   xfaci_start╞	: ┆84┆Points at return to the first byte of ↓
┆19┆┆9f┆┄┄facilities in the X.25 packet.↲
↲
┆8c┆┄┆a8┆↓
╞	   head_index╞	: ┆84┆Points at call to the first data byte in ↓
┆19┆┆9f┆┄┄the 'user' buffer.↲
↲
╞	   local_user╞	: ┆84┆Contains at return the called local user ↓
┆19┆┆9f┆┄┄(sub address).↲
↲
╞	   own╞	╞	: ┆84┆Only network address length (adr_lgth) is ↓
┆19┆┆9f┆┄┄used.↲
↲
╞	   remote╞	╞	: ┆84┆Contains at return the calling DTE address.↲
↲
╞	┆84┆In appendix G are the transfer from user dte_call_req to the X.25 ↓
┆19┆┆89┆┄┄CALL REQUEST packet, from X.25 INCOMING CALL packet to user mes┄↓
┆19┆┆89┆┄┄sage shown.↲
↲
↲
┆a1┆4.1.7 Naming of Running Process Incarnations.↲
↲
╞	┆84┆The dte process uses its own name as a prefix for the names of the ↓
┆19┆┆89┆┄┄children incarnations. Some general conventions for the names have ↓
┆19┆┆89┆┄┄been defined :↲
↲
╞	  1. ┆84┆The dte uses up to four characters (first four) of its own ↓
┆19┆┆8e┆┄┄name (own.incarname) as prefix.↲
↲
╞	  2. ┆84┆Process of the trace, test and snoop systems will have no '_' ↓
┆19┆┆8e┆┄┄between the prefix and the name.↲
↲
╞	┆84┆This gives the following names of the process incarnations :↲
↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a142328323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
↲
╞	╞	dte╞	: defined by father process↲
╞	╞	dte_access╞	: <prefix>_access↲
╞	╞	dte_chan╞	: <prefix>_chan<seq. no>↲
╞	╞	dte_hrec╞	: <prefix>_hrec↲
╞	╞	dte_lcnzero╞	: <prefix>_lcnzero↲
╞	╞	pool_handler╞	: <prefix>_pool↲
╞	╞	dtetest╞	: <prefix>test↲
╞	╞	dteclock╞	: <prefix>clock↲
┆8c┆┄┆a7┆↓
╞	╞	dtetrace╞	: <prefix>trace↲
╞	╞	outtrace╞	: <prefix>outtrace↲
╞	╞	snoop╞	: <prefix>snoop↲
↲
↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d87ffff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a142328323c464b555f69737d8791ff04╱
↓
╞	┆84┆The procedure ┆b0┆c_name┆f0┆ is used to generate the names :↲
↲
╞	  ┆b0┆FUNCTION c_name (↲
╞	    prefixx,↲
╞	    suffixx   : alfa;↲
╞	    func,↲
╞	    incar_no  : byte↲
╞	    ) : alfa;↲
↲
╞	prefixx      : Name of calling process.↲
╞	suffixx      : Characters to be added.↲
╞	func         : Defines the function to be performed.↲
╞	incar_no     : ┆84┆A sequence number added as the last three ↓
┆19┆┆98┆┄┄characters if func specifies this.↲

════════════════════════════════════════════════════════════════════════
↓
«index» formatlinie til RC manualer↲
┆14┆┆b3┆↲
┆14┆┆b3┆┆06┆- ┆0b┆ -↲
┆a1┆4.2╞	Description of dte.↲
↲
╞	┆84┆The dte (supervisor) process is the parent process of the DTE ↓
┆19┆┆89┆┄┄Module/System as already described in chapter 2.↲
╞	The main purpose is:↲
↲
╞	1) ┆84┆creating the other DTE processes and dynamical creating/┄↓
┆19┆┆8c┆┄┄removing the dte_chan process incarnations↲
↲
╞	2) ┆84┆creation and removal of the DTE Trace and Test Systems↲
↲
╞	3) ┆84┆checking runtime configuration of the DTE↲
↲
╞	4) handling of LCP events and operations↲
↲
╞	5) ┆84┆handling events from the HDLCLCP and connecting/disconnecting ↓
┆19┆┆8c┆┄┄the hdlc line↲
↲
╞	6) ┆84┆management of the user table in connection with the dte_access ↓
┆19┆┆8c┆┄┄process↲
↲
╞	7) ┆84┆making the connection between INCOMING CALL's or user ↓
┆19┆┆8c┆┄┄dte_call_req's, and the local channel process (dte_chanxxx)↲
↲
╞	8) ┆84┆handling the assigned logical channel numbers and set up the ↓
┆19┆┆8c┆┄┄connection between a logical channel number and a user stream ↓
┆19┆┆8c┆┄┄number.↲
↲
↲
┆a1┆4.2.1╞	Process Parameters.↲
↲
╞	   PROCESS dte (↲
╞	      VAR sysvector      : system_vector;↲
╞	      VAR dte_ptr,↲
╞	     ╞	sup_ptr,↲
╞	╞	lcn0_ptr,↲
╞	╞	hrec_ptr,↲
╞	╞	pool_ptr,↲
╞	╞	hardwait       : ! tap_pointer;↲
┆8c┆┄┆a7┆↓
╞	      VAR hdlc_semp,↲
╞	╞	timeout_semp,↲
╞	╞	ncp_semp       : ! sempointer;↲
╞	      VAR locksem        : semaphore;↲
╞	      dte_lcp_id         : lcp_ident_type;↲
╞	      hdlc_param         : hdlc_cp_type;↲
╞	      dte_conf_rec       : dte_cp_type;↲
 ╞	      own_dte_adr        : adr_rec_type;↲
╞	      pool_conf_rec╞	     : dte_pc_type;↲
╞	      debug_rec          : dte_dc_type↲
╞	      );↲
↲
╞	   sysvector    : The system semaphores.↲
↲
╞	   dte_ptr      : Main semaphore pointer of the DTE module.↲
↲
╞	   sup_ptr      : dte local main semaphore pointer.↲
↲
╞	   lcn0_ptr     : dte_lcnzero main semaphore pointer.↲
↲
╞	   hrec_ptr     : dte_hrec main semaphore pointer.↲
↲
╞	   pool_ptr     : dte_pool main semaphore pointer.↲
↲
╞	   hardwait     : Local hardwait semaphore pointer.↲
↲
╞	   hdlc_semp    : ┆84┆┆84┆Main semaphore pointer of the HDLCLCP module.↲
↲
╞	   timeout_semp : ┆84┆Main semaphore pointer of the TIMEOUT module.↲
↲
╞	   ncp_semp     : ┆84┆Main semaphore pointer of the NCP module.↲
↲
╞	   locksem      : Console access semaphore.↲
↲
╞	   dte_lcp_id   : lcp_id (lcp address) of the DTE module.↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	   hdlc_param   : hdlc connect parameters↲
╞	╞	        hdlc_cp_type = record↲
╞	╞	          test_modem,           (* true if modem *)↲
╞	╞	╞	╞	            (* signals shall *)↲
╞	╞	╞	╞	            (* be tested     *)↲
╞	╞	╞	com204    : boolean;  (* true if HDLC  *)↲
╞	╞	╞	                      (* is COM204     *)↲
╞	╞	╞	c_id,╞	            (* see ref (9)   *)↲
╞	╞	╞	t1,                   (*   - " -       *)↲
╞	╞	╞	n2        : integer;  (*   - " -       *)↲
╞	╞	╞	k         : byte;     (*   - " -       *)↲
╞	╞	          framespace,           (*   - " -       *)↲
╞	╞	╞	abortspace: integer;  (*   - " -       *)↲
╞	╞	          end;╞	↓
↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d87ffff04╱
↓
↲
╞	dte_conf_rec : Run time configuration of the DTE module↲
╞	╞	     dte_cp_type = record↲
                          x25_lcg      :bit4    (* logical group number *)↲
╞	╞	       dltc,                 (* default lowest two-  *)↲
╞	╞	╞	                   (* way channel number   *)↲
╞	╞	       dhtc         :integer;(* default highest two- *)↲
╞	╞	╞	╞	         (* way channel number   *)↲
╞	╞	       max_chan,             (* maximum X.25 channels*)↲
                          dw_size,              (* default window size  *)↲
╞	╞	       maxw_size,            (* max window size      *)↲
╞	                 user_length  :byte;   (* actual user id       *)↲
                                                (* length               *)↲
                          x25_datasize :integer;(* X.25 data packet     *)↲
                                                (* size                 *)↲
                          end;↲
↲
╞	own_dte_adr  : The X.25 address of this DTE (see subsection 4.1.6)↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	pool_conf_rec: Configuration of internal pools↲
                        dte_pc_type = record↲
                          suphead_no,            (* no. of internal   *)↲
                                                 (*  headers          *)↲
                          supmess_no,            (* no. of internal   *)↲
                                                 (* supervisor buffers*)↲
                          eventbuf_no,           (* no. of internal   *)↲
                                                 (* event buffers     *)↲
                          hdlc_eventno: integer; (* no. of hdlc       *)↲
                                                 (* event buffers     *)↲
                          end;↲
↲
╞	debug_rec    : Debug parameters↲
                        dte_dc_type = record↲
                          dtetest,               (* true if back to   *)↲
                                                 (* back test         *)↲
                          snoop_on,              (* true if internal  *)↲
                                                 (* message snoop     *)↲
                          def_trace: boolean;    (* true if X.25      *)↲
                                                 (* level 3 trace     *)↲
                          def_test : testrectype;(* test bits         *)↲
                                                 (* see section 6.2   *)↲
                          end;↲
↲
↲
┆a1┆4.2.2╞	States.↲
↲
         ┆84┆The dte process maintains a state variable, dte_state, which ref┄↓
┆19┆┆89┆┄┄lects the state of the whole DTE module. It also maintains a sta┄te ↓
┆19┆┆89┆┄┄variable, line_state, which reflects the DTE's view of the hdlc ↓
┆19┆┆89┆┄┄line (see also subsection 4.2.8).↲
↲
╞	┆b0┆dte_state:↲
↲
╞	┆b0┆   dte_ready     ┆84┆┆f0┆the DTE is in ready state, i.e. r1 according to ↓
┆19┆┆9a┆┆81┆┄the X.25 Recommendation (ref. (1))↲
↲
╞	   ┆b0┆dte_restart   ┆84┆┆f0┆the DTE is in a restart phase, i.e. r2 according ↓
┆19┆┆9a┆┆81┆┄to the X.25 Recommendation (ref. (1))↲
↲
┆8c┆┄┆a8┆↓
╞	   ┆b0┆hdlc_active   ┆84┆┆f0┆the hdlc line is connected, but level 3 has not ↓
┆19┆┆9a┆┆81┆┄yet exchanged RESTART packets↲
↲
╞	   ┆b0┆net_down      ┆84┆┆f0┆the hdlc line is disconnected↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 12: State transition graph for dte_state in process dte.↲
↲
↲
┆b0┆╞	line_state:↲
↲
╞	   ┆b0┆h_conn        ┆f0┆the hdlc line is connected↲
↲
╞	   ┆b0┆h_conn_ing    ┆84┆┆f0┆the hdlc line is being connected, i.e.↲
                          ┆84┆a connect message has been sent, but an event (0) ↓
┆19┆┆9a┆┄┄has not yet been received↲
↲
╞	   ┆b0┆h_disc_ing    ┆84┆┆f0┆the hdlc line is being disconnected, i.e.↲
                          ┆84┆an event (7,8,9 or 10) has been received, but an ↓
┆19┆┆9a┆┄┄event (3) has not yet been received↲
↲
╞	   ┆b0┆h_recv_disc   ┆84┆┆f0┆the hdlc line has been disconnected by the other ↓
┆19┆┆9a┆┆81┆┄end, i.e. an event (4) has been received and ↓
┆19┆┆9a┆┆81┆┄state was h_conn_ing↲
↲
╞	   ┆b0┆h_disc        ┆84┆┆f0┆the hdlc line is disconnected.↲
↲
┆8c┆┄┆a8┆↓
╞	┆84┆A state transition graph and table for line state is outlined in ↓
┆19┆┆89┆┄┄subsection 4.2.8.↲
↲
↲
┆a1┆4.2.3╞	Semaphore and Reference Variables.↲
↲
╞	┆84┆Variables of type 'sempointer' and 'tap_pointer' are mentioned in ↓
┆19┆┆89┆┄┄the semaphore subsection just as they were semaphores.↲
↲
╞	┆a1┆┆b0┆SEMAPHORES↲
↲
╞	breaksem╞	╞	: ┆84┆A semaphore used to hold a break message. ↓
┆19┆┆9f┆┄┄This message is used by other DTE processes ↓
┆19┆┆9f┆┄┄to report exceptions to the dte process.↲
↲
╞	ev_pool_sem╞	: ┆84┆Used as a DTE global event pool. Each pro┄↓
┆19┆┆9f┆┄┄cess (except dte) picks up an event buffer ↓
┆19┆┆9f┆┄┄from this semaphore, puts data in the buf┄↓
┆19┆┆9f┆┄┄fer, and returns it to the dte process.↲
↲
╞	local_insem╞	: ┆84┆Local input semaphore used in connection ↓
┆19┆┆9f┆┄┄with restart_sem and sync_sem to seperate ↓
┆19┆┆9f┆┄┄the input stream into channel synchroniza┄↓
┆19┆┆9f┆┄┄tion messages (sync_sem), restart messages ↓
┆19┆┆9f┆┄┄(restart_sem), and all others (local_insem).↲
↲
╞	own_ev_sem╞	: ┆84┆Used as a local event buffer pool, only ↓
┆19┆┆9f┆┄┄known by the dte process. The reason for ha┄↓
┆19┆┆9f┆┄┄ving two internal event pools is to avoid ↓
┆19┆┆9f┆┄┄the deadlock:↲
╞	╞	╞	  ┆84┆the dte process waits a buffer at ↓
┆19┆┆9f┆┄┄ev_pool_sem, but all the event buffers are ↓
┆19┆┆9f┆┄┄queued at its main input semaphore.↲
↲
╞	poolh_ncpsem╞	: ┆84┆Dummy semaphore used as NCP main semaphore ↓
┆19┆┆9f┆┄┄in the dte_pool process.↲
↲
╞	restart_sem╞	: ┆84┆Local input semaphore, used for restart mes┄↓
┆19┆┆9f┆┄┄sages (see local_insem).↲
↲
┆8c┆┄┆a8┆↓
╞	sync_sem╞	╞	: ┆84┆Local input semaphore used for channel syn┄↓
┆19┆┆9f┆┄┄chronization messages (see local_insem).↲
↲
╞	user_key╞	╞	: ┆84┆Access semaphore (holds a buffer used as a ↓
┆19┆┆9f┆┄┄key) to the user table.↲
↲
╞	int_hdlc_ptr╞	: ┆84┆A sempointer which points at HDLCLCP if X.25 ↓
┆19┆┆9f┆┄┄trace is off and at the outtrace process if ↓
┆19┆┆9f┆┄┄X.25 trace is on.↲
↲
╞	chan_table(n).╞	: A sempointer pointing at the general_bsem↲
╞	general_bsem          ┆84┆semaphore in the user_table. This is the ↓
┆19┆┆9f┆┄┄connection from a dte_chan process incarna┄↓
┆19┆┆9f┆┄┄tion to the general input semaphore of the ↓
┆19┆┆9f┆┄┄user, who at the moment is associated with ↓
┆19┆┆9f┆┄┄this dte_chan process incarnation (see sub┄↓
┆19┆┆9f┆┄┄section 4.2.7).↲
↲
╞	chan_table(n).in_ptr: ┆84┆Main 'semaphore' for a dte_chan process in┄↓
┆19┆┆9f┆┄┄carnation (see subsection 4.2.7).↲
↲
╞	chan_table(n).      : ┆84┆Synchronization 'semaphore' for a dte_chan↲
╞	sync_ptr              process incarnation (see subsection 4.2.7).↲
↲
╞	hrec_table╞	: ┆84┆Array of pointers to the input semaphores of ↓
┆19┆┆9f┆┄┄the dte_chan process incarnations. A process ↓
┆19┆┆9f┆┄┄parameter to the dte_hrec process (see sub┄↓
┆19┆┆9f┆┄┄sections 4.1.1.2 and 4.2.7).↲
↲
╞	int_table╞	╞	: ┆84┆Array of pointers to the input semaphores of ↓
┆19┆┆9f┆┄┄the dte_chan process incarnations. A process ↓
┆19┆┆9f┆┄┄parameter to the dte_access process (see ↓
┆19┆┆9f┆┄┄subsec┄tion 4.1.1.2 and 4.2.7).↲
↲
╞	trace_sem and ╞	: Main input semaphore of the dtetrace pro-↲
╞	trace_ptr             ┆84┆cess (trace_ptr(1)) and outtrace process ↓
┆19┆┆9f┆┄┄(trace_ptr(2)).↲
↲
╞	trace_rec.wsem╞	: ┆84┆Answer semaphore used in the tracing proce┄↓
┆19┆┆9f┆┄┄dures (see subsection 4.1.2.5).↲
↲
┆8c┆┄┆a9┆↓
╞	snoop_ptr╞	╞	: ┆84┆Array of tap_pointers used by the snoop ↓
┆19┆┆9f┆┄┄process (see ref (7)).↲
↲
╞	dte_test_sem╞	: ┆84┆Main input semaphore of the dtetest process.↲
↲
╞	testsem╞	╞	: ┆84┆Semaphore used as a DTE global test buffer ↓
┆19┆┆9f┆┄┄pool.↲
↲
↲
┆b0┆╞	┆a1┆REFERENCES↲
↲
╞	clock_ref╞	╞	: Holds a ┆b0┆get_clock┆f0┆ message.↲
↲
╞	header_ref╞	: Working reference.↲
↲
╞	key_ref╞	╞	: ┆84┆Used to hold the key message during access ↓
┆19┆┆9f┆┄┄to pools and the user table.↲
↲
╞	mess_ref╞	╞	: Holds the message under processing.↲
↲
╞	ncp_ref╞	╞	: ┆84┆Holds an NC-restart request while awaiting ↓
┆19┆┆9f┆┄┄restart confirmation from the dte_lcnzero ↓
┆19┆┆9f┆┄┄process.↲
↲
╞	ctrl_ref╞	╞	: ┆84┆Holds a buffer used to disconnect the hdlc ↓
┆19┆┆9f┆┄┄line or to modem signals setting.↲
↲
╞	req_ref╞	╞	: ┆84┆Working reference.↲
↲
╞	timer_ref╞	╞	: ┆84┆Holds a buffer used for a short delay in ↓
┆19┆┆9f┆┄┄case of problem at modem signal setting.↲
↲
╞	trace_rec.t_ref╞	: ┆84┆┆84┆Working reference used in the tracing proce┄↓
┆19┆┆9f┆┄┄dures (see subsection 4.1.2.5).↲
↲
╞	testref╞	╞	: ┆84┆Working reference used during copying the ↓
┆19┆┆9f┆┄┄internal test area to a test buffer.↲
↲
↲
┆8c┆┄┆a7┆↓
┆a1┆4.2.4╞	Data Structures.↲
↲
╞	┆84┆The following data structures used in the dte process are describ┄↓
┆19┆┆89┆┄┄ed elsewhere.↲
↲
╞	   x25_param╞	section 4.1.1.3↲
╞	   user_table╞	section 4.1.1.1↲
╞	   hrec_table╞	section 4.1.1.2↲
╞	   int_table╞	section 4.1.1.2↲
╞	   test╞	╞	section 6.2.1↲
╞	   testbuf╞	section 6.2.4.1↲
↲
╞	┆84┆The dte process also uses a zone (z) for printing of error ↓
┆19┆┆89┆┄┄messages and other information on the console.↲
↲
╞	┆84┆Besides these the below described data structures are important ↓
┆19┆┆89┆┄┄for understanding the internal structure and work of the dte ↓
┆19┆┆89┆┄┄process.↲
↲
╞	dte_param_rec,↲
╞	new_dte_param╞	: ┆84┆Both of type dte_rec_type defined in the ↓
┆19┆┆9f┆┄┄DTEENV (appendix B.5). They both contain in┄↓
┆19┆┆9f┆┄┄formation about lowest and highest assign ↓
┆19┆┆9f┆┄┄twoway logical channel number, number of in┄↓
┆19┆┆9f┆┄┄put buffers at the HDLC driver, and values ↓
┆19┆┆9f┆┄┄for the two timers t30 (idle timer) and t32 ↓
┆19┆┆9f┆┄┄(ack timer). dte_param_rec contains the ac┄↓
┆19┆┆9f┆┄┄tual values and new_dte_param the possible ↓
┆19┆┆9f┆┄┄new values. The change from one set to anot┄↓
┆19┆┆9f┆┄┄her (updating of seperate values or all) may ↓
┆19┆┆9f┆┄┄be initiated by the LCP operation ↓
┆19┆┆9f┆┄┄restart_dte (DTE 54,0).↲
↲
╞	chan_vector╞	: ┆84┆Array of pairs of semaphores used as input ↓
┆19┆┆9f┆┄┄semaphores for the dte_chan process incarna┄↓
┆19┆┆9f┆┄┄tions. See also chan_table(n).in_prt below.↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	sync_vector╞	: ┆84┆Array of pairs of semaphores used as syn┄↓
┆19┆┆9f┆┄┄chronization semaphores for the dte_chan ↓
┆19┆┆9f┆┄┄process incarnations.↲
                               ┆84┆See also chan_table(n).sync_ptr below.↲
↲
╞	lcn_table╞	╞	: ┆84┆Array of type lcn_entry.↲
╞	╞	╞	  lcn_entry = record↲
╞	╞	╞	                state     : lcn_state_type;↲
╞	╞	╞	                index_pct : integer;↲
                                           end;↲
╞	╞	╞	  ┆84┆Used in creation/removal of dte_chan process ↓
┆19┆┆9f┆┄┄incarnations (subsection 4.2.7).↲
↲
╞	chan_table╞	: ┆84┆Array of dte_chan descriptors. Each entry is ↓
┆19┆┆9f┆┄┄of type chan_desc.↲
↲
╞	   chan_desc = record↲
╞	╞	       lcg╞	: bit4;↲
╞	╞	       lcn╞	: byte;↲
╞	      ╞	       proc_state╞	: proc_state_type;↲
╞	      ╞	       in_ptr╞	: tap_pointer;↲
╞	      ╞	       sync_ptr╞	: tap_pointer;↲
╞	      ╞	       general_bsem╞	: sempointer;↲
╞	      ╞	       incar_state╞	: incar_state_type;↲
╞	      ╞	       chan_sh╞	: shadow;↲
╞	      ╞	     end;↲
↲
╞	   lcg, lcn╞	: ┆84┆Defines the logical group and channel ↓
┆19┆┆9f┆┄┄number.↲
↲
╞	   proc_state╞	: ┆84┆dte_chan process state (see subsection  ↓
┆19┆┆9f┆┄┄4.2.7).↲
↲
╞	   in_ptr╞	╞	: dte_chan incarnation main semaphore pointer.↲
↲
╞	   sync_ptr╞	: ┆84┆dte_chan incarnation synchronization sema┄↓
┆19┆┆9f┆┄┄phore pointer.↲
↲
╞	   general_bsem╞	: General input semaphore pointer.↲
↲
┆8c┆┄┆a8┆↓
╞	   incar_state╞	: ┆84┆State (iremoved, inot_removed) of the incar┄↓
┆19┆┆9f┆┄┄nation.↲
↲
╞	   chan_sh╞	: ┆84┆Pointer to dte_chan incarnation used by the ↓
┆19┆┆9f┆┄┄operating system.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.2.5╞	Semaphores and Message Flow.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 13: Flow of messages to and from dte.↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.2.6╞	Overview of Process Operation.↲
↲
╞	┆84┆In this subsection an overview of the dte process operation is ↓
┆19┆┆89┆┄┄outlined either as flowcharts or in pseudo Real-Time Pascal code ↓
┆19┆┆89┆┄┄or in natural text.↲
↲
╞	┆84┆A detailed description of channel set-up and clearing is given in ↓
┆19┆┆89┆┄┄subsection 4.2.7 and the hdlc event treatment in subsection 4.2.8.↲
↲
╞	The different state variables used in the description are:↲
↲
┆b0┆╞	dte_state     ┆f0┆: see subsection 4.2.2.↲
↲
┆b0┆╞	proc_state    ┆f0┆: p_exit╞	: ┆84┆exception procedure called in ↓
┆19┆┆a9┆┆81┆┄channel process↲
╞	╞	      p_idle╞	: ┆84┆channel process idle either remov┄↓
┆19┆┆a9┆┄┄ed or stopped (iremoved, inot_rem┄↓
┆19┆┆a9┆┄┄oved)↲
╞	╞	      p_active╞	: ┆84┆Virtual Call exsisting↲
╞	╞	      p_stopping╞	: ┆84┆channel process in stop phase (VC ↓
┆19┆┆a9┆┄┄clearing)↲
╞	╞	      p_restart╞	: DTE in restart phase↲
↲
┆b0┆╞	lcn_state╞	    ┆f0┆: ch_ready╞	: logical channel idle↲
╞	╞	      ch_data╞	: Virtual Call exsisting↲
╞	╞	      ch_clearing╞	: Virtual Call is being cleared↲
↲
┆b0┆╞	line_state    ┆f0┆: see subsection 4.2.2↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 14: Process dte, main flowchart.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆b0┆PART (A):↲
↲
  ┆84┆       In the initialization part, the following actions are performed:↲
↲
╞	   - ┆84┆initialization of ┆b0┆get_clock┆f0┆ message and output zone,↲
╞	   - ┆84┆writing the DTE version information on the console, if ↓
┆19┆┆8e┆┄┄test(4) = true (see subsection 6.2.1)↲
╞	   - ┆84┆checking default values, process parameters and own dte ↓
┆19┆┆8e┆┄┄address↲
╞	   - ┆84┆initialization of local, tracing and NC variables↲
╞	   - ┆84┆initialization of tables:↲
╞	╞	chan_table↲
╞	╞	lcn_table↲
╞	╞	hrec_table↲
╞	╞	int_table↲
╞	╞	user_table↲
╞	   - buffer allocation↲
╞	╞	sync_mess and restart_mess pools↲
╞	╞	hdlc input pools↲
╞	╞	X.25 control output pool↲
╞	╞	internal event messages↲
╞	╞	hdlc event pool↲
╞	╞	internal header pool↲
╞	╞	internal supervisor message pool↲
╞	╞	break message↲
╞	   - ┆84┆initialization (link, create and start) of children processes↲
╞	   - ┆84┆sending ┆b0┆connect_lcp┆f0┆ to the NCP↲
╞	   - ┆84┆sending ┆b0┆connect┆f0┆ and ┆b0┆event┆f0┆ messages to the HDLCLCP and initia┄↓
┆19┆┆8e┆┆82┆┄lization of all associated variables.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆PART (B):↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 15: Process dte, part (B) flowchart.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆PART (C):↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 16: Process dte, part (C) flowchart.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆PART (D):↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 17: Process dte, part (D) flowchart.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆PART (E):↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 18: Process dte, part (E) flowchart.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆PART (F):↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	* see ref. (4)↲
╞	Figure 19: Process dte, part (F) flowchart.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆PART (G):↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 20: Process dte, part (G) flowchart.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆PART (H):↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 21: Process dte, part (H) flowchart.↲
↲
↲
↲
┆b0┆┆b0┆PART (I):↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 22: Process dte, part (I) flowchart.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆PART (J):↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 23: Process dte, part (J) flowchart.↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.2.7╞	Creation and Removal of dte_chan Process Incarnations.↲
↲
╞	┆84┆As already mentioned a Virtual Call is serviced by one dte_chan ↓
┆19┆┆89┆┄┄process incarnation. The dte process performs the creation, con┄↓
┆19┆┆89┆┄┄nection to a VC, and removal of these incarnations by maintaining ↓
┆19┆┆89┆┄┄two tables each containing a state variable:↲
╞	   - logical channel table (lcn_table(n).state)↲
╞	   - channel process table (chan_table(n).proc_state)↲
↲
╞	┆84┆After initialization of the DTE and exchange of RESTART packets on ↓
┆19┆┆89┆┄┄the DTE/DCE interface, all logical channels are in state ch_ready ↓
┆19┆┆89┆┄┄and all incarnations in state p_idle. An incarnation is created/┄↓
┆19┆┆89┆┄┄started either, when a user dte_call_req, or an X.25 packet on a ↓
┆19┆┆89┆┄┄logical channel in state ch_ready, is received. When the Virtual ↓
┆19┆┆89┆┄┄Call is cleared the associated dte_chan incarnation is stopped and ↓
┆19┆┆89┆┄┄the state becomes p_idle, and when the DTE performs an X.25 re┄↓
┆19┆┆89┆┄┄start all incarnations are stopped and removed.↲
↲
╞	┆84┆Below are the connections between the different tables (lcn_table, ↓
┆19┆┆89┆┄┄chan_table, user_table, hrec_table and int_table) outlined (figure ↓
┆19┆┆89┆┄┄24) and sta┄te transition tables (table 4 and 5), including actions ↓
┆19┆┆89┆┄┄performed, for the two state variables are shown too.↲
↲
╞	┆84┆In the figure an example with logical channel number 5 and 2nd in┄↓
┆19┆┆89┆┄┄carnation (2nd entry in chan_table) of dte_chan is used. The user ↓
┆19┆┆89┆┄┄has two active streams/Virtual Calls and the one shown is in the ↓
┆19┆┆89┆┄┄data phase.↲
↲
╞	┆84┆The semaphore pointers in chan_table and hrec_table is updated ↓
┆19┆┆89┆┄┄every time a dte_chan process incarnation is created/started or ↓
┆19┆┆89┆┄┄stopped/removed, whereas in int_table they are initialized at ↓
┆19┆┆89┆┄┄start and kept. If a semaphore pointer in the hrec_table does ↓
┆19┆┆89┆┄┄not point to an active dte_chan incarnation it points to the main ↓
┆19┆┆89┆┄┄semaphore of the dte process in order not to loose any X.25 pack┄↓
┆19┆┆89┆┄┄ets.↲
↲
╞	┆84┆A special case is logical channel 0, which at start up points to ↓
┆19┆┆89┆┄┄the main semaphore of the dte process and first changes when the ↓
┆19┆┆89┆┄┄line becomes connected. Then it is changed to point at the main ↓
┆19┆┆89┆┄┄semaphore of the dte_lcnzero process. When the line is disconnect┄↓
┆19┆┆89┆┄┄ed, it is again changed to point to the dte process.↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 24: Snap shot of tables connections.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	proc_state:↲

╱04002d440c00060000000002015031400000000000000000000000000000000000000000000000000a17222d3843555f69737d8791ffffff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
╞	______________________________________________________________________↲
╞	    state                                                             ↲
╞	╞	   p_exit╞	   p_idle╞	  p_active╞	 p_stopping╞	 p_restart  ↲
╞	┆a1┆  event                                                               ↲
                                                                               ↲
╞	╞	p_exit╞	p_exit╞	p_exit╞	p_exit╞	p_exit       ↲
╞	 break_mess                                                           ↲
                            pac2       pac2       pac1       pac1       pac1   ↲
         ┆a1┆                                                                      ↲
                                                                               ↲
╞	╞	╞	p_active                                      ↲
          call_req                                                             ↲
          inc. call                                                            ↲
                                       pac3                                    ↲
╞	┆a1┆                                                                      ↲
                                                                               ↲
╞	╞	p_idle╞	p_idle╞	p_idle╞	p_idle╞	p_idle       ↲
          sync_mess                                                            ↲
           u2<>ok                                                              ↲
                            pac4       pac4       pac4       pac4       pac4   ↲
╞	┆a1┆                                                                      ↲
                                                                               ↲
╞	 sync_mess╞	 ?╞	 ?╞	 ?╞	?╞	p_restart    ↲
╞	 u2 = ok                                                              ↲
          u3 = user_        pac5       pac5       pac5       pac5       pac7   ↲
         ┆a1┆      term                                                            ↲
                                                                               ↲
╞	 sync_mess╞	 ?╞	 ?╞	p_stopping╞	p_idle╞	p_idle       ↲
╞	  u2 = ok                                                             ↲
           u3 = ok          pac5       pac5       pac6        pac9      pac8   ↲
         ┆a1┆                                                                      ↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000002015031400000000000000000000000000000000000000000000000000a17222d3843555f69737d8791ffffff04╱
↓
↲
╞	Table 4: ┆84┆Process dte, internal state/action table for a dte_chan ↓
┆19┆┆92┆┄┄incarnation.↲
↲
╞	actions:↲
↲
╞	   pac1  :  clear Virtual Call and print error message↲
╞	   pac2  :  print error message↲
╞	   pac3  :  ┆84┆create/start dte_chan incarnation and update tables, ↓
┆19┆┆95┆┄┄send ┆b0┆sync_mess↲
╞	   pac4  :  remove process and update tables↲
╞	   pac5  :  print error message and stop↲
 ╞	   pac6  :  ┆84┆signal ┆b0┆sync_mess┆f0┆ to dte_chan incarnation and update ↓
┆19┆┆95┆┆81┆┄hrec_table↲
╞	   pac7  :  signal ┆b0┆sync_mess┆f0┆ to dte_chan incarnation↲
╞	   pac8  :  remove process↲
╞	   pac9  :  stop process↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a19263340464b555f69737d8791ffff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
┆b0┆╞	lcn_state :↲
↲
╞	_______________________________________________________↲
╞	      state                                            ↲
╞	╞	  ch_ready╞	    ch_data╞	 ch_clearing  ↲
╞	┆a1┆ event                                                 ↲
                                                                ↲
╞	╞	 ch_data                                ↲
          call_req                                              ↲
╞	╞	        lac1                            ↲
╞	┆a1┆                                                       ↲
╞	╞	╞	╞	╞	 ↲
╞	╞	 ch_data╞	 ch_data╞	 ch_clearing  ↲
╞	 inc.call╞	╞	╞	╞	 ↲
╞	╞	        lac4╞	        lac2╞	         lac5 ↲
╞	┆a1┆                                                       ↲
╞	╞	╞	╞	╞	 ↲
╞	 clear_req╞	 ch_data╞	 ch_data╞	 ch_ready     ↲
╞	 ╞	╞	╞	╞	 ↲
╞	 clear_conf╞	        lac3╞	        lac2╞	         lac5 ↲
╞	┆a1┆                                                       ↲
╞	╞	╞	╞	╞	 ↲
╞	╞	 ch_data╞	 ch_data╞	 ch_clearing  ↲
          X.25 packet╞	╞	╞	╞	 ↲
╞	╞	        lac3╞	      lac2╞	         lac5 ↲
╞	┆a1┆                                                       ↲
╞	 sync_mess╞	╞	╞	╞	 ↲
╞	 u2 = ok╞	 ch_ready╞	 ch_ready╞	 ch_ready     ↲
╞	 u3 = ok╞	╞	╞	╞	 ↲
 ╞	 p_state=╞	╞	╞	╞	 ↲
╞	 ┆a1┆p_acitive ╞	                                        ↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000002014b31400000000000000000000000000000000000000000000000000a19263340464b555f69737d8791ffff04╱
↓
↲
╞	Table 5: ┆84┆Process dte, internal state/action table for a logical ↓
┆19┆┆92┆┄┄channel.↲
↲
╞	actions:↲
↲
╞	   lac1  :  included in pac3↲
╞	   lac2  :  signal message to dte_chan incarnation↲
╞	   lac3  :  transmit CLEAR CONFIRMATION to the DCE↲
╞	   lac4  :  included in pac3↲
╞	   lac5  :  discard message↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.2.8╞	HDLC Event Handling.↲
↲
╞	┆84┆All control of the HDLC driver/HDLCLCP is performed by the dte ↓
┆19┆┆89┆┄┄process. In order to perform this control the dte process main┄↓
┆19┆┆89┆┄┄tains a state variable, line_state, which is the DTE's wiew of the ↓
┆19┆┆89┆┄┄state of the line. The state may change every time an event is ↓
┆19┆┆89┆┄┄returned form the HDLC. In figure 25 a flowchart of the control is ↓
┆19┆┆89┆┄┄outlined and below is a state transition table for line_state ↓
┆19┆┆89┆┄┄shown.↲
↲
╞	____________________________________________________↲
╞	┆a1┆!            event             !        state      !↲
╞	┆a1┆! group !  hdlc number         ! A ! B ! C ! D ! E !↲
╞	┆a1┆!  I    !  0                   ! - ! A ! - ! A ! - !↲
╞	┆a1┆!  II   !  1,11                ! A ! B ! C ! D ! E !↲
╞	┆a1┆!  III  !  2,3,5,12            ! E ! E ! E ! - ! - !↲
╞	┆a1┆!  IV   !  4                   ! E ! D ! E ! - ! - !↲
╞	┆a1┆!  V    !  6                   ! E ! B ! E ! E ! E !↲
╞	┆a1┆!  VI   !  7,8,9,10            ! C ! B ! C ! C ! - !↲
╞	┆a1┆!  VII  !  13,14╞	           ! E ! E ! E ! E ! E !↲
╞	┆a1┆!  VIII !  15╞	           ! A ! B ! C ! D ! E !↲
↲
╞	line_state:↲
╞	   h_conn      = A↲
╞	   h_conn_ing  = B↲
╞	   h_disc_ing  = C↲
╞	   h_recv_disc = D↲
╞	   h_disc      = E↲
↲
╞	Table 6: Process dte, state transition table for line_state.↲
↲
╞	┆84┆The compression of the line state table shown in ref. (9) is ob┄↓
┆19┆┆89┆┄┄tained by setting both the auto_connect and rnr_disc bits in the ↓
┆19┆┆89┆┄┄connect message to false and then group the events.↲
↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 25: Flowchart for HDLC event treatment.↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆The DTE operates on four modem signals made avaible by the HDLC ↓
┆19┆┆89┆┄┄driver. This is ↲
↲
╞	   - DTR    set by the DTE↲
╞	   - DSR╞	  tested by the DTE↲
╞	   - RTS    set by the DTE↲
╞	   - DCD    tested by the DTE↲
↲
╞	┆84┆For a more detailed description please see procedure ┆b0┆set_modem┆f0┆ ↓
┆19┆┆89┆┆81┆┄subsection 4.1.2.2.↲
↲
╞	┆84┆It is possible to suspend this modem signals setting/testing by ↓
┆19┆┆89┆┄┄setting the parameter test_modem in the hdlc-param configuration ↓
┆19┆┆89┆┄┄record (subsection 4.2.1 and subsection 7.1.2) to false. In this ↓
┆19┆┆89┆┄┄case the signals are read only.↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
«index» formatlinie til RC manualer↲
┆14┆┆b3┆↲
┆14┆┆b3┆┆06┆- ┆0b┆ -↲
┆a1┆4.3╞	Description of dte_access.↲
↲
╞	┆84┆The dte_access process is the User Interface of the DTE module as ↓
┆19┆┆89┆┄┄already described in section 2.↲
╞	The main purpose is:↲
↲
╞	   1) ┆84┆interfacing a user to the DTE module and an X.25 ↓
┆19┆┆8f┆┄┄communication↲
↲
╞	   2) ┆84┆establishing the connection between a (user) stream↲
               and an X.25 logical channel.↲
↲
↲
┆a1┆4.3.1╞	Process Parameters.↲
↲
╞	┆84┆PROCESS dte_access(↲
╞	   VAR dte_ptr╞	: ! tap_pointer;↲
╞	   VAR sup_ptr╞	: ! sempointer;↲
╞	   VAR event_pool╞	: semaphore;↲
╞	   VAR stream_vector: ! ch_sem_type;↲
╞	   max_stream╞	: byte;↲
╞	   VAR user_table╞	: u_table_type;↲
╞	   VAR user_key╞	: semaphore;↲
╞	   act_user_id_lgth : byte↲
╞	   );↲
↲
╞	dte_prt╞	╞	: ┆84┆Main semaphore pointer of the DTE module and ↓
┆19┆┆9f┆┄┄the dte_access process.↲
↲
╞	sup_ptr╞	╞	: ┆84┆dte main semaphore pointer↲
↲
╞	event_pool╞	: ┆84┆DTE global event pool. Internal event buf┄↓
┆19┆┆9f┆┄┄fers are hanged up on this semaphore.↲
↲
╞	stream_vector╞	: ┆84┆Semaphore pointers to the dte_chan process ↓
┆19┆┆9f┆┄┄incarnations. Used to route user messages to ↓
┆19┆┆9f┆┄┄a dte_chan incarnation.↲
↲
╞	max_stream╞	: ┆84┆Maximum number of user streams the DTE is ↓
┆19┆┆9f┆┄┄able to serve.↲
↲
┆8c┆┄┆a9┆↓
╞	user_table╞	: ┆84┆Each connected user is described by an entry ↓
┆19┆┆9f┆┄┄in user_table. For a detailed description ↓
┆19┆┆9f┆┄┄please see subsection 4.1.1.1.↲
↲
╞	user_key╞	╞	: Access semaphore to user_table.↲
↲
╞	act_user_id_lgth╞	: ┆84┆Actual user identification length. Please ↓
┆19┆┆9f┆┄┄refer to subsection 4.1.6.↲
↲
↲
┆a1┆4.3.2╞	States.↲
↲
╞	┆84┆The dte_access maintains four state variables:↲
↲
╞	- dte_rec.dte_state╞	╞	: state of the DTE module↲
↲
╞	- user_table.user_state╞	: ┆84┆state of a connected user/entry in ↓
┆19┆┆a9┆┄┄the user table↲
↲
╞	- stream_table.stream_state╞	: ┆84┆state of a user stream in the user ↓
┆19┆┆a9┆┄┄interface↲
↲
╞	- stream_table.intern_state╞	: ┆84┆state of a stream internal in the ↓
┆19┆┆a9┆┄┄process.↲
↲
↲
┆b0┆╞	dte_rec.dte_state:↲
↲
╞	   ┆84┆Description of the individual states please refer to subsection ↓
┆19┆┆8c┆┄┄4.2.2.↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 26: ┆84┆State transition graph for dte_state in process ↓
┆19┆┆94┆┄┄dte_access.↲
↲
┆b0┆╞	user_table.user_state:↲
↲
┆b0┆╞	   free╞	╞	┆f0┆entry in user table free↲
↲
┆b0┆╞	   w_resc╞	╞	┆84┆┆f0┆the dte_access process is awaiting resources ↓
┆19┆┆9d┆┆81┆┄(receive general) from the user↲
↲
┆b0┆╞	   idle╞	╞	┆f0┆the user has no active streams↲
↲
┆b0┆╞	   active╞	╞	┆f0┆the user has at least one active stream.↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	________________________________________________________________↲
╞	     state    ┆82┆free          w_resc         idle        active↲
╞	┆a1┆ event                                                          ↲
╞	 dte_  ╞	    ┆82┆free          w_resc        active       active↲
         ┆a1┆ call_req                                                       ↲
╞	 dte_         ┆82┆free          w_resc         idle        active↲
         ┆a1┆ wait_event                                                     ↲
          dte_         ┆82┆free           idle          idle        active ↲
         ┆a1┆ rec_gen                                                        ↲
          dte_         ┆82┆w_resc        w_resc         idle        active↲
         ┆a1┆ conn_user                                                      ↲
          dte_         ┆82┆free           free          free        active↲
         ┆a1┆ disc_user                                                      ↲
          all streams                                            ┆82┆idle↲
         ┆a1┆ cleared                                                        ↲
╞	 X.25 incom.                              ┆82┆active       active↲
         ┆a1┆ call                                                           ↲
↲
╞	Table 7: ┆84┆Process dte_access, state transition table for ↓
┆19┆┆92┆┄┄user_state.↲
↲
╞	┆84┆In appendix C.1.1 the state/action table correlated with ↓
┆19┆┆89┆┄┄user_state is outlined.↲
↲
┆b0┆╞	stream_table.stream_state:↲
↲
┆b0┆╞	   clear╞	╞	┆f0┆the entry in stream_table is free↲
↲
┆b0┆╞	   w_uresp╞	┆84┆┆84┆┆f0┆the stream has been cleared while waiting user ↓
┆19┆┆9d┆┆81┆┄response on an internal incoming call↲
↲
╞	   ┆b0┆w_accp╞	╞	┆84┆┆84┆┆f0┆the dte_access process is awaiting user re┄↓
┆19┆┆9d┆┆81┆┄sponse on an internal incoming call↲
↲
┆b0┆╞	   data╞	╞	┆f0┆the stream is ready for data transfer↲
↲
┆b0┆╞	   u_clear╞	┆f0┆the user has initiated the clearing phase↲
↲
↲
┆8c┆┄┆a7┆↓
┆b0┆╞	stream_table.intern_state:↲
↲
┆b0┆╞	   cleared╞	┆f0┆no active stream↲
↲
┆b0┆╞	   waiting╞	┆84┆┆f0┆the dte_access process is awaiting response ↓
┆19┆┆9d┆┆81┆┄from the dte process on a chan_start message↲
↲
╞	   ┆b0┆xfer_data╞	┆f0┆the stream is ready for data transfer↲
↲
┆b0┆╞	   clearing╞	┆84┆┆f0┆the stream has been cleared by the dte_chan ↓
┆19┆┆9d┆┆81┆┄incarnation, but an answer on 'chan_start' has ↓
┆19┆┆9d┆┆81┆┄not yet been received.↲
↲
↲
┆a1┆4.3.3╞	Semaphore and Reference Variables.↲
↲
╞	┆84┆Variables of type 'sempointer' and 'tap_pointer' are mentioned in ↓
┆19┆┆89┆┄┄the semaphore subsection just as they were semaphores.↲
↲
↲
┆b0┆╞	┆a1┆SEMAPHORES↲
↲
╞	testsem╞	╞	          : ┆84┆Semaphore used for queuing of ↓
┆19┆┆a9┆┄┄messages during internal test ↓
┆19┆┆a9┆┄┄of the dte_access process. Please ↓
┆19┆┆a9┆┄┄see section 6.2.↲
↲
╞	stream_table.suspend_sem╞	: ┆84┆Semaphore used to queue up user ↓
┆19┆┆a9┆┄┄messages until a dte_chan incarna┄↓
┆19┆┆a9┆┄┄tion is active.↲
↲
╞	stream_table.chanproc_sem╞	: ┆84┆Semaphore pointer to the associat┄↓
┆19┆┆a9┆┄┄ed dte_chan incarnation.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	┆a1┆REFERENCES↲
↲
╞	event_ref╞	╞	╞	: ┆84┆Working reference during event ge┄↓
┆19┆┆a9┆┄┄neration.↲
↲
╞	req_ref╞	╞	╞	: ┆84┆Holds the message under process┄↓
┆19┆┆a9┆┄┄ing.↲
↲
╞	key_ref╞	╞	╞	: ┆84┆Used to hold the key message du┄↓
┆19┆┆a9┆┄┄ring access to the user_table.↲
↲
╞	aref╞	╞	╞	: Working reference.↲
↲
╞	mref╞	╞	╞	: Working reference.↲
↲
╞	stream_table.internal_ref╞	: ┆84┆Hold either an internal incoming ↓
┆19┆┆a9┆┄┄call or internal clear message ↓
┆19┆┆a9┆┄┄while wait┄ing user response.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.3.4╞	Data Structures.↲
↲
╞	┆84┆The following data structures used in the dte_access process are ↓
┆19┆┆89┆┄┄described elsewhere.↲
↲
╞	   user_table╞	section 4.1.1.1↲
╞	   stream_vector╞	section 4.1.1.2↲
↲
╞	┆84┆Besides these the below described data structures are important ↓
┆19┆┆89┆┄┄for understanding the internal structure and work of the dte_ac┄↓
┆19┆┆89┆┄┄cess process↲
↲
╞	stream_table╞	╞	: ┆84┆Each entry in this table describes ↓
┆19┆┆a9┆┄┄a user stream including routing ↓
┆19┆┆a9┆┄┄pointers to the associated ↓
┆19┆┆a9┆┄┄dte_chan incarnation. Type is ↓
┆19┆┆a9┆┄┄stream_type described below↲
↲
╞	channel_table╞	╞	: ┆84┆Arrays of integers, which acts as ↓
┆19┆┆a9┆┄┄pointers to stream_table for a ↓
┆19┆┆a9┆┄┄conversion from dte_chan incarna┄↓
┆19┆┆a9┆┄┄tion numbers to entry numbers in ↓
┆19┆┆a9┆┄┄stream_table.↲
↲
↲
╞	stream_type = record↲
╞	   stream_state╞	: state of the stream (see section 4.3.2)↲
╞	   user_index╞	: index to user_table (byte)↲
╞	   channel_no╞	: index to channel_table (byte)↲
╞	   stream_event╞	: last stream event, type (byte)↲
╞	   cause╞	╞	: last stream event, cause (byte)↲
╞	   diagnostic╞	: last stream event, diagnostic code (byte)↲
╞	   no_of_lost_ev╞	: number of lost events (byte)↲
╞	   chanproc_sem╞	: please refer to section 4.3.3 (sempointer)↲
╞	   suspend_bsem╞	: please refer to section 4.3.3 (sempointer)↲
╞	   internal_ref╞	: please refer to section 4.3.3 (sempointer)↲
╞	   intern_state╞	: internal stream state (see section 4.3.2)↲
╞	end;↲
↲
↲
┆8c┆┄┆a8┆↓
┆a1┆4.3.5╞	Semaphores and Message Flow.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 27: Flow of messages to and from dte_access.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.3.6╞	Overview of Process Operation.↲
↲
╞	┆84┆In this subsection an overview of the dte_access process operation ↓
┆19┆┆89┆┄┄is outlined either as flowcharts or in pseudo Real-Time Pascal co┄↓
┆19┆┆89┆┄┄de or in natural text.↲
↲
╞	┆84┆All received messages are divided into four groups:↲
↲
┆b0┆╞	group 1:↲
╞	╞	- dte_call_req╞	╞	(user)↲
╞	╞	- dte_wait_event╞	╞	(user)↲
╞	╞	- dte_rec_gen╞	╞	(user)↲
↲
┆b0┆╞	group 2:↲
┆b0┆╞	   group 2u:↲
╞	╞	- dte_rec_dedic╞	╞	(user)↲
╞	╞	- dte_send_data╞	╞	(user)↲
╞	╞	- dte_send_intrupt╞	╞	(user)↲
╞	╞	- dte_change_input╞	╞	(user)↲
╞	 ╞	- dte_reset_req╞	╞	(user)↲
╞	╞	- dte_sync_stream╞	╞	(user)↲
╞	╞	- dte_acc_inc_call╞	╞	(user)↲
╞	╞	- dte_clear_req╞	╞	(user)↲
╞	╞	- inc_s_event╞	╞	(dte_chan)↲
╞	╞	- stream_cleared╞	╞	(dte_chan)↲
↲
┆b0┆╞	   group 2x:↲
╞	╞	- chan_start╞	╞	(dte_access)↲
╞	╞	- clear_event╞	╞	(dte_chan)↲
↲
┆b0┆╞	group 3:↲
╞	╞	- dte_conn_user╞	╞	(user)↲
╞	╞	- dte_disc_user╞	╞	(user)↲
╞	╞	- inc_call╞	╞	(dte_chan)↲
╞	╞	- restart_start╞	╞	(dte)↲
╞	╞	- restart_end╞	╞	(dte)↲
╞	╞	- inc_u_event╞	╞	(dte_chan)↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 28: Process dte_access, main flowchart↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆PART (A):↲
↲
         ┆84┆In the initialization part, the only actions performed is ini┄↓
┆19┆┆89┆┄┄tialization of stream_table and channel_table and setting ↓
┆19┆┆89┆┄┄dte_rec.dte_state to 'net_down'.↲
↲
↲
┆b0┆PART (B):↲
↲
╞	In appendix C.1.1 the state/action table is shown.↲
↲
↲
┆b0┆PART (C):↲
 and↲
┆b0┆PART (D)↲
↲
╞	In appendix C.1.2 a combined state/action table is shown↲
↲
↲
┆b0┆PART (E):↲
↲
╞	In appendix C.1.3 the state/action table is shown.↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.4╞	Description of dte_hrec↲
↲
╞	┆84┆The dte_hrec process is the process in the DTE module handling the ↓
┆19┆┆89┆┄┄input buffers to/from the HDLC complex.↲
╞	The main purpose is:↲
↲
╞	   1) ┆84┆try to keep a specified number of input buffers at the HDLC ↓
┆19┆┆8f┆┄┄driver↲
↲
╞	   2) ┆84┆routing input buffers, received from the HDLC driver either ↓
┆19┆┆8f┆┄┄to a dte_chan incarnation, which is servicing the specifi┄↓
┆19┆┆8f┆┄┄ed (in the received data) logical channel or dte_lcnzero↲
↲
╞	   3) tracing the received X.25 packets.↲
↲
↲
┆a1┆4.4.1╞	Process Parameters.↲
↲
╞	PROCESS dte_hrec (↲
╞	   VAR in_ptr╞	: ! tap_pointer;↲
╞	   VAR sup_ptr,↲
╞	       hdlc_ptr╞	: ! sempointer;↲
╞	   VAR bigbuf,↲
╞	       smallbuf,↲
╞	       trace_buf╞	: ph_type;↲
╞	   VAR event_pool╞	: semaphore;↲
╞	   VAR chan_sem╞	: ! ch_sem_type;↲
╞	   max_chan╞	: byte;↲
╞	   bigsize╞	: integer;↲
╞	   VAR trace_on╞	: ! boolean↲
            );↲
↲
↲
╞	in_ptr╞	╞	: dte_hrec main semaphore pointer↲
↲
╞	sup_ptr╞	╞	: dte main semaphore pointer↲
↲
╞	hdlc_ptr╞	╞	: Main semaphore pointer of the HDLCLCP module↲
↲
┆8c┆┄┆a7┆↓
╞	bigbuf╞	╞	: Big buffer pool (see subsection 4.1.3)↲
↲
╞	smallbuf╞	╞	: Small buffer pool (see subsection 4.1.3)↲
↲
╞	trace_buf╞	╞	: ┆84┆Trace buffer pool (see subsection 4.1.3 and ↓
┆19┆┆9f┆┄┄section 6.1).↲
↲
╞	event_pool╞	: ┆84┆DTE global event pool. Internal event ↓
┆19┆┆9f┆┄┄buffers are hanged up on this semaphore.↲
↲
╞	chan_sem╞	╞	: ┆84┆Semaphore pointers to the dte_chan ↓
┆19┆┆9f┆┄┄incarnations and dte_lcnzero process.↲
╞	╞	╞	  ┆84┆Used to route input buffers received from ↓
┆19┆┆9f┆┄┄the HDLC driver. The pointers are changed ↓
┆19┆┆9f┆┄┄dynamically by the dte process.↲
↲
╞	max_chan╞	╞	: ┆84┆Maximum number of X.25 logical channels.↲
↲
╞	bigsize╞	╞	: Size in bytes of big buffers.↲
↲
╞	trace_on╞	╞	: ┆84┆Boolean indicating whether the X.25 packet ↓
┆19┆┆9f┆┄┄flow shall be traced (true) or not (false). ↓
┆19┆┆9f┆┄┄Changed dynamically by the dte process.↲
↲
↲
┆a1┆4.4.2╞	States.↲
↲
╞	┆84┆This process does not use any state variables.↲
↲
↲
┆a1┆4.4.3╞	Semaphore and Reference Variables.↲
↲
┆b0┆╞	┆a1┆SEMAPHORES↲
↲
╞	trace_rec.wsem╞	: ┆84┆Answer semaphore used in the tracing ↓
┆19┆┆9f┆┄┄procedure (see subsection 4.1.2.5).↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	┆a1┆REFERENCES↲
↲
╞	key_ref╞	╞	: ┆84┆Used to hold the key buffer during access to ↓
┆19┆┆9f┆┄┄pools.↲
↲
╞	mess_ref╞	╞	: Holds the message under processing.↲
↲
╞	msg_ref╞	╞	: Working reference.↲
↲
╞	help_ref╞	╞	: Working reference in buffer pool requests.↲
↲
╞	req_buf╞	╞	: Holds a buffer request message.↲
↲
╞	trace_rec.t_ref╞	: ┆84┆Working reference used in the tracing ↓
┆19┆┆9f┆┄┄procedure (see subsection 4.1.2.5).↲
↲
↲
┆a1┆4.4.4╞	Data Structures.↲
↲
╞	┆84┆The following data structure used in the dte_hrec process is desc┄↓
┆19┆┆89┆┄┄ribed elsewhere.↲
↲
╞	   chan_sem╞	section 4.1.1.2↲
↲
╞	┆84┆Besides this the below described data structure is important for ↓
┆19┆┆89┆┄┄understanding the internal structure and work of the dte_hrec pro┄↓
┆19┆┆89┆┄┄cess.↲
↲
╞	   x25_rec╞	: ┆84┆Contains the lowest (ltc) and highest (htc) ↓
┆19┆┆9f┆┄┄logical channel number for two way communi┄↓
┆19┆┆9f┆┄┄cation, and the associated index (ltci, ↓
┆19┆┆9f┆┄┄htci) to chan_sem.↲
╞	╞	╞	  ┆84┆These variables are used to calculate the ↓
┆19┆┆9f┆┄┄index to chan_sem for a received logical ↓
┆19┆┆9f┆┄┄channel number (index = lcn-ltc+ltci) and to ↓
┆19┆┆9f┆┄┄check whether the channel number is inside ↓
┆19┆┆9f┆┄┄the assigned interval.↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.4.5╞	Semaphores and Message Flow.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 29: Flow of messages to and from dte_hrec.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.4.6╞	Overview of Process Operation.↲
↲
╞	┆84┆In this section an overview of the dte_hrec process operation is ↓
┆19┆┆89┆┄┄outlined either as flowcharts or in pseudo Real Time Pascal code ↓
┆19┆┆89┆┄┄or in natural text.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	* packet_id in (data, incoming_call, call_connected, diagnostic)↲
↲
╞	Figure 30: Process dte_hrec, main flowchart.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆PART (A):↲
↲
         ┆84┆In the initialization part, the only action performed is allo┄↓
┆19┆┆89┆┄┄cation and initialization of a buffer request message.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.5╞	Description of dte_lcnzero.↲
↲
╞	┆84┆The dte_lcnzero process is the process in the DTE module servicing ↓
┆19┆┆89┆┄┄the X.25 logical channel zero.↲
╞	The main purpose is:↲
↲
╞	   1) handling the channel zero functions:↲
╞	      - restart request↲
╞	      - restart indication↲
╞	      - restart confirmation↲
╞	      - diagnostic↲
↲
╞	┆84┆If the RESTART INDICATION, RESTART CONFIRMATION or DIAGNOSTIC pac┄↓
┆19┆┆89┆┄┄kets have a logical channel number different from zero the packet ↓
┆19┆┆89┆┄┄is (by dte_hrec) routed to the dte_chan incarnation handling the ↓
┆19┆┆89┆┄┄actual logical channel.↲
↲
↲
┆a1┆4.5.1╞	Process Parameters.↲
↲
╞	PROCESS dte_lcnzero (↲
╞	   VAR in_ptr╞	: ! tap_pointer;↲
╞	   VAR hdlc_ptr,↲
╞	       operator,↲
╞	       sup_ptr╞	: ! sempointer;↲
╞	   VAR event_pool↲
╞	       testsem╞	: semaphore;↲
╞	   VAR bigbuf↲
╞	       smallbuf↲
╞	       x25_buf╞	: ph_type;↲
╞	   bigsize╞	: integer;↲
╞	   VAR test╞	: ! testrectype;↲
╞	   VAR global_time  : ! integer↲
╞	   );↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	in_ptr╞	╞	: dte_lcnzero main semaphore pointer.↲
↲
╞	hdlc_ptr╞	╞	: ┆84┆Main semaphore pointer of the HDLCLCP ↓
┆19┆┆9f┆┄┄module.↲
↲
╞	operator╞	╞	: ┆84┆Main semaphore pointer of the operator ↓
┆19┆┆9f┆┄┄process.↲
↲
╞	sup_ptr╞	╞	: ┆84┆Main semaphore pointer of the dte process.↲
↲
╞	event_pool╞	: ┆84┆DTE global event pool. Internal event ↓
┆19┆┆9f┆┄┄buffers are hanged up on this semaphore.↲
↲
╞	testsem╞	╞	: ┆84┆Semaphore used as a DTE global test buffer ↓
┆19┆┆9f┆┄┄pool.↲
↲
╞	bigbuf╞	╞	: Big buffer pool (see subsection 4.1.3).↲
↲
╞	smallbuf╞	╞	: Small buffer pool (see subsection 4.1.3).↲
↲
╞	x25_buf╞	╞	: ┆84┆X.25 control output packet buffer pool (see ↓
┆19┆┆9f┆┄┄subsection 4.1.3).↲
↲
╞	bigsize╞	╞	: Size in bytes of big buffers.↲
↲
╞	test╞	╞	: Testbits array (see section 6.2).↲
↲
╞	global_time╞	: ┆84┆DTE global time used to time stamp test ↓
┆19┆┆9f┆┄┄records.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.5.2╞	States.↲
↲
╞	┆84┆The dte_lcnzero process maintains a state variable 'p_level_state' ↓
┆19┆┆89┆┄┄which reflects the state of the X.25 packet level (DTE module ↓
┆19┆┆89┆┄┄state). Furthermore the process maintains a state variable in con┄↓
┆19┆┆89┆┄┄nection with timer t20 (restart timer).↲
↲
┆b0┆╞	p_level_state:↲
↲
╞	   ┆84┆description of the individual states please refer to subsection ↓
┆19┆┆8c┆┄┄4.2.2.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 31: ┆84┆State transition graph for p_level_state in process ↓
┆19┆┆94┆┄┄dte_lcnzero.↲
↲
↲
┆b0┆╞	tt20.state:↲
↲
╞	   please refer to subsection 4.1.4.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.5.3╞	Semaphore and Reference Variables.↲
↲
┆b0┆╞	┆a1┆SEMAPHORES↲
↲
╞	   timer_sem╞	: Answer semaphore for timer regret messages.↲
↲
╞	   wait_buf_sem╞	: ┆84┆Answer semaphore for buffer request mes┄↓
┆19┆┆9f┆┄┄sages.↲
↲
↲
┆b0┆╞	┆a1┆REFERENCES↲
↲
╞	   book_ref╞	: Holds a timer regret message.↲
↲
╞	   help_ref╞	: Working reference.↲
↲
╞	   key_ref╞	: ┆84┆Used to hold the key message during access ↓
┆19┆┆9f┆┄┄to pools.↲
↲
╞	   mess_ref╞	: Holds the message under processing.↲
↲
╞	   supmess_ref╞	: ┆84┆Holds an internal message for communication ↓
┆19┆┆9f┆┄┄with the dte process.↲
↲
╞	   wait_buf╞	: Holds a buffer request message.↲
↲
↲
┆a1┆4.5.4╞	Data Structures.↲
↲
╞	┆84┆The following data structures used in the dte_lcnzero process are ↓
┆19┆┆89┆┄┄de┄scribed elsewhere:↲
↲
╞	   x25_param╞	section 4.1.1.3↲
╞	   tt20╞	╞	section 4.1.4↲
╞	   testbuf╞	section 6.2.4.2↲
↲
╞	┆84┆Besides these the dte_lcnzero process uses a zone (outzone) for ↓
┆19┆┆89┆┄┄printing of error messages on the console.↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.5.5╞	Semaphores and Message Flow.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 32: Flow of messages to and from dte_lcnzero.↲
┆8c┆┄┆a7┆↓
┆a1┆4.5.6╞	Overview of Process Operation.↲
↲
╞	┆84┆In this section an overview of the dte_lcnzero process operation ↓
┆19┆┆89┆┄┄is outlined either as flowcharts or in pseudo Real-Time Pascal ↓
┆19┆┆89┆┄┄code or in natural text.↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 33: Process dte_lcnzero, main flowchart.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆PART (A):↲
↲
         ┆84┆In the initialization part the following actions are performed.↲
↲
╞	   - ┆84┆initialization of regret, buffer request, and supervisor mes┄↓
┆19┆┆8e┆┄┄sages↲
╞	   - initialization of state variables↲
╞	   - initialization of variable 'x25_param'↲
↲
↲
┆b0┆PART (B):↲
↲
         ┆84┆The state_machine is implemented as an state/action table, which ↓
┆19┆┆89┆┄┄is shown in appendix C.2, and a short description of the actions ↓
┆19┆┆89┆┄┄are given here too.↲
↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
«index» formatlinie til RC manualer↲
┆14┆┆b3┆↲
┆14┆┆b3┆┆06┆- ┆0b┆ -↲
┆a1┆4.6      Description of dte_chan.↲
↲
╞	┆84┆The dte_chan process is the process in the DTE module servicing an ↓
┆19┆┆89┆┄┄X.25 Virtual Call/User stream.↲
╞	The main purpose is:↲
↲
╞	   1) ┆84┆┆84┆Providing the services of an X.25 Virtual Call to a user, ↓
┆19┆┆8f┆┄┄i.e. implementing the main part of the X.25 recommendation.↲
↲
↲
┆a1┆4.6.1╞	Process Parameters.↲
↲
╞	PROCESS dte_chan(↲
╞	   VAR in_ptr,↲
╞	       sync_ptr╞	 : ! tap_pointer;↲
╞	   VAR dte_int_ptr,↲
╞	       sup_ptr,↲
╞	       hdlc_ptr,↲
╞	       timeout_ptr,↲
╞	       gen_bsem╞	 : ! sempointer;↲
╞	   VAR bigbuf,↲
╞	       smallbuf,↲
╞	       x25_buf╞	 : ph_type;↲
╞	   VAR breaksem↲
╞	       event_pool,↲
╞	       testsem╞	 : semaphore;↲
╞	   VAR b_upd_stat:   : ! boolean;↲
╞	   own_adr_rec╞	 : adr_rec_type;↲
╞	   x25_datasize ╞	 : integer;↲
╞	   VAR test╞	 : ! testrectype;↲
╞	   VAR global_time╞	 : ! integer↲
╞	   );↲
↲
╞	in_ptr╞	╞	: dte_chan main semaphore pointer.↲
↲
╞	sync_ptr╞	╞	: ┆84┆dte_chan synchronization semaphore pointer ↓
┆19┆┆9f┆┄┄(see subsection 4.2.7).↲
↲
╞	dte_int_ptr╞	: ┆84┆Main semaphore pointer of the dte_access ↓
┆19┆┆9f┆┄┄process.↲
↲
┆8c┆┄┆a9┆↓
╞	sup_ptr╞	╞	: Main semaphore pointer of the dte process.↲
↲
╞	hdlc_ptr╞	╞	: ┆84┆Main semaphore pointer of the HDLCLCP mo┄↓
┆19┆┆9f┆┄┄dule.↲
↲
╞	timeout_ptr╞	: ┆84┆Main semaphore pointer of the TIMEOUT mo┄↓
┆19┆┆9f┆┄┄dule.↲
↲
╞	gen_bsem╞	╞	: ┆84┆General input semaphore pointer for the as┄↓
┆19┆┆9f┆┄┄sociated user.↲
↲
╞	bigbuf╞	╞	: Big buffer pool (see subsection 4.1.3).↲
↲
╞	smallbuf╞	╞	: Small buffer pool (see subsection 4.1.3).↲
↲
╞	x25_buf╞	╞	: ┆84┆X.25 control output packets buffer pool (see ↓
┆19┆┆9f┆┄┄subsection 4.1.3).↲
↲
╞	breaksem╞	╞	: ┆84┆Semaphore holding the break message used in ↓
┆19┆┆9f┆┄┄the exception procedure.↲
↲
╞	event_pool╞	: ┆84┆DTE global event pool. Internal event buf┄↓
┆19┆┆9f┆┄┄fers are queued at this semaphore.↲
↲
╞	testsem╞	╞	: ┆84┆Semaphore used as a DTE global test buffer ↓
┆19┆┆9f┆┄┄pool.↲
↲
╞	b_upd_stat╞	: ┆84┆If true update of statistical counters shall ↓
┆19┆┆9f┆┄┄be performed.↲
↲
╞	own_adr_rec╞	: Own network address (see subsection 4.1.6).↲
↲
╞	x25_datasize╞	: ┆84┆The maximum length of the data field in an ↓
┆19┆┆9f┆┄┄X.25 data packet.↲
↲
╞	test╞	╞	: Testbits arrray (see section 6.2).↲
↲
╞	global_time╞	: ┆84┆DTE global time used to time stamp test re┄↓
┆19┆┆9f┆┄┄cords.↲
↲
↲
┆8c┆┄┆a9┆↓
┆a1┆4.6.2╞	States.↲
↲
╞	┆84┆The dte_chan process operates mainly on one state variable, ↓
┆19┆┆89┆┄┄chan_rec.chan_state. Furthermore it uses a state variable for each ↓
┆19┆┆89┆┄┄timer (t11m, t12m, t21, t22, t23, t30 and t31) needed. For a de┄↓
┆19┆┆89┆┄┄tailed description of the timer states please refer to subsection ↓
┆19┆┆89┆┄┄4.1.4.↲
↲
┆b0┆╞	chan_rec.chan_state↲
↲
┆b0┆╞	   xidle╞	╞	┆f0┆: the channel is in ready state↲
┆b0┆╞	   xdtecall╞	┆f0┆: ┆84┆the DTE is awaiting DCE response on a CALL ↓
┆19┆┆9f┆┆81┆┄REQUEST↲
┆b0┆╞	   xdcecall╞	┆f0┆: ┆84┆the DTE is awaiting user response on an IN┄↓
┆19┆┆9f┆┆81┆┄COMING CALL↲
┆b0┆╞	   xdteclear╞	┆f0┆: ┆84┆the DTE is awaiting DCE response on a CLEAR ↓
┆19┆┆9f┆┆81┆┄REQUEST↲
┆b0┆╞	   xretclear╞	┆f0┆: ┆84┆a CLEAR REQUEST has been retransmitted at ↓
┆19┆┆9f┆┆81┆┄least once↲
┆b0┆╞	   xdata╞	╞	┆f0┆: ┆84┆the DTE and DCE is in the data phase and ↓
┆19┆┆9f┆┆81┆┄both ready↲
┆b0┆╞	   xdata_wic╞	┆f0┆: ┆84┆as xdata and the DTE is awaiting INTERRUPT ↓
┆19┆┆9f┆┆81┆┄CONFIRMATION↲
┆b0┆╞	   wsync╞	╞	┆f0┆: ┆84┆as xdata and the DTE is awaiting user syn┄↓
┆19┆┆9f┆┆81┆┄chronization on a reset event↲
┆b0┆╞	   ndte╞	╞	┆f0┆: as xdata, but the DTE is not ready↲
┆b0┆╞	   ndte_wic╞	┆f0┆: as xdata_wic, but the DTE is not ready↲
┆b0┆╞	   ndte_wsync╞	┆f0┆: as wsync, but the DTE is not ready↲
┆b0┆╞	   ndce╞	╞	┆f0┆: as xdata, but the DCE is not ready↲
┆b0┆╞	   ndce_wic╞	┆f0┆: as xdata_wic, but the DCE is not ready↲
┆b0┆╞	   ndce_wsync╞	┆f0┆: as wsync, but the DCE is not ready↲
┆b0┆╞	   ndcte╞	╞	┆f0┆: as xdata, but the DTE and DCE are not ready↲
┆b0┆╞	   ndcte_wic╞	┆f0┆: ┆84┆as xdata_wic, but the DTE and DCE are not ↓
┆19┆┆9f┆┆81┆┄ready↲
┆b0┆╞	   ndctewsync╞	┆f0┆: ┆84┆as wsync, but the DTE and DCE are not ready↲
┆b0┆╞	   xreset╞	╞	┆f0┆: ┆84┆RESET INDICATION received from the DCE, the ↓
┆19┆┆9f┆┆81┆┄DTE is awaiting user response, and no RESET ↓
┆19┆┆9f┆┆81┆┄CONFIRMATION is transmitted to the DCE yet↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	   ureset╞	╞	┆f0┆: ┆84┆dte_reset_req received from the user, the ↓
┆19┆┆9f┆┆81┆┄DTE is awaiting DCE confirmation↲
┆b0┆╞	   ereset╞	╞	┆f0┆: ┆84┆the DTE has reset the Virtual Call, and is ↓
┆19┆┆9f┆┆81┆┄awaiting both user response and DCE confir┄↓
┆19┆┆9f┆┆81┆┄mation.↲
↲
╞	┆84┆In appendix C.3 state transitions tables for the state variable is ↓
┆19┆┆89┆┄┄outlined.↲
↲
↲
┆a1┆4.6.3╞	Semaphores and Reference Variables.↲
↲
╞	┆84┆Variables of type 'sempointer' and 'tap_pointer' are mentioned in ↓
┆19┆┆89┆┄┄the semaphore subsection just as they were semaphores.↲
↲
┆b0┆╞	┆a1┆SEMAPHORES↲
↲
╞	   hardwait╞	: ┆84┆Semaphore used in cases where hardwait is ↓
┆19┆┆9f┆┄┄required and as answer semaphore for buffer ↓
┆19┆┆9f┆┄┄requests.↲
╞	   exsem╞	╞	: Semaphore used in the exception procedure.↲
╞	   local_insem1╞	: Local input semaphore number 1.↲
╞	   local_insem2╞	: Local input semaphore number 2.↲
╞	   own_buf_sem╞	: Used to queue X.25 output headers.↲
╞	   rdata_sem╞	: ┆84┆Used to queue dedicated input buffers from ↓
┆19┆┆9f┆┄┄the user.↲
╞	   s_sdata_sem╞	: ┆84┆Used to queue not yet processed user ↓
┆19┆┆9f┆┄┄dte_send_data messages.↲
╞	   s_sint_sem╞	: ┆84┆Used to queue not yet processed user ↓
┆19┆┆9f┆┄┄dte_send_intrupt messages.↲
╞	   timer_sem╞	: Answer semaphore for timer requests.↲
╞	   user_int_sem╞	: ┆84┆Local input semaphore for user ↓
┆19┆┆9f┆┄┄dte_send_intrupt messages.↲
╞	   w_sint_sem╞	: ┆84┆Holds one unacknowledge user ↓
┆19┆┆9f┆┄┄dte_send_intrupt message.↲
╞	   w_x25data_sem╞	: ┆84┆Used to temporary queue X.25 DATA packets ↓
┆19┆┆9f┆┄┄(received) in state ndte.↲
╞	   local_in.ptr╞	: ┆84┆Semaphore pointer to the actual local input ↓
┆19┆┆9f┆┄┄semaphore.↲
↲
↲
┆8c┆┄┆a9┆↓
┆b0┆╞	┆a1┆REFERENCES↲
↲
╞	   book_upd_ref╞	: Holds an timer booking/updating message.↲
╞	   event_ref╞	: Working reference during event generation.↲
╞	   key_ref╞	: ┆84┆Holds the key message during buffer pool ac┄↓
┆19┆┆9f┆┄┄cess.↲
╞	   mess_ref╞	: Holds the message under processing.↲
╞	   req_ref╞	: Working reference.↲
╞	   reset_ref╞	: ┆84┆Used to temporary queue a user dte_reset_req ↓
┆19┆┆9f┆┄┄or dte_sync_stream message.↲
╞	   sync_ref╞	: Holds the synchronization message.↲
╞	   timer_ref╞	: Working reference during start of a timer.↲
╞	   user_ref╞	: ┆84┆Used to temporary queue a user dte_call_req ↓
┆19┆┆9f┆┄┄or dte_clear_req message.↲
╞	   wait_buf╞	: Working reference during buffer requests.↲
╞	   workref╞	: Working reference.↲
╞	   x25_ref╞	: Holds temporary the X.25 output buffer.↲
╞	   not_ack_data(n).↲
╞	   buf_ref          : ┆84┆Holds a returned but yet not acknowledge ↓
┆19┆┆9f┆┄┄user dte_send_data buffer. The buffer is re┄↓
┆19┆┆9f┆┄┄turned when all preciding 'packets' and it ↓
┆19┆┆9f┆┄┄self are acknowledge.↲
↲
┆a1┆4.6.4╞	Data Structures.↲
↲
╞	┆84┆The following data structures used in the dte_chan process are de┄↓
┆19┆┆89┆┄┄scribed elsewhere.↲
↲
╞	   dte_timers╞	section 4.1.4↲
╞	   x25_param╞	section 4.1.1.3↲
╞	   sav_x25_param╞	section 4.1.1.3↲
╞	   testbuf╞	section 6.2.4.3↲
↲
╞	┆84┆The variable dte_timers is an array of 7 elements, where each ele┄↓
┆19┆┆89┆┄┄ment is described in section 4.1.4.↲
↲
╞	┆84┆Besides these the below described data structures are important ↓
┆19┆┆89┆┄┄for understanding the internal structure and work of the dte_chan ↓
┆19┆┆89┆┄┄process.↲
↲
┆8c┆┄┆a8┆↓
╞	chan_rec╞	╞	: ┆84┆Record containing all relevant information ↓
┆19┆┆9f┆┄┄concerning the actual serviced logical chan┄↓
┆19┆┆9f┆┄┄nel. The type is ch_rec_type.↲
↲
╞	ch_rec_type = record↲
╞	   ╞	      chan_state╞	: c_state_type;↲
╞	   ╞	      sem_index╞	: integer;↲
╞	   ╞	      stream_no╞	: byte;↲
╞	   ╞	      local_user╞	: local_adr_type;↲
╞	   ╞	      user_no,↲
╞	   ╞	      multi_buffer,↲
╞	   ╞	      rcv_buf_type╞	: byte;↲
╞	   ╞	      s_prio╞	: 0..7;↲
╞	   ╞	      remote_dte╞	: adr_rec_type;↲
╞	   ╞	      w_rec╞	: window_rec_desc;↲
╞	   ╞	      t30_norm,↲
╞	   ╞	      ack_timer╞	: integer;↲
╞	   ╞	      stream_status╞	: stat_rec_type;↲
╞	   ╞	      f_field_lgth╞	: byte;↲
╞	   ╞	      f_field╞	: faci_type;↲
╞	╞	    end;↲
↲
╞	   chan_state╞	: ┆84┆State of the logical channel viewed by the ↓
┆19┆┆9f┆┄┄DTE (see subsection 4.6.2).↲
╞	   sem_index╞	: ┆84┆Index to the dte_chanxxx main semaphore ↓
┆19┆┆9f┆┄┄area (see subsection 4.1.1.2).↲
╞	   stream_no╞	: ┆84┆The associated stream number (see subsection ↓
┆19┆┆9f┆┄┄4.1.5).↲
╞	   local_user╞	: ┆84┆The identification of the user in semi oc┄↓
┆19┆┆9f┆┄┄tets and the length of this identification ↓
┆19┆┆9f┆┄┄(see subsection 4.1.6).↲
╞	   user_no╞	: User number in the DTE.↲
╞	   multi_buffer╞	: ┆84┆The indicated (by user) maximum degree of ↓
┆19┆┆9f┆┄┄multibuffering on output.↲
╞	   rev_buf_type╞	: ┆84┆Defines the type of input buffers, 1 = dedi┄↓
┆19┆┆9f┆┄┄cated input, 0 = general input (see ref. ↓
┆19┆┆9f┆┄┄(3)).↲
╞	   s_prio╞	╞	: ┆84┆The indicated priority divided by 32 to get ↓
┆19┆┆9f┆┄┄a number in (0..7), which is accepted by the ↓
┆19┆┆9f┆┄┄HDLC driver.↲
┆8c┆┄┆a8┆↓
╞	   remote_dte╞	: ┆84┆The address of the remote DTE (see subsec┄↓
┆19┆┆9f┆┄┄tion 4.1.6).↲
╞	   w_rec╞	╞	: ┆84┆Record containing all information for the ↓
┆19┆┆9f┆┄┄window mechanism (see subsection 4.6.8).↲
╞	   t30_norm╞	: The value of t30 (idle timer).↲
╞	   ack_timer╞	: ┆84┆The value of acknowledge timer. This is used ↓
┆19┆┆9f┆┄┄to specify the maximum timer period from re┄↓
┆19┆┆9f┆┄┄ceival of a packet to it is acknowledged.↲
╞	   stream_status╞	: ┆84┆Record containing stream/channel status in┄↓
┆19┆┆9f┆┄┄formation for internal use. The type is de┄↓
┆19┆┆9f┆┄┄fined in the external DTE environment ↓
┆19┆┆9f┆┄┄XDTEENV (appendix B.2).↲
╞	   f_field_lgth╞	: X.25 facility field length.↲
╞	   f_field╞	: X.25 facilities.↲
↲
↲
╞	not_ack_data╞	: ┆84┆This record structure is used to secure that ↓
┆19┆┆9f┆┄┄the user output buffers are returned in the ↓
┆19┆┆9f┆┄┄same sequence as received and only when they ↓
┆19┆┆9f┆┄┄are acknowledged by the DCE. The type and ↓
┆19┆┆9f┆┄┄function are described in subsection 4.6.9.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.6.5╞	Semaphores and Message Flow.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 34: Flow of messages to and from dte_chan.↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆4.6.6╞	Overview of Process Operation.↲
↲
╞	┆84┆In this section an overview of the dte_chan process operation is ↓
┆19┆┆89┆┄┄outlined either as flowcharts or in pseudo Real-Time Pascal code ↓
┆19┆┆89┆┄┄or in natural text.↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 35: Process dte_chan, main flowchart.↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆As shown in the flowchart (figure 35) the initialization is sepe┄↓
┆19┆┆89┆┄┄rated in two part, one concerning general process variables (PART ↓
┆19┆┆89┆┄┄(A)) and one concerning logical channel variables (PART (B)).↲
↲
↲
┆b0┆PART (A):↲
↲
╞	general process variables:↲
╞	   - chan_rec.chan_state  (for test purpose)↲
╞	   - timer- and buffer allocation messages↲
╞	   - local input sempointer↲
╞	   - test buffer pointers↲
╞	   - variable chan_active (:= false).↲
↲
↲
┆b0┆PART (B):↲
↲
         logical channel variables:↲
╞	   - special variables↲
╞	   - not_ack_data↲
╞	   - timer array↲
╞	   - chan_rec↲
╞	   - logical group and number in x25_param↲
╞	   - window variables↲
╞	   (the last three from the sync buffer).↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆PART (C):↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 36: Process dte_chan, part (C) flowchart.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆PART (D):↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 37: Process dte_chan, part (D) flowchart.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆81┆PART (E):↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 38: Process dte_chan, part (E) flowchart.↲
↲
┆b0┆PART (F):↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 39: Process dte_chan, part (F) flowchart.↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆PART (G):↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 40: Process dte_chan, part (G) flowchart.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆PART (H):↲
↲
╞	┆84┆If general input is used the message is returned with result ↓
┆19┆┆89┆┄┄'fct_not_allw',↲
╞	otherwise↲
╞	- ┆84┆if state is waiting user confirmation (xreset, wsync, ↓
┆19┆┆8b┆┄┄ndce_wsync, ndte_wsync, ndctewsync, ereset) the message is re┄↓
┆19┆┆8b┆┄┄turned with 'not_processed',↲
╞	- ┆84┆if state is dte not ready and/or window closed in data state ↓
┆19┆┆8b┆┄┄(xdata, xdata_wic, ndce, ndce_wic, ndte, ndte_wic, ndcte, ↓
┆19┆┆8b┆┄┄ndcte_wic) and enough resources are received the state machine ↓
┆19┆┆8b┆┄┄is called (PART (I)) to open the window,↲
╞	- ┆84┆if state is dte ready and waiting resources (send_rnr = true) ↓
┆19┆┆8b┆┄┄and enough resources are received the state machine is called ↓
┆19┆┆8b┆┄┄(PART (I)) to open the window,↲
╞	- ┆84┆if state is dte ready (xdata, xdata_wic, ndce, ndce_wic) and the ↓
┆19┆┆8b┆┄┄window has been closed the state machine is called (PART (I)) to ↓
┆19┆┆8b┆┄┄open the window.↲
↲
┆b0┆↲
┆b0┆PART (I):↲
↲
╞	┆84┆The procedure ┆b0┆state_machine(event, current_state)┆f0┆ is called in ↓
┆19┆┆89┆┆81┆┄order to perform the needed action and get the next state.↲
┆84┆↲
↲
┆b0┆PART (K):↲
↲
         ┆84┆An NC request is received. The specified operation is performed ↓
┆19┆┆89┆┄┄and the buffer returned to the NCP. 'Sense channel' and 'get chan┄↓
┆19┆┆89┆┄┄nel statistics' are the only LCP operations performed by the ↓
┆19┆┆89┆┄┄dte_chan process.↲
↲
╞	┆84┆If not any of these an error in the dte process has occured.↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆PART (L):↲
↲
╞	┆84┆The stop alogrithm contains the following steps:↲
↲
╞	   1.  ┆84┆The sync_mess is returned to dte with u2 = ok and u3 = ↓
┆19┆┆90┆┄┄user_term.↲
╞	   2.  ┆84┆The dte_chan process awaits the returnal of the sync_mess ↓
┆19┆┆90┆┄┄at the sync semaphore.↲
╞	   3.  ┆84┆The dte changes the sempointer in the hrec_table.↲
╞	   4.  ┆84┆The dte signals the sync_mess to the dte_chan process.↲
╞	   5.  ┆84┆The dte_chan proccess empties its local semaphores, its in┄↓
┆19┆┆90┆┄┄put (main) semaphore, releases the X.25 output headers, ↓
┆19┆┆90┆┄┄sets the local input semaphore to number 1, and returns ↓
┆19┆┆90┆┄┄the sync_mess with u2 = ok and u3 = ok, before waiting at ↓
┆19┆┆90┆┄┄the sync semaphore for at new start indication.↲
↲
↲
┆a1┆4.6.7╞	Description of dte_chan local input semaphores.↲
↲
╞	┆84┆As already mentioned the dte_chan process has two local input se┄↓
┆19┆┆89┆┄┄maphores. These are used in order to be able to seperate the dif┄↓
┆19┆┆89┆┄┄ferent input messages received at the main input semaphore. In or┄↓
┆19┆┆89┆┄┄der to not always check on a number to find the actual semaphore a ↓
┆19┆┆89┆┄┄record type is defined (insem_type). The variable (local_in) of ↓
┆19┆┆89┆┄┄this type contains a sempointer (to the actual semaphore) and the ↓
┆19┆┆89┆┄┄number of the semaphore (1 or 2).↲
↲
╞	┆84┆In the local procedures ┆b0┆ret_inuserb, ret_wsdata┆f0┆ the not actual se┄↓
┆19┆┆89┆┆81┆┄maphore is used as a queue semaphore and at returnal from the pro┄↓
┆19┆┆89┆┆81┆┄cedures this semaphore becomes the actual input semaphore:↲
↲
╞	   ┆b0┆before call:     ┆f0┆local_in↲
                                                 local_insem1↲
↲
↲
╞	╞	╞	   1╞	╞	local_insem2↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	   in the procedure:↲
╞	╞	╞	actual_sem = local_insem1↲
╞	╞	╞	next_sem   = local_insem2↲
↲
┆b0┆╞	   after return:┆f0┆    local_in↲
╞	╞	╞	╞	╞	local_insem1↲
↲
╞	╞	╞	    2╞	╞	local_insem2↲
↲
↲
┆a1┆4.6.8╞	The Strategy for Acknowledgement of Data Packets.↲
↲
╞	┆84┆Because of the correlation of credit and acknowledgement in the ↓
┆19┆┆89┆┄┄X.25 recommendation, an acknowledgement cannot be sent without at ↓
┆19┆┆89┆┄┄the same time giving credit to more data. This mechanism is in the ↓
┆19┆┆89┆┄┄dte_chan process administrated by defining a window descriptor re┄↓
┆19┆┆89┆┄┄cord (see below). The window size is the maximum number of out┄↓
┆19┆┆89┆┄┄standing packets, and the lower window edge is the last acknowled┄↓
┆19┆┆89┆┄┄ged packet plus 1, i.e. the first unacknowledge packet.↲
↲
╞	┆84┆The window description record (chan_rec.w_rec) contains the follo┄↓
┆19┆┆89┆┄┄wing fields:↲
↲
╞	w_recv     (bit 3)  : window size for receiving↲
╞	w_xmit     (  -  )╞	: window size for transmitting↲
╞	slw        (  -  )  : lower window edge for sending↲
╞	rlw        (  -  )  : lower window edge for receiving↲
╞	nsps       (  -  )  : next P(S) to be sent↲
╞	lrps       (  -  )  : last received P(S)↲
╞	rdataqueue (integer): ┆84┆number of queued dedicated user input buf┄↓
┆19┆┆9f┆┄┄fers. If mode is general-input rdataqueue ↓
┆19┆┆9f┆┄┄equals w_recv+1 allways.↲
╞	init_phase (boolean): ┆84┆indicates the initial phase where the normal ↓
┆19┆┆9f┆┄┄algorithm does not work, i.e. speciel calcu┄↓
┆19┆┆9f┆┄┄lations in the procedure w_algorithm are ↓
┆19┆┆9f┆┄┄performed.↲
↲
╞	┆84┆The acknowledgement strategy depends on the input mode (dedicated, ↓
┆19┆┆89┆┄┄general), which is indicated by the user at call establishment ↓
┆19┆┆89┆┄┄(see ref. (3)).↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	┆a1┆dedicated:↲
↲
╞	An RR packet is sent if↲
╞	   1) ┆84┆the window is closed and one or more input buffers are ↓
┆19┆┆8f┆┄┄awailable, and no output data is queued in the dte_chan pro┄↓
┆19┆┆8f┆┄┄cess.↲
╞	   2) ┆84┆expiration of either the idle timer or the ack timer (expla┄↓
┆19┆┆8f┆┄┄nation of these timers see below).↲
↲
╞	┆a1┆┆b0┆general:↲
↲
╞	┆84┆An RR packet is sent as quickly as possible. It is the same stra┄↓
┆19┆┆89┆┄┄tegy as for dedicated with the exception that the input buffer li┄↓
┆19┆┆89┆┄┄mitation is not used.↲
↲
╞	┆84┆With the fact in mind that rdataqueue = w_recv+1 in case of general input ↓
┆19┆┆89┆┄┄and that piggy backing of acknowledgement is possible the follow┄↓
┆19┆┆89┆┄┄ing flowchart decribes the acknowledgement strategy.↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	a: send window open ((nsps-slw) mod 8 < w_xmit)↲
╞	b: possible to move receive window (rdataqueue > 0)↲
╞	c: receive window closed (lrps = (rlw + w_recv) mod 8)↲
↲
╞	Figure 41: Acknowledgement strategy flowchart.↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆The two timers mentioned in this subsection are:↲
↲
╞	   ┆b0┆idle timer ┆f0┆┆b0┆:  ┆84┆┆f0┆this timer is defined in order to avoid long pe┄↓
┆19┆┆9a┆┆82┆┄riods with no traffic and the following dead ↓
┆19┆┆9a┆┆82┆┄lock situation.↲
↲
╞	╞	╞	┆b0┆DCE╞	╞	DTE↲
╞	╞	╞	          data(4)↲
↲
╞	╞	╞	╞	data(5)↲
╞	╞	       send window↲
╞	╞	       ┆81┆closed↲
╞	╞	╞	╞	   RR(6)↲
↲
↲
╞	   ┆b0┆ack timer :┆f0┆   ┆84┆this timer is defined in order to optimize the ↓
┆19┆┆9a┆┆81┆┄use of piggy backing:↲
╞	╞	       ┆84┆If no data to send, then wait a very short time ↓
┆19┆┆9a┆┄┄(possible zero) before sending RR to see, if the ↓
┆19┆┆9a┆┄┄user allready has delivered output data to the ↓
┆19┆┆9a┆┄┄DTE.↲
↲
╞	The default values of the timers are↲
↲
╞	   idle timer : 30 secs.↲
╞	   ack timer  :  1 sec.↲
↲
╞	┆84┆These may be changed in the dte process using an LCP operation ↓
┆19┆┆89┆┄┄(DTE 54,0) (see ref. (4)) and are delivered to the dte_chan pro┄↓
┆19┆┆89┆┄┄cess at call establishment in the ┆b0┆sync_mess┆f0┆ (subsection 3.2.5.1).↲
↲
↲
┆a1┆4.6.9╞	Maintenance of Output Data Sequence.↲
↲
╞	┆84┆The dte_chan process returns output data from a user in the same ↓
┆19┆┆89┆┄┄sequence as received. To support this feature a variable ↓
┆19┆┆89┆┄┄(not_ack_data) of type not_ack_type is defined. Furthermore output ↓
┆19┆┆89┆┄┄data are first returned at the time, when they are acknowledged by ↓
┆19┆┆89┆┄┄the DCE.↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	   not_ack_type = record↲
╞	                    buf_ref╞	   : reference;↲
╞	╞	          not_returned,↲
╞	╞	          level3_ack   : boolean;↲
╞	╞	        end;↲
↲
╞	   not_ack_data = array (0..7) of not_ack_type;↲
↲
╞	   next_ack_buf : byte;↲
↲
╞	┆84┆next_ack_buf points to the next buffer to be returned to the user.↲
↲
╞	┆84┆When an user output data is sent to the HDLC for transmission the ↓
┆19┆┆89┆┄┄u3 field in the user buffer is set to the P(S) value of the packet ↓
┆19┆┆89┆┄┄and this number is furthermore used as index in not_ack_data. At ↓
┆19┆┆89┆┄┄the same time not_returned is set to true and level3_ack to false.↲
↲
╞	┆84┆When an output message is returned from the HDLC not_returned is ↓
┆19┆┆89┆┄┄set to false and the buffer is 'hanged' on the reference buf_ref. ↓
┆19┆┆89┆┄┄Then all preciding buffers from next_ack_buf up to the first where ↓
┆19┆┆89┆┄┄not_returned = true or level3_ack = false are returned to the ↓
┆19┆┆89┆┄┄user, and at last next_ack_buf is moved.↲
↲
╞	┆84┆When a packet is acknowledged by the DCE, level3_ack is set to ↓
┆19┆┆89┆┄┄true, and all preciding buffers from next_ack_buf up to the first ↓
┆19┆┆89┆┄┄where not_returned = true or level3_ack = false are returned to ↓
┆19┆┆89┆┄┄the user, and at last next_ack_buf is moved.↲

════════════════════════════════════════════════════════════════════════
↓
«index» formatlinie til RC manualer↲
┆14┆┆b3┆↲
┆14┆┆b3┆┆06┆- ┆0b┆ -↲
┆a1┆5.╞	ERROR MESSAGES.↲
↲
╞	┆84┆The DTE System procedures error messages in several cases.↲
↲
╞	┆84┆Most of the error messages mean that one of the surrounding mo┄↓
┆19┆┆89┆┄┄dules has reacted in an unexpected way or the programmer has sup┄↓
┆19┆┆89┆┄┄plied the module with wrong default parameter values.↲
↲
╞	┆84┆In other situations the module will exit through the PANIC subrou┄↓
┆19┆┆89┆┄┄tine, and the programmer must then check up the source programs ↓
┆19┆┆89┆┄┄for internal errors.↲
↲
╞	┆84┆In both cases some of the errors are fatal (exit of process incar┄↓
┆19┆┆89┆┄┄nation) and others are only warnings.↲
↲
╞	┆84┆As already mentioned in subsection 4.1.2.4 the DTE System uses two ↓
┆19┆┆89┆┄┄procedures for error information, ┆b0┆error_text┆f0┆ for writing in natu┄↓
┆19┆┆89┆┆81┆┄ral text and ┆b0┆error_report┆f0┆ for numeric information only.↲
↲
╞	┆84┆In the following two sections the error messages from the indi┄vi┄↓
┆19┆┆89┆┄┄dual processes will be outlined.↲
↲
↲
┆a1┆5.1╞	Error Messages from error_text.↲
↲
╞	┆84┆In this section error messages procedures by using ┆b0┆error_text ┆f0┆is ↓
┆19┆┆89┆┆81┆┄described.↲
╞	The format of the description is:↲
↲
╞	   - error text↲
╞	   - explanation↲
╞	   - fatal/warning, process name.↲
↲
╞	The messages are arranged in alfabetic order.↲
↲
↲
┆b0┆╞	****╞	┆84┆call from DTE ACC not stacked↲
╞	╞	┆84┆A ┆b0┆chan_start ┆f0┆message from dte_access is not stacked with ↓
┆19┆┆93┆┆81┆┄a user request message.↲
╞	╞	Fatal, dte.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆b0┆╞	****╞	CHAN exception in <incarnation name>↲
  ╞	          followed by either↲
╞	┆b0┆****╞	┆84┆CHAN exception in chan process state = idle/exit: ↓
┆19┆┆93┆┆81┆┆82┆<state>↲
╞	╞	or↲
┆b0┆╞	****╞	CHAN exception, VC cleared, lcn = <no>↲
┆b0┆╞	****╞	CHAN vers: <no1>↲
╞	╞	┆84┆An exception in a dte_chan process incarnation has oc┄↓
┆19┆┆93┆┄┄cured. If the first case is printed, the exception has ↓
┆19┆┆93┆┄┄occured in the state idle (<state>=1) or exit (<state> ↓
┆19┆┆93┆┄┄=0). In the second case, the Virtual Call with logical ↓
┆19┆┆93┆┄┄channel num┄ber <no> is cleared. <no1> is the version ↓
┆19┆┆93┆┄┄number of the dte_chan process.↲
╞	╞	Warning, dte.↲
↲
┆b0┆╞	****╞	create <name> not possible: <no>↲
╞	╞	┆84┆It was not possible to create an incarnation of the ↓
┆19┆┆93┆┄┄<name> process.↲
╞	╞	┆84┆<no> is the result from the call of create (see ref. ↓
┆19┆┆93┆┄┄(13)).↲
↲
╞	╞	<name> are:↲
╞	╞	   DTE ACC╞	fatal, dte↲
╞	╞	   DTE CHAN╞	fatal, dte↲
╞	╞	   DTE CLOCK╞	fatal, dtetest↲
╞	╞	   DTE HREC╞	fatal, dte↲
╞	╞	   DTE LCN0╞	fatal, dte↲
╞	╞	   DTE POOLH╞	fatal, dte↲
╞	╞	   DTE TEST╞	warning, dte↲
╞	╞	   DTE SNOOP╞	warning, dte↲
╞	╞	   OUTTRACE╞	warning, dte↲
╞	╞	   TRACE╞	╞	warning, dte↲
╞	╞	Fatal/warning, dte/dtetest↲
↲
╞	┆b0┆****╞	default LTCN greater than default HTCN↲
╞	╞	┆84┆The default assigned interval limits are not pos┄sible. ↓
┆19┆┆93┆┄┄Lower number greater than higher.↲
╞	╞	Fatal, dte.↲
↲
┆8c┆┄┆a7┆↓
         ┆b0┆****╞	default window size out of range : <no>╞	↲
╞	╞	┆84┆The default window size is greater than 7. <no> is the ↓
┆19┆┆93┆┄┄value of dte_conf_rec.dw_size.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	diagnostic packet not allowed↲
╞	╞	┆84┆The procedure ┆b0┆dec_x25 ┆b0┆┆f0┆(see subsection 4.1.2.1) gives the ↓
┆19┆┆93┆┆82┆┄result 'diag_not_allw'. Error in procedure, if module is ↓
┆19┆┆93┆┆82┆┄used as DTE.↲
╞	╞	Warning, dte_lcnzero.↲
↲
┆b0┆╞	****╞	DTE disconnected from NCP↲
╞	╞	Warning, dte.↲
↲
┆b0┆╞	****╞	DTE received HDLC exception/parity error↲
┆b0┆╞	****╞	DTE gives up to connect DRIVER↲
╞	╞	┆84┆The DTE has received an event indicating an HDLCLCP ex┄↓
┆19┆┆93┆┄┄ception or an parity error in the controller.↲
╞	╞	Warning, dte.↲
↲
┆b0┆╞	****╞	error in default HTC, LTC : <no>↲
╞	╞	┆84┆The default assigned interval (ltc, htc) is greater than ↓
┆19┆┆93┆┄┄dte_conf_rec.max_chan. <no> = htc-ltc+1.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	error in own DTE ADDRESS at index = <no>↲
╞	╞	┆84┆The digit at index <no> is not within the range 0..9.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	error in request_event_buf from NCP : <no>↲
╞	╞	┆84┆A ┆b0┆request_event_buf ┆f0┆message is returned from the NCP ↓
┆19┆┆93┆┆81┆┄with an unexpected u2 value (<no>).↲
╞	╞	Warning, dte.↲
↲
┆b0┆╞	****╞	exception received from unknown process↲
╞	╞	┆84┆A ┆b0┆break ┆f0┆message is received from an unknown process.↲
╞	╞	Warning, dte.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	****╞	HDLC control operation returned with user term↲
┆b0┆╞	****╞	DTE gives up to connect DRIVER↲
╞	╞	┆84┆An HDLC control operation is returned with an result in┄↓
┆19┆┆93┆┄┄dicating either HDLCLCP exception or controller parity ↓
┆19┆┆93┆┄┄error.↲
╞	╞	Warning, dte.↲
↲
┆b0┆╞	****╞	illegal channel↲
╞	╞	┆84┆The procedure ┆b0┆dec_x25 ┆f0┆(see subsection 4.1.2.1) gives the ↓
┆19┆┆93┆┆81┆┄result 'ill_channel'. I.e. logical channel number is not ↓
┆19┆┆93┆┆81┆┄zero.↲
╞	╞	Warning, dte_lcnzero.↲
↲
┆b0┆╞	****╞	illegal HDLC connect ident : <no>↲
╞	╞	┆84┆The default parameter hdlc_param.c_id has a negative va┄↓
┆19┆┆93┆┄┄lue (<no>).↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	illegal HDLC retransmission counter : <no>↲
╞	╞	┆84┆The default parameter hdlc_param.n2 is out of range (┆a1┆<┆e1┆0 ↓
┆19┆┆93┆┄┄or ┆a1┆>┆e1┆64). <no> is the actual value.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	illegal HDLC retransmission timer : <no>↲
╞	╞	┆84┆The default parameter hdlc_param.t1 has a negative value ↓
┆19┆┆93┆┄┄(<no>).↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	illegal operation from sup : <no>↲
╞	╞	┆84┆An unknown operation, <no>, is received from the dte ↓
┆19┆┆93┆┄┄process.↲
╞	╞	Warning, dte_lcnzero.↲
↲
┆b0┆╞	****╞	illegal state in channel proc desc↲
╞	╞	┆84┆A ┆b0┆sync_mess ┆f0┆is received in an illegal state (p_idle, ↓
┆19┆┆93┆┆81┆┄p_exit).↲
╞	╞	Fatal, dte.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	****╞	illegal value of outstanding HDLC frames : <no>↲
╞	╞	┆84┆The default parameter hdlc_param.k equals zero (<no> = ↓
┆19┆┆93┆┄┄0).↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	inc. of Head-pool not possible : <no>↲
╞	╞	┆84┆It was not possible to increment the number of buffers ↓
┆19┆┆93┆┄┄in head_pool. <no> indicates the number of buffers, ↓
┆19┆┆93┆┄┄which the pool already is initialized with.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	inc. of Smess-pool not possible : <no>↲
╞	╞	┆84┆It was not possible to increment the number of buffers ↓
┆19┆┆93┆┄┄in supmesspool. <no> is the number of buffers, which ↓
┆19┆┆93┆┄┄the pool already is initialized with.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	init of Big-pool not possible : <no>↲
╞	╞	┆84┆Initialization of bigpool (big input buffers see subsec┄↓
┆19┆┆93┆┄┄tion 4.1.3) with the required number of buffers is not ↓
┆19┆┆93┆┄┄pos┄sible. <no> is the number of buffers from initpool.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	init of Chres-pool not possible : <no>↲
╞	╞	┆84┆Initialization of ch_res_pool (channel restart messages) ↓
┆19┆┆93┆┄┄with dte_conf_rec.max_chan buffers not possible. <no> is ↓
┆19┆┆93┆┄┄the number of buffers from initpool.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	init of Event-pool not possible : <no>↲
╞	╞	┆84┆Initialization of event_pool (own internal event buf┄↓
┆19┆┆93┆┄┄fers) with pool_conf_rec.eventbuf_no number of buffers ↓
┆19┆┆93┆┄┄is not possible. <no> is the number of buffers from ↓
┆19┆┆93┆┄┄initpool.↲
╞	╞	Fatal, dte.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	****╞	init of HDLC event not possible : <no>↲
╞	╞	┆84┆Initialization of hdlc_ev_pool (hdlc event pool) with ↓
┆19┆┆93┆┄┄pool_conf_rec.hdlc_eventno number of buffers is not ↓
┆19┆┆93┆┄┄possible. <no> is the number of buffers from initpool.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	init of ┆a1┆┆e1┆H┆e1┆eader-pool not possible : <no>↲
╞	╞	┆84┆Initialization of head_pool with the required number of ↓
┆19┆┆93┆┄┄buffers is not possible. <no> is the required number, ↓
┆19┆┆93┆┄┄pool_conf_rec.suphead_no.↲
╞	╞	Fatal, dte.↲
↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
┆b0┆╞	****╞	init of Small-pool not possible : <no>↲
╞	╞	┆84┆Initialization of smallpool (small input buffers see ↓
┆19┆┆93┆┄┄sub┄section 4.1.3) with the required numbers of buffers ↓
┆19┆┆93┆┄┄is not possible. <no> is the number of buffers from ↓
┆19┆┆93┆┄┄init┄pool.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	init of Smess-pool not possible : <no>↲
╞	╞	┆84┆Initialization of supmesspool with the required number ↓
┆19┆┆93┆┄┄of buffers is not possible. <no> is the required number, ↓
┆19┆┆93┆┄┄pool_conf_rec.supmess_no.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	init of Sync-pool not possible : <no>↲
╞	╞	┆84┆Initialization of sync_pool with dte_conf_rec.max_chan ↓
┆19┆┆93┆┄┄buffers not possible. <no> is the number of buffers from ↓
┆19┆┆93┆┄┄initpool.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	init of X.25-pool not possible : <no>↲
╞	╞	┆84┆Initialization of x25pool (X.25 control output buffers ↓
┆19┆┆93┆┄┄see subsection 4.1.3) with the required number of buf┄↓
┆19┆┆93┆┄┄fers is not possible. <no> is the number of buffers from ↓
┆19┆┆93┆┄┄in┄itpool.↲
╞	╞	Fatal, dte.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	****╞	link of <name> not possible : <no>↲
╞	╞	┆84┆It was not possible to link the <name> process. <no> is ↓
┆19┆┆93┆┄┄the result from the call of link.↲
↲
╞	╞	<name> are:↲
╞	╞	   DTE ACC╞	fatal↲
╞	╞	   DTE CHAN╞	fatal↲
╞	╞	   DTE HREC         fatal↲
╞	╞	   DTE LCN0╞	fatal↲
╞	╞	   DTE POOLH        fatal↲
╞	╞	   DTE SNOOP╞	warning↲
╞	╞	   DTE TEST╞	warning↲
╞	╞	   OUTTRACE╞	warning↲
╞	╞	   TRACE╞	          warning↲
╞	╞	Fatal/warning, dte.↲
↲
┆b0┆╞	****╞	local user address length greater than max_u_adr: <no>↲
╞	╞	┆84┆Max_u_adr = 5. <no> is the value of dte_conf_rec.u┄↓
┆19┆┆93┆┄┄ser_length.↲
╞	╞	Fatal, dte.↲
↲
╞	┆b0┆****╞	local user address length negative: <no>↲
╞	╞	┆84┆The user address may not be negative. <no> is the actual ↓
┆19┆┆93┆┄┄value.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	┆84┆max chan to big. Recompile with new value of m_max_chan. ↓
┆19┆┆93┆┆81┆┆82┆┆b0┆Cur = <no>↲
╞	╞	┆84┆The default parameter dte_conf_rec.max_chan greater than ↓
┆19┆┆93┆┄┄the maximum number of channels (m_max_chan). <no> is the ↓
┆19┆┆93┆┄┄current value of m_max_chan.↲
╞	╞	Fatal, dte.↲
↲
╞	┆b0┆****╞	max window size: <mw>↲
╞	╞	┆b0┆smaller than default window size: <dw>↲
╞	╞	┆84┆The indicated max window size is to small, <mw> and <dw> ↓
┆19┆┆93┆┄┄are the actual values.↲
╞	╞	Fatal, dte.↲
↲
┆8c┆┄┆a7┆↓
╞	┆b0┆****╞	max window size to big: <mw>↲
╞	╞	┆84┆Max window size greater than 7, <mw> is the actual ↓
┆19┆┆93┆┄┄value.↲
╞	╞	Fatal, dte.↲
↲
╞	┆b0┆****╞	NCP busy, function : <no>↲
╞	╞	┆84┆The NCP has returned a message with u2 = 'busy'. <no> is ↓
┆19┆┆93┆┄┄the operation code (u1) of the message.↲
╞	╞	Warning, dte.↲
↲
┆b0┆╞	****╞	no HDLC connect buffer.↲
╞	╞	No buffer in hdlc_pool.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	not all buffers released, remaining : <no>↲
╞	╞	┆84┆After removed of the TRACE system, all trace buffers was ↓
┆19┆┆93┆┄┄not released. <no> is the number of missing buffers.↲
╞	╞	Warning, dte.↲
↲
┆b0┆╞	****╞	not enough pickups to internal snoop↲
╞	╞	┆84┆The default value max_pickups was to small (<max_chan) ↓
┆19┆┆93┆┄┄to perform any internal snoop.↲
╞	╞	Warning, dte.↲
↲
┆b0┆╞	****╞	not message in u2 : <no>↲
╞	╞	┆84┆A message with u2 <> '7' is received from the dte pro┄↓
┆19┆┆93┆┄┄cess. Actual value is <no>.↲
╞	╞	Warning, dte_lcnzero.↲
↲
┆b0┆╞	****╞	not possible to connect to the NCP : <no>↲
╞	╞	┆84┆A ┆b0┆connect_lcp ┆f0┆message is returned from the NCP with u2 ↓
┆19┆┆93┆┆81┆┄<> 'ok'. <no> is the returned u2 value.↲
╞	╞	Warning, dte.↲
↲
╞	┆b0┆****╞	own address length negative: <no>↲
╞	╞	┆84┆Own address length may not be negative, <no> is the ↓
┆19┆┆93┆┄┄actual value.↲
╞	╞	Fatal, dte.↲
↲
┆8c┆┄┆a7┆↓
┆b0┆╞	****╞	only snoop of main semaphores↲
╞	╞	┆84┆The default value max_pickups (netenv appendix B.1), was ↓
┆19┆┆93┆┄┄too small for snoop of both main- and sync sema┄phores of ↓
┆19┆┆93┆┄┄the dte_chan process incarnations.↲
╞	╞	Warning, dte.↲
↲
┆b0┆╞	****╞	state table error. Received mess : <no>↲
╞	╞	┆84┆The message received (opcode = <no>) provokes a state ↓
┆19┆┆93┆┄┄table error.↲
╞	╞	Fatal, dte_lcnzero.↲
↲
╞	┆b0┆****╞	┆84┆sum of own address length and user length greater than ↓
┆19┆┆93┆┆81┆┆82┆14↲
╞	╞	┆b0┆own address length: <no>↲
╞	╞	┆b0┆user length       : <no1>↲
╞	╞	┆84┆Own dte address length and subaddress length are to big ↓
┆19┆┆93┆┄┄to fit into the defined length dte_addr_length (=14). ↓
┆19┆┆93┆┄┄<no> and <no1> are the actual values.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	supmess pool empty↲
╞	╞	┆84┆The supervisor message pool (restart- and diagnostic in┄↓
┆19┆┆93┆┄┄dications) is empty.↲
╞	╞	Fatal, dte_lcnzero.↲
↲
┆b0┆╞	****╞	supmess pool only init with : <no>↲
╞	╞	┆84┆Initialization error with supmess_pool. <no> is the num┄↓
┆19┆┆93┆┄┄ber of buffers, the pool is initialized with.↲
╞	╞	Warning, dte_lcnzero.↲
↲
┆b0┆╞	****╞	unexpected DTE LCN0 result↲
╞	╞	┆84┆A ┆b0┆restart_start ┆f0┆message is returned from dte_lcnzero ↓
┆19┆┆93┆┆81┆┄with unexpected u2 value. ┆b0┆This error message is preceded ↓
┆19┆┆93┆┆82┆┆82┆by a print of the message fields.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	unexpected HDLC event result : <no>↲
╞	╞	┆84┆An HDLC event buffer is returned with an unexpected u2 ↓
┆19┆┆93┆┄┄value (<no>).↲
╞	╞	Warning, dte.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	****╞	unexpected HDLC result : <no>↲
╞	╞	┆84┆An HDLC driver operation is returned with an unexpected ↓
┆19┆┆93┆┄┄u2 value (<no>).↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	unexpected HDLC result (1,12) on mess : <no>↲
╞	╞	┆84┆The HDLC operation <no> is returned with either result 1 ↓
┆19┆┆93┆┄┄(driver temporary removed) or 12 (line speed measure┄↓
┆19┆┆93┆┄┄ment).↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	unexpected HDLC result (8) on mess : <no>↲
╞	╞	┆84┆The HDLC operation <no> is returned with result 8 (line ↓
┆19┆┆93┆┄┄allready connected).↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	unexpected NCP result↲
╞	╞	┆84┆An NCP operation is returned with an unexpected u2 val┄↓
┆19┆┆93┆┄┄ue. ┆b0┆This error message is preceded by a print of the ↓
┆19┆┆93┆┆81┆┆82┆message fields.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	unexpected result in sup message↲
╞	╞	┆84┆A dte (supervisor) message is received with an unexpec┄↓
┆19┆┆93┆┄┄ted result. ┆b0┆This error message is preceded by a print of ↓
┆19┆┆93┆┆81┆┆82┆the message fields.↲
╞	╞	Warning, dte.↲
↲
┆b0┆╞	****╞	unexpected sup result : <no>↲
╞	╞	┆84┆A dte_lcnzero message is returned with an unexpected u2 ↓
┆19┆┆93┆┄┄value (<no>).↲
╞	╞	Fatal, dte_lcnzero.↲
↲
┆b0┆╞	****╞	unexpected TIMER result : <no>↲
╞	╞	┆84┆A timer request is returned with an unexpected u2 value ↓
┆19┆┆93┆┄┄(<no>).↲
╞	╞	Fatal, dte_lcnzero.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	****╞	unexpected u3 value in p_active : <no>↲
╞	╞	┆84┆A ┆b0┆sync_mess ┆f0┆is received with an unexpected u3 value ↓
┆19┆┆93┆┆81┆┄(<no>) in state p_active.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	unexpected u3 value in p_restart : <no>↲
╞	╞	┆84┆A ┆b0┆sync_mess ┆f0┆is received with an unexpected u3 value ↓
┆19┆┆93┆┆81┆┄(<no>) in state p_restart.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	unexpected u3 value in p_stopping : <no>↲
╞	╞	┆84┆A ┆b0┆sync_mess ┆f0┆is received with an unexpected u3 value ↓
┆19┆┆93┆┆81┆┄(<no>) in state p_stopping.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	unknown message from DTE┆a1┆┆e1┆_LCN0↲
╞	╞	┆84┆A message with an unknown operation code (u1 value) is ↓
┆19┆┆93┆┄┄received from the dte_lcnzero process. ┆b0┆This error messa┄↓
┆19┆┆93┆┆81┆┆82┆ge is preceded by a print of the message fields.↲
╞	╞	Warning, dte.↲
↲
┆b0┆╞	****╞	unknown process id↲
╞	╞	┆84┆A message is received with an unknown u4 value. ┆b0┆This ↓
┆19┆┆93┆┆81┆┆82┆error message is preceded by a print of the message ↓
┆19┆┆93┆┆81┆┆82┆fields.↲
╞	╞	Warning, dte/dte_lcnzero.↲
↲
┆b0┆╞	****╞	X.25 data packet length negative : <no>↲
╞	╞	┆84┆<no> is the value of dte_conf_rec.x25_datasize.↲
╞	╞	Fatal, dte.↲
↲
┆b0┆╞	****╞	┆84┆X.25 trace stopped caused by exception incarnation ↓
┆19┆┆93┆┆81┆┆82┆<name>↲
╞	╞	┆b0┆DTETRACE version: <no>↲
╞	╞	┆84┆┆84┆An exception in a dtetrace process (version <no>) has ↓
┆19┆┆93┆┄┄occured. The TRACE system is removed.↲
╞	╞	Warning, dte.↲
↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	****╞	WARNING: HDLC driver and internal state error : <no>↲
╞	╞	┆84┆The line state in the HDLC driver and internal in the ↓
┆19┆┆93┆┄┄DTE does not correspond. <no> is the value of the inter┄↓
┆19┆┆93┆┄┄nal line state.↲
╞	╞	Warning, dte.↲
↲
↲
┆a1┆5.2╞	Error Messages from error_report and trace.↲
↲
╞	┆84┆In case ┆b0┆error_report ┆f0┆is used to produce error messages the struc┄↓
┆19┆┆89┆┆81┆┄ture of a message is↲
↲
┆b0┆╞	   trace╞	╞	excode = AABB╞	called from error_report↲
╞	maybe followed by↲
┆b0┆╞	   trace╞	╞	excode = 00u1╞	called from error_report↲
┆b0┆╞	   trace╞	╞	excode = 00u2╞	called from error_report↲
┆b0┆╞	   trace╞	╞	excode = 00u3╞	called from error_report↲
┆b0┆╞	   trace ╞	╞	excode = 00u4╞	called from error_report↲
╞	and maybe at last↲
┆b0┆╞	   trace ╞	╞	excode = 0001╞	called from panic↲
↲
╞	The values of the excode's are↲
╞	   AA  =   process version number↲
╞	   BB  =   different information↲
╞	   u1  =   u1 value of a possible message↲
╞	   u2  =   u2 value of a possible message↲
╞	   u3  =   u3 value of a possible message↲
╞	   u4  =   u4 value of a possible message↲
↲
╞	┆84┆The second to fifth trace do only appear, if a message is invol┄↓
┆19┆┆89┆┄┄ved in the error and the last trace is only to provoke a process ↓
┆19┆┆89┆┄┄exit (exception).↲
↲
╞	┆84┆The interpretation of the traces is not simple. It requires an ↓
┆19┆┆89┆┄┄source listning, because no number is given to the individual er┄↓
┆19┆┆89┆┄┄rors.↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆This print procedure is followed in the processes:↲
╞	   dte_access, dte_chan, dte_hrec and dte_lcnzero.↲
↲
╞	┆84┆If a trace with excode = 00FF occures it is an indication of, that ↓
┆19┆┆89┆┄┄in the exception procedure (in dte, dte_chan, dte_lcnzero) no in┄↓
┆19┆┆89┆┄┄ternal testbuffer was empty, so no copy of the internal testarea ↓
┆19┆┆89┆┄┄is performed.↲
↲

════════════════════════════════════════════════════════════════════════
↓
«index» formatlinie til RC manualer↲
┆14┆┆b3┆↲
┆14┆┆b3┆┆06┆- ┆0b┆ -↲
┆a1┆6.╞	TRACE AND DEBUG TOOLS.↲
↲
╞	┆84┆At runtime several possibilities exists to see what is happening ↓
┆19┆┆89┆┄┄either inside the DTE System or on the communication line.↲
↲
╞	┆84┆dtetrace (section 6.1) is used to trace the X.25 level 3 communi┄↓
┆19┆┆89┆┄┄cation on the console, dtetest (section 6.2) is used to control ↓
┆19┆┆89┆┄┄internal test of 3 processes (dte, dte_lcnzero, and dte_chanxxx), ↓
┆19┆┆89┆┄┄and generation of dte_access test messages, and some messages on ↓
┆19┆┆89┆┄┄the console, and dtesnoop (section 6.3) is used to snoop messages ↓
┆19┆┆89┆┄┄received at the main and synchronization semaphores of the ↓
┆19┆┆89┆┄┄dte_chan process.↲
↲
╞	┆84┆This three systems are ┆b0┆not mandatory┆f0┆ for normal run of the DTE mo┄↓
┆19┆┆89┆┆81┆┄dule. They can be outmitted at link time (see subsection 7.3.2).↲
↲
↲
┆a1┆6.1╞	Trace System.↲
↲
╞	┆84┆As mentioned above the trace system is used to print the X.25 ↓
┆19┆┆89┆┄┄level 3 communication on the console. The system consists of 2 ↓
┆19┆┆89┆┄┄processes (dtetrace and outtrace), three external procedures ↓
┆19┆┆89┆┄┄(init_trace, end_trace, and tracing) and a buffer pool (trace_buf) ↓
┆19┆┆89┆┄┄of the type specified in subsection 4.1.3.↲
↲
╞	┆84┆In the following four subsections an overview and a short descrip┄↓
┆19┆┆89┆┄┄tion of the system are given. Furthermore the output on the con┄↓
┆19┆┆89┆┄┄sole is explained.↲
↲
↲
┆a1┆6.1.1╞	Process Overview and Operation.↲
↲
╞	┆84┆In figure 42 the trace messages flow are outlined together with an ↓
┆19┆┆89┆┄┄indication of where the X.25 level 3 communication are traced ↓
┆19┆┆89┆┄┄(i.e. in which processes the in-/output buffers are copied.↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 42: Message flow in the trace system.↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆As indicated in figure 42 the output flow are traced in the pro┄↓
┆19┆┆89┆┄┄cess outtrace and the input flow in dte_hrec.↲
↲
╞	┆84┆The trace system may be in three states:↲
↲
╞	   1)  removed↲
╞	   2)  created and not active↲
╞	   3)  created and active.↲
↲
┆84┆╞	┆84┆Only in the last state the copy of data buffers will be performed, ↓
┆19┆┆89┆┄┄and only in the last two states the data flow will pass through ↓
┆19┆┆89┆┄┄the process outtrace.↲
↲
╞	┆84┆The states of the system can be changed dynamicly using an LCP ↓
┆19┆┆89┆┄┄operation (DTE 53,0). The state is indicated using two boolean va┄↓
┆19┆┆89┆┄┄riables (in process dte).↲
↲
╞	_____________________________________________________↲
╞	!      trace_run !     ┆82┆false┆81┆      !      ┆82┆true┆81┆       !↲
╞	!                !                !                 !↲
╞	┆a1┆! trace_on       !                !                 !↲
         !     ┆82┆false┆81┆      !     ┆82┆removed┆81┆    ! created and     !↲
╞	┆a1┆!┆a1┆                !                ! not active      !↲
╞	!     ┆82┆true┆81┆       !                ! created and     !↲
╞	┆a1┆!                !                !   active        !↲
↲
╞	Table 8: State variables of the trace system.↲
↲
╞	┆84┆Whenever the variable trace_on changes from false to true or oppo┄↓
┆19┆┆89┆┄┄site, it is indicated on the console (format and text please see ↓
┆19┆┆89┆┄┄subsection 6.1.4) using the external procedures ┆b0┆init_trace┆f0┆ and ↓
┆19┆┆89┆┆81┆┄┆b0┆end_trace┆f0┆. The copying process of data in-/output is performed us┄↓
┆19┆┆89┆┆82┆┄ing the external procedure ┆b0┆tracing┆f0┆. All three procedures are exp┄↓
┆19┆┆89┆┆83┆┄lained in subsection 4.1.2.5.↲
↲
╞	┆84┆Whenever a trace buffer is outfilled (either by ┆b0┆init_trace, ↓
┆19┆┆89┆┆81┆┆82┆end_trace┆f0┆ or ┆b0┆tracing┆f0┆) it is returned (in the procedure) to the ↓
┆19┆┆89┆┆82┆┄main semaphore of the dtetrace process.↲
↲
┆8c┆┄┆a7┆↓
╞	┆84┆In the dtetrace process the data are time stamped and formatted ↓
┆19┆┆89┆┄┄according to a standard format and operator defined parameters ↓
┆19┆┆89┆┄┄(subsection 6.1.3), put in a standard zone output buffer and this ↓
┆19┆┆89┆┄┄buffer is signalled to the operator process. The trace buffer is ↓
┆19┆┆89┆┄┄then returned to the common pool trace_buf.↲
↲
╞	┆84┆The two processed constituting the trace system has the following ↓
┆19┆┆89┆┄┄process heads.↲
↲
╞	┆b0┆PROCESS dte_trace (↲
╞	   opsem╞	       : sempointer;↲
╞	   VAR trace_ptr : ! tap_pointer;↲
╞	   VAR trace_buf : ph_type;↲
╞	   VAR break_sem : semaphore;↲
╞	   console_out   : boolean↲
╞	   );↲
↲
┆b0┆╞	PROCESS out_trace (↲
╞	   VAR in_ptr    : ! tap_pointer;↲
╞	   VAR hdlc_sem  : ! sempointer;↲
╞	   VAR trace_buf : ph_type;↲
╞	   VAR trace_on  : ! boolean↲
  ╞	   );↲
↲
╞	opsem╞	╞	: ┆84┆Pointer to the main semaphore of the opera┄↓
┆19┆┆9f┆┄┄tor process.↲
↲
╞	trace_ptr╞	╞	: ┆84┆Main semaphore pointer of the dtetrace pro┄↓
┆19┆┆9f┆┄┄cess.↲
↲
╞	trace_buf╞	╞	: Trace buffer pool.↲
↲
╞	break_sem╞	╞	: ┆84┆Semaphore holding the break message used in ↓
┆19┆┆9f┆┄┄the exception procedure.↲
↲
╞	console_out╞	: ┆84┆If true the version id is printed on the ↓
┆19┆┆9f┆┄┄console at process start↲
↲
╞	in_ptr╞	╞	: ┆84┆Main semaphore pointer of the outtrace pro┄↓
┆19┆┆9f┆┄┄cess.↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	hdlc_sem╞	╞	: Semaphore pointer to the HDLCLCP.↲
↲
╞	trace_on╞	╞	: ┆84┆Boolean indicating whether the X.25 packet ↓
┆19┆┆9f┆┄┄flow shall be traced (true) or not (false). ↓
┆19┆┆9f┆┄┄Changed dynamicly by the dte process.↲
↲
↲
┆a1┆6.1.2╞	External Communication.↲
↲
╞	┆84┆For operator communication standard RTP input/output zones (ref. ↓
┆19┆┆89┆┄┄(15)) are used. The format of a trace buffer is described below. A ↓
┆19┆┆89┆┄┄trace buffer is only generated in one of the tracing procedures ↓
┆19┆┆89┆┄┄(subsection 4.1.2.5).↲
↲
╞	┆a1┆┆b0┆Message name┆e1┆:   timeread↲
↲
╞	┆a1┆Message format┆e1┆:↲
╞	╞	      message sent╞	╞	answer recv.↲
╞	     u1╞	╞	1╞	╞	    unch↲
╞	     u2╞	╞	7╞	╞	     0↲
╞	     u3╞	╞	-╞	╞	     0↲
╞	     u4╞	╞	-╞	╞	    unch↲
↲
╞	     buf╞	╞	-╞	╞	 delaytype↲
↲
╞	delaytype is defined in the standard environment.↲
↲
╞	┆a1┆Function┆e1┆:↲
↲
╞	┆84┆The dtetrace process requests the timer process to return the cur┄↓
┆19┆┆89┆┄┄rent time and date. These are used to time stamp the console out┄↓
┆19┆┆89┆┄┄put.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	┆a1┆Message name┆e1┆:   trace_init↲
↲
╞	┆a1┆Message format┆e1┆:↲
╞	╞	      message recv.↲
╞	     u1╞	╞	2↲
╞	     u2╞	╞	-↲
╞	     u3╞	╞	-↲
╞	     u4╞	╞	-↲
↲
╞	     buf╞	╞	-↲
↲
╞	┆a1┆Function┆e1┆:↲
↲
╞	┆84┆The message indicates, that the level 3 trace has been started. ↓
┆19┆┆89┆┄┄Start identification (see subsection 6.1.4) including date and ↓
┆19┆┆89┆┄┄time is printed on the console.↲
↲
┆b0┆╞	┆a1┆Message name┆e1┆:   trace_end↲
↲
╞	┆a1┆Message format┆e1┆:↲
╞	╞	      message recv.↲
╞	     u1╞	╞	4↲
╞	     u2╞	╞	-↲
╞	     u3╞	╞	-↲
╞	     u4╞	╞	-↲
↲
╞	     buf╞	╞	-↲
↲
╞	┆a1┆Function┆e1┆:↲
↲
╞	┆84┆The message indicates, that the level 3 trace has been stopped. ↓
┆19┆┆89┆┄┄Stop identification (see subsection 6.1.4) including date and time ↓
┆19┆┆89┆┄┄is printed on the console.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	┆a1┆Message name┆e1┆:   trace_data↲
↲
╞	┆a1┆Message format┆e1┆:↲
╞	╞	      message recv.↲
╞	     u1╞	╞	3↲
╞	     u2╞	╞	-↲
╞	     u3╞	       direction↲
╞	     u4╞	╞	-↲
↲
╞	     buf╞	       trace_buf_type↲
↲
╞	     trace_buf_type = record↲
╞	╞	╞	    first, last, next : integer;↲
╞	╞	╞	    x25_packet        : x25_packet_type;↲
╞	╞	╞	  end;↲
↲
╞	     x25_packet_type is the copied X.25 packet.↲
↲
╞	┆a1┆Function┆e1┆:↲
↲
╞	┆84┆The received message contains an X.25 packet, which is decoded us┄↓
┆19┆┆89┆┄┄ing the procedure ┆b0┆dec_x25┆f0┆ (see subsection 4.1.2.1). The result ↓
┆19┆┆89┆┆81┆┄from this decoding together with the time and direction (received ↓
┆19┆┆89┆┆81┆┄= 0, sent = 1) is formatted and printed on the console (see sub┄↓
┆19┆┆89┆┆81┆┄section 6.1.4).↲
↲
┆b0┆╞	┆a1┆Message name┆e1┆:   trace_error↲
↲
╞	┆a1┆Message format┆e1┆:↲
╞	╞	      message recv.↲
╞	     u1╞	╞	5↲
╞	     u2╞	╞	-↲
╞	     u3╞	╞	-↲
╞	     u4╞	       error_type↲
↲
╞	     buf            -↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆a1┆Function┆e1┆:↲
↲
╞	┆84┆An error in one of the trace procedures has occured. At the moment ↓
┆19┆┆89┆┄┄only one error has been identified (copy error in tracing, ↓
┆19┆┆89┆┄┄error_type = 1). An identification of the error is printed on the ↓
┆19┆┆89┆┄┄console.↲
↲
↲
┆a1┆6.1.3╞	Operator Commands.↲
↲
╞	┆84┆As mentioned in subsection 6.1.1 the operator can set parameters ↓
┆19┆┆89┆┄┄de┄fining some of the format for the trace output. The following ↓
┆19┆┆89┆┄┄com┄mands are available:↲
↲
┆b0┆╞	   data  yes no ╞	┆f0┆: ┆84┆If the option is yes, the user data field of ↓
┆19┆┆9f┆┆81┆┄an X.25 DATA packet is printed on the next ↓
┆19┆┆9f┆┆81┆┄line in either ascii or hexadecimal format. ↓
┆19┆┆9f┆┆81┆┄If the option is no the data is not printed. ↓
┆19┆┆9f┆┆81┆┄┆b0┆Default : no.↲
↲
┆b0┆╞	   call  yes no╞	┆f0┆: ┆84┆If the option is yes, the address fields and ↓
┆19┆┆9f┆┆81┆┄facility fields of CALL REQUEST and INCOM┄↓
┆19┆┆9f┆┆81┆┄ING CALL are printed on the next line in ↓
┆19┆┆9f┆┆81┆┄either ascii or hexadecimal format. If the ↓
┆19┆┆9f┆┆81┆┄option is no, no extra fields are printed.↲
╞	╞	╞	  ┆b0┆Default : no.↲
↲
┆b0┆╞	   diag  yes no╞	┆f0┆: ┆84┆If the option is yes, the DIAGNOSTIC expla┄↓
┆19┆┆9f┆┆81┆┄nation field is printed on the next line in ↓
┆19┆┆9f┆┆81┆┄either ascii or hexadecimal format. If the ↓
┆19┆┆9f┆┆81┆┄option is no, the field is not printed.↲
╞	╞	╞	  ┆b0┆Default : no.↲
↲
┆b0┆╞	   hex╞	╞	┆f0┆: ┆84┆The print format is changed to hexadecimal. ↓
┆19┆┆9f┆┆81┆┄┆b0┆Default format.↲
↲
╞	   ┆b0┆ascii╞	╞	┆f0┆: ┆84┆The print format is changed to ascii.↲
╞	╞	╞	  ┆b0┆Not default format.↲
↲
┆8c┆┄┆a7┆↓
╞	┆84┆If an error occurs in the commands the dtetrace process answers ↓
┆19┆┆89┆┄┄with:↲
↲
╞	┆a1┆┆e1┆   ┆b0┆****  WHAT ?↲
↲
↲
┆a1┆6.1.4╞	Traceoutput Description.↲
↲
╞	┆84┆In this subsection the fields of a trace are explained and in ap┄↓
┆19┆┆89┆┄┄pendix D.1 an example of a trace is shown.↲
↲
╞	┆84┆When the trace system is activate the following line is printed:↲
↲
╞	┆a1┆┆e1┆   ┆b0┆***  X.25 trace initialized at <date and time>↲
↲
╞	and at deactivation:↲
↲
╞	┆a1┆┆e1┆   ┆b0┆***  trace stopped at <date and time>↲
↲
╞	┆84┆Each line in between these two has the following format:↲
↲
╞	<time>╞	╞	: Time stamp.↲
↲
╞	recv/send╞	          : Direction of flow (input/output).↲
↲
╞	<packet id>╞	: Packet type (e.g. data, rr, reset req).↲
↲
╞	LCN = <no>╞	: Logical channel number.↲
↲
╞	qdm=<no> / -d-=<no> : ┆84┆The values of the q-, d-, and m- bits if ↓
┆19┆┆9f┆┄┄they are included in the packet format.↲
↲
╞	PS = <no>╞	╞	: ┆84┆Send sequence number if included in the pac┄↓
┆19┆┆9f┆┄┄ket format.↲
↲
╞	PR = <no>╞	╞	: ┆84┆Acknowledge sequence number (next expected) ↓
┆19┆┆9f┆┄┄if included in the packet format.↲
↲
╞	octet 4 = <no>╞	: If included in the packet format.↲
↲
┆8c┆┄┆a8┆↓
╞	octet 5 = <no>╞	: If included in the packet format.↲
↲
╞	size  ╞	╞	: ┆84┆The length of the packet incl. the X.25 head if ↓
┆19┆┆9f┆┄┄the packet is either a CALL REQUEST, INCOM┄↓
┆19┆┆9f┆┄┄ING CALL, CALL ACCEPTED, CALL CONNECTED, ↓
┆19┆┆9f┆┄┄DIAGNOSTIC or DATA.↲
↲
╞	┆84┆If the user data field of the packet is printed (see subsection ↓
┆19┆┆89┆┄┄6.1.3) this will occure on the next line.↲
↲
╞	┆84┆The following error texts may occure in connection with the trace ↓
┆19┆┆89┆┄┄system.↲
↲
╞	┆a1┆┆e1┆  ┆b0┆ >>>>  packet smaller than 3 bytes↲
↲
↲
╞	┆a1┆┆e1┆  ┆b0┆ >>>  packet format error↲
↲
↲
╞	┆a1┆┆e1┆   ┆b0┆>>>  unknown packet type↲
↲
↲
╞	┆a1┆┆e1┆  ┆b0┆ >>>  trace buffer copy error↲
↲
↲
╞	┆a1┆┆e1┆  ┆b0┆ >>>  unknown trace opcode↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆6.2╞	Internal Test System.↲
↲
╞	┆84┆A possibility exists to generate internal test records in the ↓
┆19┆┆89┆┄┄three dte processes: dte, dte_lnczero, dte_chanxxx, and to 'read' ↓
┆19┆┆89┆┄┄variables in the dte_access process. Furthermore information ↓
┆19┆┆89┆┄┄concerning the status of the communication line may be printed on ↓
┆19┆┆89┆┄┄the console. The link between the DTE Mo┄dule and the console/ope┄↓
┆19┆┆89┆┄┄rator is the dtetest process. To maintain a DTE global timer a ↓
┆19┆┆89┆┄┄dteclock process exists.↲
↲
╞	┆84┆In the following four subsections an overview and short descrip┄↓
┆19┆┆89┆┄┄tion of the system are given. Furthermore the input from / output ↓
┆19┆┆89┆┄┄to the console are explained. ↲
↲
↲
┆a1┆6.2.1╞	Process Overview and Operation.↲
↲
╞	┆84┆As mentioned above the dtetest process is the link between the in┄↓
┆19┆┆89┆┄┄ternal test generation and the console. In the three processes ↓
┆19┆┆89┆┄┄dte, dte_lcnzero and dte_chanxxx testrecords are generated in the ↓
┆19┆┆89┆┄┄procedure ┆b0┆otest┆f0┆, (triggered by certant events) and stored in ↓
┆19┆┆89┆┆81┆┄an inter┄nal testarea of each process. Whenever this area is full, ↓
┆19┆┆89┆┆81┆┄the pro┄cess tries to copy it to a testbuffer requested from the ↓
┆19┆┆89┆┆81┆┄test se┄maphore. If it succed the area is cleared otherwise it is ↓
┆19┆┆89┆┆81┆┄used cyclic.↲
↲
╞	┆84┆The testbuffer is returned to the main semaphore of the dtetest ↓
┆19┆┆89┆┄┄process. This process signals the buffer to the test semaphore if ↓
┆19┆┆89┆┄┄not imme┄diatly print is required. If later on, a print is ↓
┆19┆┆89┆┄┄requested, the dtetest process will search the test semaphore for ↓
┆19┆┆89┆┄┄testbuffers from the required process, format the test records and ↓
┆19┆┆89┆┄┄use a stand┄ard i/o zone to print the testrecords on the console.↲
↲
╞	┆84┆As can be seen from this the testbuffers are used as a spooling ↓
┆19┆┆89┆┄┄queue with a certant life time. The life time depends on the rate ↓
┆19┆┆89┆┄┄by which testrecords are generated, the number of buffers, and how ↓
┆19┆┆89┆┄┄many processes generating testrecords.↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆In figure 43 the testmessage flow is outlined.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 43: Message flow of testmessages.↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆Whether a process shall generate testrecords or not depends on a ↓
┆19┆┆89┆┄┄bit in the testbit record (┆b0┆test┆f0┆). Beside these bits the testbit ↓
┆19┆┆89┆┆81┆┄record contains bits, which value indicate whether version infor┄↓
┆19┆┆89┆┆81┆┄mation and information con┄cerning the status of the com┄mu┄nication ↓
┆19┆┆89┆┆81┆┄line shall be printed or not. The test┄bit record is described ↓
┆19┆┆89┆┆81┆┄below.↲
↲
╞	┆84┆These last informations are printed directly from the dte process, ↓
┆19┆┆89┆┄┄and at the time the event occurs. The bits controlling the prin┄↓
┆19┆┆89┆┄┄ting cannot be set from the console via the dte┄test process, but ↓
┆19┆┆89┆┄┄can be read.↲
↲
╞	test = packed array (1..8) of boolean;↲
↲
╞	    ________________________↲
╞	┆a1┆┆e1┆    ┆a1┆ 1  2  3  4  5  6  7  8 ↲
╞	╞	╞	               line event printing↲
╞	╞	                         modem signals printing↲
╞	╞	                         level 3 restart printing↲
╞	╞	                         line state printing↲
╞	╞	                         version printing↲
╞	                                   dte_lcnzero test generation↲
╞	                                   dte_chan test generation↲
╞	                                   dte test generation.↲
↲
╞	┆84┆If a bit is true the actions described will be performed, other┄↓
┆19┆┆89┆┄┄wise nothing.↲
↲
┆b0┆╞	dte test generation╞	          ┆f0┆: ┆84┆the dte process will generate in┄↓
┆19┆┆a9┆┆81┆┄ternal testrecords↲
↲
╞	┆b0┆dte_chan test generation╞	┆f0┆: ┆84┆the dte_chan incarnations will ge┄↓
┆19┆┆a9┆┆81┆┄nerate internal testrecords↲
↲
┆b0┆╞	dte_lcnzero test generation╞	┆f0┆: ┆84┆the dte_lcnzero process will gene┄↓
┆19┆┆a9┆┆81┆┄rate internal testrecords↲
↲
┆b0┆╞	version printing┆f0┆╞	╞	: ┆84┆the dte, dtetest and dtetrace will ↓
┆19┆┆a9┆┆81┆┄print version information on the ↓
┆19┆┆a9┆┆81┆┄console at start time↲
↲
┆8c┆┄┆a9┆↓
╞	┆b0┆line state printing╞	╞	┆f0┆: ┆84┆the internal line state (see sub┄↓
┆19┆┆a9┆┆81┆┄sec┄tion 4.2.2) and the line event ↓
┆19┆┆a9┆┆81┆┄are printed every time an event ↓
┆19┆┆a9┆┆81┆┄buffer is returned from the HDLC↲
↲
┆b0┆╞	level 3 restart printing╞	┆f0┆: ┆84┆whenever the DTE performs an re┄↓
┆19┆┆a9┆┆81┆┄start, the event causing the re┄↓
┆19┆┆a9┆┆81┆┄start is printed↲
↲
┆b0┆╞	modem signals printing╞	┆f0┆: ┆84┆if it is not possible to set the ↓
┆19┆┆a9┆┆81┆┄modem signals (subsection 4.1.2.2) ↓
┆19┆┆a9┆┆81┆┄pro┄perly, the value of the signals ↓
┆19┆┆a9┆┆81┆┄are printed↲
↲
┆b0┆╞	line event printing╞	╞	┆f0┆: ┆84┆the received line event (from the ↓
┆19┆┆a9┆┆81┆┄HDLC) is printed.↲
↲
╞	┆84┆All the different texts and formats are outlined in subsection ↓
┆19┆┆89┆┄┄6.2.4.↲
↲
╞	┆84┆The individual bits in the testbit record can be changed using ↓
┆19┆┆89┆┄┄either an LCP operation (DTE 52,0) or directly from the console. ↓
┆19┆┆89┆┄┄The last possibility only includes bit 1, 2 and 3. The operator ↓
┆19┆┆89┆┄┄commands are explained in subsection 6.2.3.↲
↲
╞	┆84┆An internal test (e.g. in dte) can be started/stopped by setting ↓
┆19┆┆89┆┄┄the appropriate bit to true/false respectively. This action only ↓
┆19┆┆89┆┄┄starts or stops the ┆a1┆generation┆e1┆ of testrecords, nothing is printed ↓
┆19┆┆89┆┄┄on the console. In order to get the formatted testrecords, the op┄↓
┆19┆┆89┆┄┄erator has to issue the command '┆b0┆print┆f0┆', while the test still is ↓
┆19┆┆89┆┆81┆┄active. This command will starts the printing of the testrecords ↓
┆19┆┆89┆┆81┆┄on the console and will continue until (and include) the next buf┄↓
┆19┆┆89┆┆81┆┄fer of the specified process type is received by the dtetest pro┄↓
┆19┆┆89┆┆81┆┄cess.↲
↲
╞	┆84┆An other possibility is to set the dtetest process in the mode ↓
┆19┆┆89┆┄┄'┆b0┆running┆f0┆', which means that all received testbuffers are printed ↓
┆19┆┆89┆┆81┆┄immediately.↲
↲
┆8c┆┄┆a7┆↓
╞	┆84┆Furthermore it is possible to get the current value of the test ↓
┆19┆┆89┆┄┄area copied to a testbuffer immediately using the command ↓
┆19┆┆89┆┄┄'┆b0┆provoke┆f0┆'.↲
↲
╞	┆84┆The above mentioned commands and their format are explained in ↓
┆19┆┆89┆┄┄subsection 6.2.3.↲
↲
╞	┆84┆All test records contain a dte global time stamp, i.e. a time only ↓
┆19┆┆89┆┄┄relevant to the processes of the DTE Module. This makes it poss┄↓
┆19┆┆89┆┄┄ible to correlate events happening in different DTE processes. The ↓
┆19┆┆89┆┄┄dteclock process (internal process in dtetest) maintains this ↓
┆19┆┆89┆┄┄'clock' (global_time) by reques┄ting a timer interrupt each 200msec ↓
┆19┆┆89┆┄┄from the TIMER.↲
↲
╞	┆84┆The process head of the dtetest and dteclock processes are defined as:↲
↲
┆b0┆╞	PROCESS dte_test (↲
╞	   VAR mainsem╞	: semaphore;↲
╞	   VAR operatorsem  : ! sempointer;↲
╞	   VAR dte_test_hook,↲
╞	       breaksem     : semaphore;↲
╞	   VAR global_time  : integer;↲
╞	   VAR test_record  : testrectype↲
╞	   );↲
↲
╞	┆b0┆PROCESS dteclock (↲
╞	  VAR mainsem       : semaphore;↲
╞	  VAR global_time   : integer↲
╞	  );↲
↲
↲
╞	mainsem╞	╞	: Own main semaphore.↲
↲
╞	operatorsem╞	: ┆84┆Main semaphore pointer of the operator pro┄↓
┆19┆┆9f┆┄┄cess.↲
↲
╞	dte_test_hook╞	: ┆84┆Semaphore used as a DTE global testbuffer ↓
┆19┆┆9f┆┄┄pool (testsem).↲
↲
┆8c┆┄┆a7┆↓
╞	breaksem╞	╞	: ┆84┆Semaphore holding the break message used in ↓
┆19┆┆9f┆┄┄the exception procedure.↲
↲
╞	global_time╞	: ┆84┆DTE global time used to time stamp testre┄↓
┆19┆┆9f┆┄┄cords.↲
↲
╞	test_record╞	: testbits record.↲
↲
↲
┆a1┆6.2.2╞	External Communication.↲
↲
╞	┆84┆For operator communication standard RTP input/output zones (ref. ↓
┆19┆┆89┆┄┄(15)) are used. Beside these messages only two type of messages ↓
┆19┆┆89┆┄┄(dte_access test answers and testmessages) are received by the dtetest ↓
┆19┆┆89┆┄┄pro┄cess and one (timer request answers) by the dteclock process.↲
↲
┆b0┆╞	┆a1┆Message name┆e1┆:   timer_mess↲
↲
╞	┆a1┆Message format┆e1┆:↲
╞	╞	      message sent╞	╞	answer recv.↲
╞	      u1╞	╞	5╞	╞	   unch↲
╞	      u2╞	         200╞	╞	   result↲
╞	      u3╞	╞	0╞	╞	     0↲
╞	      u4╞	╞	-╞	   ╞	    unch↲
↲
╞	      buf╞	╞	-╞	╞	      -↲
↲
╞	┆a1┆Function┆e1┆:↲
↲
╞	┆84┆The dteclock process requests the timer process to return the mes┄↓
┆19┆┆89┆┄┄sage after the time specified : 200 * 2**0 msec = 200 msec.↲
↲
╞	┆a1┆Result┆e1┆:↲
↲
╞	   ok╞	╞	(0) :  message processed properly.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	┆a1┆Message name┆e1┆:   dte_test_message↲
↲
╞	┆a1┆Message format┆e1┆:↲
╞	╞	      message recv.↲
╞	      u1╞	╞	3↲
╞	      u2╞	╞	7↲
╞	      u3╞	      process_type↲
╞	      u4╞	╞	0↲
↲
╞	      buf╞	        testbuf↲
↲
╞	      testbuf = record↲
╞	╞	        first, last, next : integer;↲
╞	╞	        testarea          : ┆84┆array (0.. testmax) of↲
╞	╞	╞	╞	        testrecords;↲
╞	╞	      end;↲
↲
╞	┆84┆The different testrecords are explained in subsection 6.2.4.↲
↲
╞	┆a1┆Function┆e1┆:↲
↲
╞	┆84┆The dtetest process checks if the testrecords shall be printed ↓
┆19┆┆89┆┄┄immediately, and if so the proper actions are performed. If not, ↓
┆19┆┆89┆┄┄the value of u4 is changed to not_printed (=1) and the message is ↓
┆19┆┆89┆┄┄queued at the testbuffer hook (testsem) for later printing if re┄↓
┆19┆┆89┆┄┄quired.↲
↲
╞	process_type is:↲
↲
╞	   0    : dte process↲
╞	   1    : dte_lcnzero process↲
╞	   3+y  : dte_chan process incarnation number y (dte_chany).↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆b0┆┆a1┆Message name:┆e1┆   dte_access_test↲
↲
╞	┆a1┆Message format:↲
╞	╞	       message sent                answer recv.↲
╞	      u1╞	╞	func╞	╞	╞	unch↲
╞	      u2╞	╞	  7╞	╞	       ill_opcode↲
╞	      u3╞	    user_no/stream_no/ch_index╞	unch↲
╞	      u4╞	            -╞	╞	       see below↲
↲
╞	      buf╞	            -╞	╞	         testbuf↲
↲
╞	      testbuf = array (1..14) of bytes;↲
↲
╞	┆a1┆Function:↲
↲
╞	┆84┆A dte_access test message is received and the testbuf is printed ↓
┆19┆┆89┆┄┄on the console, each byte both as a digit and hexadecimal. The ↓
┆19┆┆89┆┄┄dtetest process generates the test message on operator request ↓
┆19┆┆89┆┄┄(see subsection 6.2.3) and sends it to the dte_access process. ↓
┆19┆┆89┆┄┄Func specifies which variable values the dte_access process shall ↓
┆19┆┆89┆┄┄return. The correlation between func and u3 is :↲
↲
╞	╞	func╞	   u3╞	╞	 variable↲
╞	╞	128╞	user_no╞	╞	user_table↲
╞	╞	160╞	stream_no╞	╞	stream_table↲
╞	╞	224╞	ch_index╞	╞	channel_table↲
↲
╞	┆84┆The user_no, stream_no and ch_index may be changed in the dte_ac┄↓
┆19┆┆89┆┄┄cess process, if it is outside the interval defined for the table ↓
┆19┆┆89┆┄┄in question. The returned value (in u4) is the nearest limit.↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆6.2.3╞	Operator Commands.↲
↲
╞	┆84┆As mentioned in subsection 6.2.1 the operator can control the test ↓
┆19┆┆89┆┄┄generation and printing from the console and generate dte_access ↓
┆19┆┆89┆┄┄test messages. To support this control the following commands are ↓
┆19┆┆89┆┄┄available:↲
↲
╞	┆84┆In the commands <process name> has to be substituted with one of ↓
┆19┆┆89┆┄┄the following↲
╞	╞	dte_sup      for    the dte process↲
╞	╞	dte_chan     for    the dte_chan processes↲
╞	╞	dte_lcnzero  for    the dte_lcnzero process.↲
↲
↲
┆b0┆╞	start   <process name>   run↲
↲
╞	┆84┆Testrecord generation is started in the specified process or if ↓
┆19┆┆89┆┄┄the option is ┆b0┆run ┆f0┆immediately print of testbuffers is started.↲
↲
↲
┆b0┆╞	stop   <process name>    run↲
↲
╞	┆84┆Testrecord generation is stopped in the specified process or if ↓
┆19┆┆89┆┄┄the option is ┆b0┆run ┆f0┆the immediately print of testbuffers is stopped.↲
↲
↲
┆b0┆╞	print   <process name>    test_rec↲
↲
╞	┆84┆The queued testbuffers from the specified process, which not al┄↓
┆19┆┆89┆┄┄ready are printed, are printed in a predefined format (see subsec┄↓
┆19┆┆89┆┄┄tion 6.2.4). Furthermore a bit is set indicating that the next ↓
┆19┆┆89┆┄┄buffer received from the process shall be printed. If the option ↓
┆19┆┆89┆┄┄┆b0┆test_rec ┆f0┆is used, the value of the testbits record is printed. If ↓
┆19┆┆89┆┆81┆┄a testbit is true a text is printed otherwise nothing. The corre┄↓
┆19┆┆89┆┆81┆┄la┄tion be┄tween texts and bits are:↲

════════════════════════════════════════════════════════════════════════
↓
╞	dte test generation╞	         bit 1  :  DTE_SUP↲
╞	dte_chan test generation     bit 2  :  DTE_CHAN↲
╞	dte_lcnzero test generation  bit 3  :  DTE_LCNZERO↲
╞	version print╞	         bit 4  :  CONSOLE ID↲
╞	line state printing╞	         bit 5  :  HDLC_STATE↲
╞	level 3 restart printing     bit 6  :  LEVEL3_MESS↲
╞	modem signals printing       bit 7  :  MODEM_SIGNAL↲
╞	line event printing          bit 8  :  HDLC_EVENT↲
↲
┆b0┆╞	provoke   dte_sup  dte_lcnzero  dte_chan <no>↲
↲
╞	┆84┆The DTE module is required to provoke the specified process incar┄↓
┆19┆┆89┆┄┄nation to copy the current testarea to a testbuffer and return ↓
┆19┆┆89┆┄┄this to the dtetest process. <no> specifies the last three digits ↓
┆19┆┆89┆┄┄in the dte_chan incarnation name, which can be obtained utilizing ↓
┆19┆┆89┆┄┄the OPSYS command '┆b0┆list┆f0┆'.↲
↲
╞	┆b0┆create   <func>    <no>↲
↲
╞	┆84┆A dte_access test message is generate and sent to the dte_access ↓
┆19┆┆89┆┄┄process. Only one test message can be outstanding. When the ↓
┆19┆┆89┆┄┄message is returned from the dte_access process, the buffer is ↓
┆19┆┆89┆┄┄printed on the console (please see subsection 6.2.4.5). The ↓
┆19┆┆89┆┄┄following values of func are allowed :↲
↲
╞	  <func>╞	    u1╞	             <no>╞	      ╞	buffer at return↲
╞	    1╞	128 = (1*4+0)*32╞	user number╞	┆84┆contains infor┄↓
┆19┆┆bb┆┄┄mation from ↓
┆19┆┆bb┆┄┄user_table(user ↓
┆19┆┆bb┆┄┄number)↲
╞	    2╞	160 = (1*4+1)*32╞	stream number     ╞	┆84┆contains infor┄↓
┆19┆┆bb┆┄┄mation from ↓
┆19┆┆bb┆┄┄stream_table(stream ↓
┆19┆┆bb┆┄┄number)↲
╞	    3╞	224 = (1*4+3)*32╞	channel index╞	┆84┆contains infor┄↓
┆19┆┆bb┆┄┄mation from ↓
┆19┆┆bb┆┄┄channel_table(channel ↓
┆19┆┆bb┆┄┄index)↲
↲
┆8c┆┄┆a7┆↓
╞	┆84┆If <no> is smaller than 1 it is set to 1 and if it is greater than ↓
┆19┆┆89┆┄┄255 it is set to 255.↲
↲
↲
┆a1┆6.2.4╞	Testoutput Description.↲
↲
╞	┆84┆In the following three subsections are the format of the testre┄↓
┆19┆┆89┆┄┄cords and testoutput print described. Each subsection is dedicated ↓
┆19┆┆89┆┄┄to one process. In subsection 6.2.4.4 the printed text concer┄ning ↓
┆19┆┆89┆┄┄the status of the communication line are shown and explained, and ↓
┆19┆┆89┆┄┄in the last subsection the dte_access test message buffer.↲
↲
╞	┆84┆Several of the test informations are written as text strings on ↓
┆19┆┆89┆┄┄the console. These text strings are all marked with (*) and out┄↓
┆19┆┆89┆┄┄lined in appendix D.2. Furthermore are two examples of a testout ↓
┆19┆┆89┆┄┄print shown in appendix D.3.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆6.2.4.1╞	Testoutput from Process dte.↲
↲
╞	┆84┆The testrecords generated in the dte process have the following ↓
┆19┆┆89┆┄┄format:↲
↲
╞	   packed record↲
╞	      ╞	  time╞	: integer;↲
╞	      ╞	  kind╞	: 0..15;↲
╞	      ╞	  state╞	: 0..3;↲
╞	      ╞	  fbool╞	: 0..1;↲
╞	      ╞	  dummy╞	: 0..1;↲
╞	      ╞	  fb1,↲
╞	      ╞	  fb2╞	: byte;↲
╞	      ╞	  fi╞	: integer;↲
╞	   ╞	end;↲
↲
↲
╞	   time╞	╞	: Global dte time stamp.↲
╞	   kind (*)╞	: Testrecord type (see table 9).↲
╞	   state (*)╞	: ┆84┆The current value of the dte state variable ↓
┆19┆┆9f┆┄┄in the dte process.↲
╞	   fbool╞	╞	: Boolean parameter field.↲
╞	   fb1, fb2╞	: Byte parameter fields.↲
╞	   fi╞	╞	: Integer parameter field.↲
↲
╞	┆84┆fbool, fb1, fb2, and fi contains different information depending ↓
┆19┆┆89┆┄┄of kind. In table 9 the connections between kind and the parameter ↓
┆19┆┆89┆┄┄fields are shown.↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Table 9: Process dte, testrecord kind and parameter fields.↲

════════════════════════════════════════════════════════════════════════
↓
         ┆84┆In the dtetest process each testrecord is processed and formatted ↓
┆19┆┆89┆┄┄to one print line with the format:↲
↲
┆b0┆╞	<time> <kind> <dte state> <fbool> <fb1> <fb2> <fi>↲
↲
╞	┆84┆except if kind = 15, in which case <dte state> and <fbool> are ↓
┆19┆┆89┆┄┄out┄mitted.↲
↲
╞	┆84┆The text printed for the different kind values are shown in table ↓
┆19┆┆89┆┄┄9, whereas the texts printed for the other fields are outlined in ↓
┆19┆┆89┆┄┄ap┄pendix D.2.↲
↲
↲
┆a1┆6.2.4.2╞	Testoutput from Process dte_lcnzero.↲
↲
╞	┆84┆The testrecords generated in the dte_lcnzero process have the fol┄↓
┆19┆┆89┆┄┄lowing format:↲
↲
╞	   packed record↲
╞	╞	  time╞	: integer;↲
╞	╞	  kind╞	: 0..15;↲
╞	╞	  state╞	: 0..3;↲
╞	╞	  dummy╞	: 0..3;↲
╞	╞	  field1,↲
╞	╞	  field2,↲
╞	╞	  field3╞	: byte;↲
╞	╞	end;↲
↲
╞	time╞	╞	  : Global dte time stamp.↲
╞	kind (*)╞	╞	  : Testrecord type (see table 10).↲
╞	state (*)╞	╞	  : ┆84┆The current value of the dte state vari┄↓
┆19┆┆a1┆┄┄able in the dte_lcnzero process.↲
╞	field1, field2, field3: ┆84┆Parameter fields depending of kind. The ↓
┆19┆┆a1┆┄┄connections are shown in table 10.↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Table 10: ┆84┆Process dte_lcnzero, testrecord kind and parameter ↓
┆19┆┆93┆┄┄fields.↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆In the dtetest process each testrecord is processed and formatted ↓
┆19┆┆89┆┄┄to one print line with the format:↲
↲
┆b0┆╞	<time> <kind> <dte state> <field1> <field2> <field3> <aux>↲
↲
╞	┆84┆<aux> depends of the type of testrecord (kind). In appendix D.2 ↓
┆19┆┆89┆┄┄these dependants are outlined.↲
↲
╞	┆84┆The text printed for the different kind values are shown in table      ↓
┆19┆┆89┆┄┄10, whereas the texts printed for the other fields are outlined in ↓
┆19┆┆89┆┄┄appendix D.2.↲
↲
↲
┆a1┆6.2.4.3╞	Testoutput from Process dte_chan.↲
↲
╞	┆84┆The testrecords generated in the dte_chan process have the follow┄↓
┆19┆┆89┆┄┄ing format:↲
↲
╞	   packed record↲
╞	╞	  time╞	: integer;↲
╞	╞	  kind╞	: 0..15;↲
╞	╞	  c_active,↲
╞	╞	  field5╞	: boolean;↲
╞	╞	  dummy1╞	: 0..3;↲
╞	╞	  state╞	: 0..31;↲
╞	╞	  dummy2╞	: 0..7;↲
╞	╞	  field1,↲
╞	╞	  field2,↲
╞	╞	  field3,↲
╞	╞	  field4╞	: byte;↲
╞	╞	end;↲
↲
╞	time╞	╞	: Global dte time stamp.↲
╞	kind (*)╞	╞	: Testrecord type (see table 11).↲
╞	c_active (*)╞	: ┆84┆The variable 'chan_active', which is true if ↓
┆19┆┆9f┆┄┄the dte_chan process incarnation is active.↲
╞	state (*)╞	╞	: ┆84┆The current value of the variable↲
                               ┆84┆'chan_rec.chan_state'.↲
╞	field1, field2, field3,↲
╞	field4, field5 (*)╞	: ┆84┆Parameter fields depending of kind. The con┄↓
┆19┆┆9f┆┄┄nections are shown in table 11.↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Table 11: Process dte_chan, testrecord kind and parameter fields.↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆In the dtetest process each testrecord is processed and formatted ↓
┆19┆┆89┆┄┄to one print line with the format:↲
↲
↲
╞	┆b0┆<time> <kind> <state> <c_active> <field5>↲
╞	┆b0┆┆84┆<dec.field1> <hex.field1> <dec.field2> <hex.field2> <dec.field3> ↓
┆19┆┆89┆┆81┆┆82┆<hex.field3> <dec.field4> <hex.field 4> <aux>↲
↲
↲
╞	┆84┆<aux> depends of the type of testrecord (kind) and in appendix D.2 ↓
┆19┆┆89┆┄┄these dependants are outlined.↲
↲
         ┆84┆The text printed for the different kind values are shown in table     ↓
┆19┆┆89┆┄┄11, whereas the texts printed for the other fields are outlined in ↓
┆19┆┆89┆┄┄appendix D.2.↲
↲
↲
┆a1┆6.2.4.4╞	Communication Line Status Information.↲
↲
╞	┆84┆As mentioned in subsection 6.2.1 different information concerning ↓
┆19┆┆89┆┄┄the status of the communication line may be printed on the con┄↓
┆19┆┆89┆┄┄sole. Below are each text printed described and they are groupped ↓
┆19┆┆89┆┄┄according to which bit setting in the testbits record, that will ↓
┆19┆┆89┆┄┄provoke the print. The internal dte procedure ┆b0┆dte_message┆f0┆ is used ↓
┆19┆┆89┆┆81┆┄to format the printed text. <hh.mm.ss> is time (hour, minute, ↓
┆19┆┆89┆┆81┆┄second) when the DTE observes the event.↲
↲
┆b0┆╞	┆a1┆line event↲
↲
╞	┆a1┆┆e1┆   <hh.mm.ss>  line up↲
↲
╞	┆84┆The communicaiton line is connected on level 2 (hdlc connection ↓
┆19┆┆89┆┄┄performed).↲
↲
↲
╞	┆a1┆┆e1┆   <hh.mm.ss>  line event <xx>↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆An hdlc line event has been reported to the DTE.↲
╞	┆84┆The line state is not changed. <xx> is the event number returned ↓
┆19┆┆89┆┄┄from the HDLC (please refer to ref. (9)).↲
↲
╞	┆a1┆┆e1┆   <hh.mm.ss>  line down↲
↲
╞	The communicaiton line is disconnected.↲
╞	The previous state was level 2 ready.↲
↲
┆e1┆╞	┆a1┆┆e1┆   <hh.mm.ss>  network down↲
↲
↲
╞	The communicaiton line is disconnected.↲
╞	The previous state was level 3 ready.↲
↲
↲
┆b0┆╞	┆a1┆modem signals↲
↲
↲
╞	   modem signals : DTR=<x> RTS=<x> RI=<x> SQD=<x>┆e1┆ DSR=<x> DCD=<x>↲
↲
↲
╞	┆84┆The value of the modem signals are printed. <x> will be either 0 ↓
┆19┆┆89┆┄┄or 1, signal not set or signal set respectively.↲
↲
↲
┆b0┆╞	┆a1┆level 3 restart↲
↲
↲
╞	┆a1┆┆e1┆   <hh.mm.ss>  dte restarted↲
↲
↲
╞	┆84┆The DTE has received a RESTART INDICATION packet from the DCE, ↓
┆19┆┆89┆┄┄and has conformed it. The restart phase is initiated.↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆a1┆┆e1┆   <hh.mm.ss>  dte restart timeout  <no>↲
↲
╞	┆84┆A restart timeout has occured in the DTE. A new RESTART REQUEST ↓
┆19┆┆89┆┄┄packet is transmitted to the DCE. <no> is the restart timeout ↓
┆19┆┆89┆┄┄periode in seconds.↲
↲
╞	┆a1┆┆e1┆   <hh.mm.ss>  dte restarted by NC↲
↲
╞	┆84┆The DTE has initiated a restart phase requested by the NC (by ↓
┆19┆┆89┆┄┄the LCP operation DTE 54,0).↲
↲
↲
╞	┆a1┆┆b0┆line state↲
↲
↲
╞	┆a1┆┆e1┆   internal line state : <text> : <xx>↲
↲
↲
╞	┆84┆An event buffer has been returned from the HDLC, indicating a line ↓
┆19┆┆89┆┄┄event. <text> is the dte internal line state and is printed as ↓
┆19┆┆89┆┄┄(connected, connecting, d_connecting, disc_recv, disconnected) and ↓
┆19┆┆89┆┄┄equals the states described in subsection 4.2.2. <no> is the line ↓
┆19┆┆89┆┄┄event number returned from the HDLC (please refer to ref. (9)).↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆6.2.4.5╞	dte_access Test Message Print.↲
↲
╞	┆84┆The contens of testbuf (subsection 6.2.2 message ┆b0┆dte_access_test┆f0┆) ↓
┆19┆┆89┆┆81┆┄depends on the u1 value. Testbuf is an array of 14 bytes, which ↓
┆19┆┆89┆┆81┆┄contain the following information :↲
↲
╞	     func       1 (128)           2 (160)           3 (224)↲
╞	testbuf byte↲
╞	   1╞	user state╞	stream state╞	conn stream/255↲
╞	   2╞	no of user streams╞	user index╞	 not used↲
╞	   3╞	no of lost stream╞	channel number╞	 not used↲
╞	╞	events↲
╞	   4╞	no of lost user╞	no. of buffers at╞	 not used↲
╞	╞	events╞	╞	suspend sem↲
╞	   5╞	no of buffers at╞	0╞	╞	 not used↲
╞	╞	event sem↲
╞	   6╞	no of buffers at╞	0= internal ref nil╞	 not used↲
╞	╞	general sem╞	1= int. ref not nil↲
╞	   7╞	lost user event,╞	0╞	╞	 not used↲
╞	╞	type↲
╞	   8╞	lost user event,╞	intern state╞	 not used↲
╞	╞	cause↲
╞	   9╞	lost user event,╞	0╞	╞	 not used↲
╞	╞	diagnostic↲
╞	  10╞	 not used╞	╞	0╞	╞	 not used↲
╞	  11╞	 not used╞	╞	lost stream event,╞	 not used↲
╞	╞	╞	╞	type↲
╞	  12╞	 not used╞	╞	lost stream event,╞	 not used↲
╞	╞	╞	╞	cause↲
╞	  13╞	 not used╞	╞	lost stream event,╞	 not used↲
╞	╞	╞	╞	diagnostic↲
╞	  14╞	 not used╞	╞	no of lost events╞	 not used↲
↲
╞	┆84┆The printing on the console will contain a header line↲
↲
╞	╞	╞	  ┆b0┆user index :↲
╞	┆b0┆Operation :  <func>   stream no :    <u3> / <u4>↲
╞	╞	╞	  ┆b0┆stream no :↲
↲
┆8c┆┄┆a7┆↓
╞	┆84┆This line will be followed by a line where each byte in the ↓
┆19┆┆89┆┄┄testbuf is printed as a digit and one line where the byte is ↓
┆19┆┆89┆┄┄printed hexadecimal.↲
↲
╞	┆84┆For the state variables and event types the following interpre┄↓
┆19┆┆89┆┄┄tation can be applied :↲
↲
╞	┆a1┆user state┆e1┆ (please see also subsection 4.3.2)↲
╞	╞	0 = free↲
╞	╞	1 = w_resc↲
╞	╞	2 = idle↲
╞	╞	3 = active↲
↲
╞	┆a1┆stream state┆e1┆ (please see also subsection 4.3.2)↲
╞	╞	0 = clear↲
╞	╞	1 = w_uresp↲
╞	╞	2 = w_accp↲
╞	╞	3 = data↲
╞	╞	4 = u_clear↲
↲
╞	┆a1┆intern state┆e1┆ (please see also subsection 4.3.2)↲
╞	╞	0 = cleared↲
╞	╞	2 = waiting↲
╞	╞	3 = data_xfer↲
╞	╞	4 = clearing↲
↲
╞	┆a1┆event type┆e1┆↲
╞	╞	16 = dte_ev_disc,╞	 line disconnected↲
╞	╞	24 = dte_ev_clear,╞	 stream cleared↲
╞	╞	32 = dte_ev_rstst,╞	 dte restarted↲
╞	╞	40 = dte_ev_reset,╞	 stream reset↲
╞	╞	48 = dte_ev_inc,╞	 INCOMING CALL lost↲
╞	╞	56 = dte_ev_data,╞	 DATA packet lost↲
╞	╞	64 = dte_ev_intrupt, INTERRUPT packet lost↲
↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆6.3╞	Message Snoop.↲
↲
╞	┆84┆In order to snoop messages and answers received at not global ↓
┆19┆┆89┆┄┄known semaphores, the dte process can start an incarnation of the ↓
┆19┆┆89┆┄┄gene┄ral snooper process. This incarnation is called dtesnoop. The ↓
┆19┆┆89┆┄┄ge┄neral snooper is described in ref. (7).↲
↲
╞	┆84┆The semaphores that can be snooped are the main input and sync se┄↓
┆19┆┆89┆┄┄maphores of the dte_chan process incarnations (in the dte process ↓
┆19┆┆89┆┄┄the chan_vector and sync_vector).↲
↲
╞	┆84┆One configuration parameter to the dtesnoop process is 'max_pick┄↓
┆19┆┆89┆┄┄ups'. If max_pickups is greater than twice the maximum number of ↓
┆19┆┆89┆┄┄channel processes (max_chan) both the input and sync semaphores ↓
┆19┆┆89┆┄┄are snooped. If it is greater than max_chan but smaller than twice ↓
┆19┆┆89┆┄┄max_chan only the input semaphores are snooped, and if it is smal┄↓
┆19┆┆89┆┄┄ler than max_chan no semaphores are snooped. The followning rules ↓
┆19┆┆89┆┄┄can be applied:↲
↲
╞	max_pickups ┆a1┆>┆e1┆ 2 * max_chan            : input and sync semaphores↲
╞	2 * max_chan > max_pickups ┆a1┆>┆e1┆ max_chan : input semaphores only↲
╞	max_chan > max_pickups   ╞	        : none.↲

════════════════════════════════════════════════════════════════════════
↓
«index» formatlinie til RC manualer↲
┆14┆┆b3┆↲
┆14┆┆b3┆┆06┆- ┆0b┆ -↲
↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆7.╞	CONFIGURATION GUIDE.↲
↲
╞	┆84┆This chapter will give a short description of the configuration ↓
┆19┆┆89┆┄┄constants, the storage requirements and the compilation of the DTE ↓
┆19┆┆89┆┄┄System.↲
↲
↲
┆a1┆7.1╞	Configuration Parameters.↲
↲
╞	┆84┆In the DTE System principel many parameters can be changed in ↓
┆19┆┆89┆┄┄order to optimize the storage requirements and performance of the ↓
┆19┆┆89┆┄┄modules:↲
╞	┆84┆Several of these parameters are allready optimized, so in the next ↓
┆19┆┆89┆┄┄two subsections only the parameters of normally interest are des┄↓
┆19┆┆89┆┄┄cribed. They can be divided into two groups, one where the parame┄↓
┆19┆┆89┆┄┄ter values must be defined at compilation time (subsection 7.1.1) ↓
┆19┆┆89┆┄┄and one where the parameter values are defined at incarnation cre┄↓
┆19┆┆89┆┄┄ate time (subsection 7.1.2).↲
↲
╞	┆84┆In subsection 7.1.3 are the default values of some interesting DTE ↓
┆19┆┆89┆┄┄parameters outlined, and in subsection 7.1.4 are parameters con┄↓
┆19┆┆89┆┄┄cer┄ning the trace, test and snoop systems described.↲
↲
↲
┆a1┆7.1.1╞	Compilation Parameters.↲
↲
╞	┆84┆These parameters are found in the configuration environment (stan┄↓
┆19┆┆89┆┄┄dard : STDCONF) and in DTEENV.↲
↲
┆b0┆╞	m_max_chan╞	┆f0┆: ┆84┆Defines the maximum of logical channels ↓
┆19┆┆9f┆┆81┆┄(dte_chan process incarnations) the DTE can ↓
┆19┆┆9f┆┆81┆┄handle simultaneously (┆b0┆in STDCONF set to ↓
┆19┆┆9f┆┆82┆┆82┆20┆f0┆).↲
↲
┆b0┆╞	max_user╞	╞	┆f0┆: ┆84┆Defines the maximum of simultaneously con┄↓
┆19┆┆9f┆┆81┆┄nected users (┆b0┆in STDCONF set to 5┆f0┆).↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	max_inbufs╞	┆f0┆: ┆84┆Defines the maximum of input buffers the ↓
┆19┆┆9f┆┆81┆┄dte_hrec process tries to maintain at the ↓
┆19┆┆9f┆┆81┆┄HDLC. The ac┄tual value may be changed by an ↓
┆19┆┆9f┆┆81┆┄LCP opera┄tion (DTE 54,0) and the default va┄↓
┆19┆┆9f┆┆81┆┄lue is outlined in subsection 7.1.3. (┆b0┆in ↓
┆19┆┆9f┆┆82┆┆82┆DTE┄ENV set to 10┆f0┆).↲
↲
┆b0┆╞	testmax╞	╞	┆f0┆: ┆84┆Defines the number of test records in the ↓
┆19┆┆9f┆┆81┆┄internal testareas and in the testbuffers ↓
┆19┆┆9f┆┆81┆┄(┆b0┆in DTEENV set to 20┆f0┆).↲
↲
↲
┆a1┆7.1.2╞	Creation Parameters.↲
↲
╞	┆84┆At creation time it is possible to define several parameters of ↓
┆19┆┆89┆┄┄the DTE System. They are gathered in four record types.↲
↲
╞	hdlc_cp_type╞	: ┆84┆Parameters for the HDLC communication.↲
↲
╞	dte_cp_type╞	: ┆84┆Parameters concerning the DTE and X.25 com┄↓
┆19┆┆9f┆┄┄munication.↲
↲
╞	dte_pc_type╞	: ┆84┆Parameters for buffer pools configuration.↲
↲
╞	dte_dc_type╞	: ┆84┆Parameters concerning the debug, trace and ↓
┆19┆┆9f┆┄┄test facilities.↲
↲
╞	┆84┆These four types are defined in CNNETENV and a default value is ↓
┆19┆┆89┆┄┄assigned to them in CRPARMENV.↲
↲
╞	┆84┆The individuel fields are described in subsection 4.2.1 so here ↓
┆19┆┆89┆┄┄will only a recommended value be mentioned. A question mark indi┄↓
┆19┆┆89┆┄┄cates that the value depends on the system the DTE is running in.↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	hdlc_cp_type:↲
╞	   test_modem╞	: ?↲
╞	   com204╞	 ╞	: normally true↲
╞	   c_id╞	╞	: 2100╞	     (= 2.1 secs.)↲
╞	   t1╞	╞	: 1400         (= 1.4 secs.)↲
╞	   n2╞	╞	: 10↲
╞	   k╞	╞	: 6↲
╞	   framespace╞	: 4            (= 40 microsecs.)↲
╞	   abortspace╞	: 2╞	     (= 20 microsecs.)↲
↲
╞	dte_cp_type:↲
╞	   x25_lcg╞	: ?↲
╞	   dltc╞	╞	: ?↲
╞	   dhtc╞	╞	: ?            (<= dltc + max_chan)↲
╞	   max_chan╞	: ?↲
╞	   dw_size╞	: normally 2↲
            mw_size          : ?↲
            user_length╞	: actual_u_lgt (defined in CNNETENV)↲
╞	   x25_datasize     : ?↲
↲
╞	dte_pc_type:↲
╞	   suphead_no╞	: 6↲
╞	   supmess_no╞	: 6↲
╞	   eventbuf_no╞	: 3↲
╞	   hdlc_eventno╞	: 3↲
↲
╞	dte_dc_type:↲
╞	   dtetest╞	: false↲
╞	   snoop_on╞	: false↲
╞	   def_trace╞	: false↲
╞	   def_test╞	: ?, ?, ?, true, false, true, ?, ?↲
↲
╞	┆84┆Some of the parameters can be changed by an LCP operation:↲
↲
╞	   dltc, dhtc╞	: DTE 54,0↲
╞	   def_trace╞	: DTE 53,0↲
╞	   def_test╞	: DTE 52,0↲
↲
╞	┆84┆Furthermore def_test can be changed partly from the console (sec┄↓
┆19┆┆89┆┄┄tion 6.2).↲
↲
↲
┆8c┆┄┆aa┆↓
┆a1┆7.1.3╞	Special Default Values.↲
↲
╞	┆84┆As mentioned in subsection 4.1.4 several timers are used in the ↓
┆19┆┆89┆┄┄DTE module. The value (may be only a default value) of these ti┄↓
┆19┆┆89┆┄┄mers are defined in DTEENV in the record timer_def.↲
╞	The following values are recommended:↲
↲
╞	   t11m      =  20 secs : < DCE call request timeout↲
╞	   t12m      =  20 secs : < DCE reset request timeout↲
╞	   t21       = 200 secs : DTE call request timeout↲
╞	   t22       = 180 secs : DTE reset request timeout↲
╞	   t23       = 180 secs : DTE clear request timeout↲
╞	   t30       =  30 secs : DTE idle timeout↲
╞	   t31       =  30 secs : DTE data hold timeout↲
╞	   ack_timer =   1 sec  : DTE acknowledge delay timeout↲
╞	   t20       = 180 secs : DTE restart request timeout↲
╞	   t50       =   1 sec  : Timer period for sense DSR set↲
╞	   t51       =   2 secs : Timer period for sense DCD set↲
╞	   t52       =   5 secs : ┆84┆Timer period to get the modem signals in ↓
┆19┆┆a3┆┄┄a steady state↲
╞	   t60       =  10 secs : ┆84┆Timer period before initiating NC re┄↓
┆19┆┆a3┆┄┄start.↲
↲
╞	┆84┆t30 and ack_timer may be changed by the LCP operation DTE 54,0.↲
↲
╞	┆84┆In connection with the NC system the DTE maintains a bit mask ↓
┆19┆┆89┆┄┄(nc_mask) defining which NC event, that shall be generated. In ↓
┆19┆┆89┆┄┄DTEENV a default value (dnc_mask) is defined. The value of this ↓
┆19┆┆89┆┄┄depends of the system the DTE is running in, and the information ↓
┆19┆┆89┆┄┄that is required for Network Control Management. The variable may ↓
┆19┆┆89┆┄┄be changed by the LCP operation DTE 1,0.↲
↲
╞	┆84┆The dte_hrec process tries to maintain a certant number of input ↓
┆19┆┆89┆┄┄buffers at the HDLC. The default value (dn_buf) of this parameter ↓
┆19┆┆89┆┄┄is def┄ined in DTEENV (set to 5) and may be changed by the LCP op┄e┄↓
┆19┆┆89┆┄┄ration DTE 54,0. The upper limit for this parameter is max_inbufs ↓
┆19┆┆89┆┄┄(see subsection 7.1.1).↲
↲
↲
┆8c┆┄┆a7┆↓
┆a1┆7.1.4╞	Configuration of Trace, Test and Snoop Systems.↲
↲
╞	┆84┆┆a1┆┆b0┆dtetrace↲
↲
╞	In this system two parameters are of interest:↲
↲
╞	   trace_buf_no╞	: Number of trace buffers↲
╞	╞	╞	  ┆b0┆(in dte_trace set to 10)↲
↲
╞	   trace_buf_size╞	: Size in bytes of a trace buffer↲
┆b0┆╞	╞	╞	  (in TRACEENV set to 300)↲
↲
↲
┆b0┆╞	┆a1┆dtetest↲
↲
╞	The only parameter of interest is:↲
↲
╞	   dtetestbufno╞	: Number of test buffers↲
┆b0┆╞	╞	╞	  (in dte_test set to 20)↲
↲
↲
┆b0┆╞	┆a1┆dtesnoop↲
↲
╞	The only parameter of interest is:↲
↲
╞	   max_pickups╞	: ┆84┆Number of pickup processes. It is a compila┄↓
┆19┆┆9f┆┄┄tion parameter to the snooper process. It ↓
┆19┆┆9f┆┄┄should be greater than or equal to twice ↓
┆19┆┆9f┆┄┄max_chan (see section 6.3) if snoop shall be ↓
┆19┆┆9f┆┄┄performed.↲
┆b0┆╞	╞	╞	  (in NETENV set to 20).↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆7.2╞	Storage Requirements.↲
↲
╞	┆84┆This section lists the storage requirements for the DTE System. ↓
┆19┆┆89┆┄┄The reader is warned that the numerical values are subject to ↓
┆19┆┆89┆┄┄changes as new versions of the module, compiler or allocator algo┄↓
┆19┆┆89┆┄┄rithm emerge. Furthermore the storage requirements depends on some ↓
┆19┆┆89┆┄┄configuration parameters. The calculation will show these connec┄↓
┆19┆┆89┆┄┄tions and most of the parameters will be fixed to the value defin┄↓
┆19┆┆89┆┄┄ed by the current versions.↲
↲
╞	The current versions are↲
↲
╞	   RC3502/1 Operating System, Release 6.01    84.04.05↲
╞	   Real-Time Pascal,          Release 8.01,   84.04.05↲
╞	   DTE module,                Version 14,     85.10.21↲
╞	   DTETRACE,                  Version 6,      85.07.30↲
╞	   DTETEST,╞	╞	Version 16,     85.10.14↲
╞	   DTESNOOP,╞	╞	╞	   ,  83.12.05.↲
↲
╞	┆84┆The storage requirements may be divided into two:↲
╞	   - ┆84┆the static requirements which are independent of the creation ↓
┆19┆┆8e┆┄┄pa┄rameters and↲
            - ┆84┆the dynamic requirements which depend on the creation parame┄↓
┆19┆┆8e┆┄┄ters.↲
↲
╞	┆84┆Orthogonally, storage is required for three different purposes: ↓
┆19┆┆89┆┄┄code, stacks and buffer pools.↲
↲
╞	┆84┆The storage for code is of static type, whereas the storage for ↓
┆19┆┆89┆┄┄stacks and pools may be divided into a static and a dynamic part.↲
↲
╞	┆84┆The following three subsections give the code, stack and pool re┄↓
┆19┆┆89┆┄┄quirements of the components of the DTE System, whereas subsection ↓
┆19┆┆89┆┄┄7.2.4 gives an overview of the total requirements.↲
↲
╞	┆84┆As mentioned above several of the configuration parameters will be ↓
┆19┆┆89┆┄┄fixed in the calculation. ┆b0┆Only in subsection 7.2.4 ┆f0┆the parameters ↓
┆19┆┆89┆┆81┆┄will be fixed. The only two parameters that not will be fixed are ↓
┆19┆┆89┆┆81┆┄the actual number of logical channels (max_chan), and the max ↓
┆19┆┆89┆┆81┆┄window size (mw_size).↲
↲
┆8c┆┄┆a9┆↓
╞	┆84┆This means that the dynamic parts in subsection 7.2.4 will only ↓
┆19┆┆89┆┄┄depend of the value of↲
↲
╞	╞	╞	N = max_chan.↲
╞	╞	╞	W = mw_size↲
↲
↲
┆a1┆7.2.1╞	Code.↲
↲
╞	┆84┆The specified requirements are those obtained by means of the ↓
┆19┆┆89┆┄┄PLIBLOOKUP utility.↲
↲
╞	   process/procedure name╞	╞	bytes↲
╞	╞	dte╞	╞	╞	31244↲
╞	╞	dte_access╞	╞	 7960↲
╞	╞	dte_chan╞	╞	╞	23946↲
╞	╞	dte_lcnzero╞	╞	 5276↲
╞	╞	dte_hrec╞	╞	╞	 1644↲
╞	╞	dte_pool╞	╞	╞	 1430↲
↲
╞	╞	dtetrace╞	╞	╞	 4242↲
╞	╞	outtrace╞	╞	╞	  348↲
↲
╞	╞	dtetest╞	╞	╞	 9792↲
↲
╞	╞	dte procedures╞	╞	 5344↲
╞	╞	X.25 procedures╞	╞	 7042↲
╞	╞	pool procedures╞	╞	 1766↲
↲
╞	╞	dtesnoop╞	╞	╞	13000↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆7.2.2╞	Stack.↲
↲
╞	dte:╞	╞	╞	╞	╞	        bytes↲
╞	   basic╞	╞	╞	╞	╞	        2329↲
╞	   extra per compilation defined channel (m_max_chan)  ╞	16↲
╞	   extra per possible user               (max_user)╞	27↲
╞	   extra per testrecord                  (testmax)╞	 7↲
╞	   extra per creation defined channel    (max_chan)╞	71↲
↲
╞	dte_access:↲
╞	   basic╞	╞	╞	╞	╞	         464↲
╞	   extra per creation defined channel    (max_chan)╞	30↲
↲
╞	dte_chan:↲
╞	   basic╞	╞	╞	╞	╞	        1190↲
╞	   extra per testrecord╞	╞	 (testmax)   ╞	 8↲
↲
╞	dte_lcnzero:↲
╞	   basic╞	╞	╞	╞	╞	         990↲
╞	   extra per testrecord╞	╞	 (testmax)   ╞	 6↲
↲
╞	dte_hrec:↲
╞	   basic╞	╞	╞	╞	╞	         424↲
↲
╞	dte_pool:↲
╞	   basic╞	╞	╞	╞	╞	         400↲
↲
╞	dtetrace:↲
╞	   basic╞	╞	╞	╞	╞	         666↲
↲
╞	outtrace:↲
╞	   basic╞	╞	╞	╞	╞	         312↲
↲
╞	dtetest:↲
╞	   basic╞	╞	╞	╞	╞	         780↲
↲
         dteclock:↲
            basic╞	╞	╞	╞	╞	         210↲
↲
┆8c┆┄┆a7┆↓
╞	dtesnoop:↲
╞	   basic╞	╞	╞	╞	╞	         610↲
╞	   extra per pickup incarnation (max_pickups)              340↲
↲
↲
┆a1┆7.2.3╞	Buffer Pools.↲
↲
╞	┆84┆In this subsection the buffer requirements are outlined. Some of ↓
┆19┆┆89┆┄┄the pools are initialized dynamicly during normal run. They are ↓
┆19┆┆89┆┄┄mark with 'dyn' and a normal used number is estimated and used to ↓
┆19┆┆89┆┄┄calculate the requirements. This number is indicated in brackets ↓
┆19┆┆89┆┄┄after 'dyn'. The reader is warned that because of this the re┄↓
┆19┆┆89┆┄┄quirements may be greater in special situations.↲
↲
╞	process    pool name        number of       buffer          total↲
╞	┆a1┆                            buffers          size           bytes↲
↲
╞	┆b0┆dte       ┆f0┆trace_pool          1             32+0               32↲
╞	          clock_pool          1             32+12              44↲
╞	          console_pool        3             32+82             342↲
╞	          break_pool          1             32+16              48↲
╞	          head_pool       suphead_no        32+0↲
╞	          event_pool      eventbuf_no       32+92↲
╞	          supmesspool     supmess_no        32+10↲
╞	          lcp_pool            2             32+8               80↲
╞	          sync_pool       max_chan          32+16↲
╞	          ch_res_pool     max_chan          32+0↲
╞	          hdlc_pool       dyn (2)           32+20             104↲
╞	          hdlc_ev_pool    hdlc_eventno      32+0↲
╞	          smallpool       2*max_chan        32+12↲
╞	          bigpool       max (max_inbufs,↲
╞	╞	╞	        6+max_chan*     32+9+x25_datasize↲
                                     mw_size div 2)↲
╞	          x25pool╞	      max_chan          32+12↲
╞	          bufkeypool          3             32+0               96↲
╞	          shadow buffers      8             32+0              256↲
╞	          chan shadow buf. max_chan         32+0↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	dte_access↲
                   ┆f0┆control_pool     dyn (3)          32+0↲
↲
┆b0┆╞	dte_chan  ┆f0┆bookpool╞	╞	1╞	    32+6               38↲
╞	╞	callpool╞	╞	2╞	    32+106            276↲
╞	╞	headpool╞	╞	3╞	    32+0               96↲
╞	╞	timeout_pool        3             32+2              102↲
╞	╞	u_eventpool╞	3╞	    32+10             126↲
╞	╞	x25head_pool     dyn (max         32+0               64↲
                                    mw_size)↲
↲
┆b0┆╞	dte_lcnzero↲
                   ┆f0┆console_pool        1             32+82             114↲
╞	╞	headpool╞	╞	1╞	    32+0╞	╞	   32↲
╞	╞	supmess_pool     dyn (2)          32+4               72↲
╞	╞	timeout_pool        2╞	    32+12              88↲
↲
┆b0┆╞	dte_hrec  ┆f0┆head_pool        max_inbufs       32+0↲
╞	╞	trace_pool          1             32+0               32↲
↲
┆b0┆╞	dte_pool  ┆f0┆ncppool╞	╞	1╞	    32+8               40↲
╞	╞	starthead╞	          1╞	    32+0               32↲
↲
┆b0┆╞	dtetrace  ┆f0┆consolepool╞	6╞	    32+82             684↲
╞	╞	trace_pool      trace_buf_no      32+8+trace_buf_size↲
╞	╞	bufkeypool╞	1╞	    32+0               32↲
╞	╞	timepool╞	╞	1╞	    32+12              44↲
↲
┆b0┆╞	outtrace  ┆f0┆trace_pool╞	1╞	    32+0               32↲
↲
┆b0┆╞	dtetest   ┆f0┆inpool╞	╞	1╞	    32+82╞	╞	  114↲
╞	╞	outpool╞	╞	3╞	    32+82╞	╞	  342↲
╞	╞	dtetestpool     dtetestbufno      32+174↲
╞	╞	acc_test ╞	╞	1╞	    32+14              46↲
↲
         ┆b0┆dtelock┆f0┆   timerpool           1             32+0               32↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆The figures for the dtesnoop process are taken from ref. (7) and ↓
┆19┆┆89┆┄┄gives:↲
↲
╞	   message buffers╞	: 470 bytes + 130 bytes * max_pickups↲
╞	   log buffer╞	: ┆84┆defined by command BZ but at least ╞	╞	╞	  ↓
┆19┆┆9f┆┄┄┆84┆48 bytes + 2 bytes * (pick-up size) where ↓
┆19┆┆9f┆┄┄pick-up size is defined by the command PZ.↲
↲
╞	┆84┆The above mentioned requirements can be summarized to↲
↲
┆b0┆╞	┆a1┆dte↲
╞	     1002 + suphead_no * 32 + eventbuf_no * 124↲
╞	     + supmess_no * 42 + hdlc_eventno * 32↲
╞	     + max_chan * 244↲
╞	     + max (max_inbufs, 6 + max_chan* mw_size div 2)↲
                *(41 + x25_datasize)  bytes.↲
↲
┆b0┆╞	┆a1┆dte_access↲
╞	     96 bytes↲
↲
┆b0┆╞	┆a1┆dte_chan↲
╞	     638 bytes + mw_size * 32↲
↲
┆b0┆╞	┆a1┆dte_lcnzero↲
╞	     306 bytes↲
↲
┆b0┆╞	┆84┆┆a1┆dte_hrec↲
╞	       32 +  max_inbufs * 32  bytes↲
↲
┆b0┆╞	┆a1┆dte_pool↲
╞	     72 bytes↲
↲
┆b0┆╞	┆a1┆dtetrace↲
╞	       760 + trace_buf_no * (40 + trace_buf_size)  bytes↲
↲
┆b0┆╞	┆a1┆outtrace↲
╞	     32 bytes↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆         ┆a1┆dtetest↲
╞	       502 + dtetestbufno * 206  bytes↲
↲
         ┆b0┆┆a1┆dtelock↲
                32↲
↲
┆b0┆╞	┆a1┆dtesnoop↲
╞	       470 + max_pickups * 130  bytes + (log buffer)↲
↲
↲
┆a1┆7.2.4╞	Static and Dynamic Requirements.↲
↲
╞	┆84┆The figures calculated in subsections 7.2.1 to 7.2.3 will with the ↓
┆19┆┆89┆┄┄parameter values defined for DTE Version 14 and the bellow de┄↓
┆19┆┆89┆┄┄scribed creation parameters give the requirements outlined in ↓
┆19┆┆89┆┄┄table 12.↲
↲
╞	Parameter values:↲
╞	   m_max_chan╞	╞	=  20↲
╞	   max_user╞	╞	=   5↲
╞	   testmax╞	╞	=  20↲
╞	   max_pickups╞	╞	=  20↲
╞	   suphead_no╞	╞	=   6↲
╞	   eventbuf_no╞	╞	=   3↲
╞	   supmess_no╞	╞	=   6↲
╞	   hdlc_eventno╞	╞	=   3↲
╞	   max_inbufs╞	╞	=  10↲
╞	   x25_datasize╞	╞	= 256↲
╞	   trace_buf_no╞	╞	=  10↲
╞	   trace_buf_size╞	╞	= 300↲
╞	   dtetestbufno╞	╞	=  20↲
╞	   max_chan╞	╞	=  N↲
╞	   mw_size                    =  W↲
            max_inbufs                 ┆a1┆<┆e1┆ 6 + N * W div 2↲

════════════════════════════════════════════════════════════════════════
↓
╞	  process/procedures  code      stack            buffers↲
         ┆81┆┆a1┆                      bytes     bytes            bytes     ╞	╞	↲
↲
           dte                 31244  2924 + 72*N   344 + 212*N + 149* ┆81┆┆a1┆N*W↲
                                                                       ┆81┆2↲
╞	  dte_access           7960    464 + 30*N           96↲
           dte_chan            23946      1350         638 + 32*W↲
╞	  dte_lcnzero          5276      1110             306↲
╞	  dte_hrec             1644       424             352↲
           dte_pool             1430       400              72↲
↲
           dte procedures       5344        -                -↲
           X25 procedures       7042        -                -↲
           pool procedures      1766        -                -↲
↲
╞	  dtetrace             4242       666            4160↲
╞	  outtrace              348       312              32↲
↲
╞	  dtetest              9792       780            4622↲
╞	  dteclock               -        210              32↲
↲
╞	  dtesnoop            13000      7410       3070 + log buffer↲
↲
↲
↲
╞	Table 12: Storage requirements of the DTE System.↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆Using this table the following static and dynamic requirements can ↓
┆19┆┆89┆┄┄be set up. W is set to 2 (normally default value).↲
↲
┆b0┆╞	┆a1┆DTE module↲
↲
╞	   Static:↲
╞	      Code╞	╞	╞	          85652 bytes↲
╞	      Stacks   dte╞	╞	╞	           2924   -↲
╞	      ╞	     dte_access╞	╞	            464   -↲
╞	╞	     dte_lcnzero╞	╞	           1110   -↲
╞	╞	     dte_hrec╞	╞	            424   -↲
╞	╞	     dte_pool╞	╞	            400   -↲
 ╞	      Pools    dte╞	╞	╞	            344   -↲
╞	╞	     dte_access╞	╞	             96   -↲
╞	╞	     dte_lcnzero╞	╞	            306   -↲
╞	╞	     dte_hrec╞	╞	            352   -↲
╞	╞	     dte_pool╞	      ┆e1┆┆e1┆           ┆a1┆      72   -  ↲
╞	╞	╞	╞	                    92144 bytes↲
↲
╞	   Dynamic at creation (per logical channel):↲
╞	      Stacks   dte╞	╞	╞	             72 bytes↲
╞	      ╞	     dte_access╞	╞	             30   -↲
╞	      Pools    dte╞	╞	       ┆a1┆┆e1┆          ┆a1┆     212   -  ↲
╞	╞	╞	╞	╞	            314 bytes↲
↲
╞	   Dynamic at runtime (per active logical channel):↲
╞	      Stacks   dte_chan╞	╞	╞	 1350 bytes↲
╞	      Pools    dte_chan╞	╞	      ╞	  638+32*2 ↲
╞	               dte                             ┆a1┆     149+212  ↲
╞	╞	╞	╞	╞	╞	 2201 bytes↲
↲
╞	┆84┆For the test, trace and snoop system static requirements means, ↓
┆19┆┆89┆┄┄what is required even if the system is not activated, but loaded, ↓
┆19┆┆89┆┄┄and dynamic is the requirements, when the system is active.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	┆a1┆Trace System↲
↲
╞	   Static:↲
╞	      Code╞	╞	╞	 4590 bytes↲
↲
╞	   Dynamic:↲
╞	      Stacks   dtetrace╞	╞	  666 bytes↲
╞	╞	     outtrace╞	╞	  312   -↲
╞	      Pools    dtetrace ╞	╞	 4160   -↲
╞	╞	     outtrace╞	╞	┆a1┆   32   -  ↲
╞	╞	╞	╞	╞	 5170 bytes↲
↲
┆b0┆╞	┆a1┆Test System↲
↲
╞	   Static:↲
╞	      Code╞	╞	╞	 9792 bytes↲
╞	      Stack╞	╞	╞	  990   -↲
╞	      Pools╞	╞	      ┆a1┆╞	 4654   -  ↲
╞	╞	╞	╞	╞	13436 bytes↲
↲
┆b0┆╞	NB: The test system will allways be created, if it is loaded.↲
↲
↲
┆b0┆╞	┆a1┆Snoop System↲
↲
╞	   Static:↲
╞	      Code╞	╞	      ┆a1┆┆e1┆╞	13000 bytes↲
↲
╞	   Dynamic:↲
╞	      Stack    dtesnoop╞	╞	 7410 bytes↲
╞	      Pools    dtesnoop╞	      ┆a1┆╞	 3070   -   + log buffer ↲
╞	╞	╞	╞	╞	10480 bytes + log buffer↲
↲
╞	┆84┆From the above outlined figures the following systems requirements ↓
┆19┆┆89┆┄┄can be deduced.↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	A) ┆a1┆DTE System without Test, Trace and Snoop Systems:↲
↲
╞	       92144 bytes + N * 314 bytes + N * 2201 bytes↲
↲
╞	B) ┆a1┆DTE System including Test System:↲
↲
╞	       107580 bytes + N * 314 bytes + N * 2201 bytes↲
↲
╞	C) ┆a1┆DTE System including Test and Trace System↲
↲
╞	       trace not activated↲
╞	       112170 bytes + N * 314 bytes + N * 2201 bytes↲
↲
╞	       trace activated↲
╞	       117340 bytes + N * 314 bytes + N * 2201 bytes↲
↲
╞	D) ┆a1┆DTE System including Snoop System (activated)↲
↲
╞	       116624 bytes + N * 314 bytes + N * 2201 bytes + log buffer.↲
↲
↲
┆a1┆7.3╞	Module Compilation.↲
↲
╞	┆84┆In this section the jobs for compilation of the DTE System and ↓
┆19┆┆89┆┄┄listning of the source texts are explained.↲
↲
↲
┆a1┆7.3.1╞	Version Information.↲
↲
╞	┆84┆When the DTE starts up different information are written on the ↓
┆19┆┆89┆┄┄console (see section 7.4 and 6.2). The version number and date of ↓
┆19┆┆89┆┄┄the DTE module are contained in the RC8000 file DTEINFOENV. ↓
┆19┆┆89┆┄┄Besides this version number each process of the DTE has its own ↓
┆19┆┆89┆┄┄version number, which is the first variable in the VAR section of ↓
┆19┆┆89┆┄┄the program. This may help the programmer in decoding an RC3502 ↓
┆19┆┆89┆┄┄stack dump.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆7.3.2╞	Compilation jobs.↲
↲
╞	┆84┆To support the generation of a binary DTE module several jobs ↓
┆19┆┆89┆┄┄exists. They are gathered in the library (lib) file LIBJDTE.↲
↲
╞	The contents of LIBJDTE is↲
↲
╞	   jdtegen╞	: DTE generation job↲
╞	   jdtelib╞	: External DTE library generation job↲
╞	   jdtelist╞	: DTE listning job↲
╞	   jdteproc╞	: External DTE procedure generation job↲
╞	   jdtetest╞	: Test System generation job↲
╞	   jdtetrace╞	: Trace System generation job↲
╞	   jdteutlist╞	: Job for listning of Test and Trace System↲
╞	   jeditchenv╞	: Help job for the DTE generation↲
╞	   jlibinsert╞	: Help job for the DTE generation↲
╞	   jpoollib╞	: External pool library generation job↲
╞	   jx25bib╞	: External X.25 library generation job↲
╞	   jx25proc╞	: External X.25 procedure generation job↲
╞	   stdconf╞	: Standard configuration file↲
╞	   jdtepunch╞	: ┆84┆Job generating the DTE boot file from the ↓
┆19┆┆9f┆┄┄binary files.↲
↲
╞	┆84┆All jobs will ask the operator some questions about name of source ↓
┆19┆┆89┆┄┄library, which process to compile/list and so on, and the operator ↓
┆19┆┆89┆┄┄can in this way choose to generate his own system. In ap┄pendix F ↓
┆19┆┆89┆┄┄some examples of this dialog is shown.↲
↲
╞	┆84┆All tempory files are removed by the job after compilation/list┄↓
┆19┆┆89┆┄┄ning, and all binary files generated in the compilation will be ↓
┆19┆┆89┆┄┄created at ┆b0┆user scope.↲
↲
╞	┆84┆After a compilation it is necessary to reformat the binary files ↓
┆19┆┆89┆┄┄with the job 'jdtepunch' also located in the job library LIBJDTE. ↓
┆19┆┆89┆┄┄The result of this is a boot file, DTEBOOT. During this reformat┄↓
┆19┆┆89┆┄┄ting it is possible to select whether the Test System and/or Trace ↓
┆19┆┆89┆┄┄System shall be included or not.↲
↲
╞	┆84┆The Snoop System has to be part of the basic system or loaded se┄↓
┆19┆┆89┆┄┄peratly.↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆7.4╞	Creation of the DTE Module/System.↲
↲
╞	┆84┆The module process parameters can, because the dte process is the ↓
┆19┆┆89┆┄┄parent process, be found in section 4.2 and 7.1.2.↲
↲
╞	┆84┆The parent of the DTE System must supply the relevant parameters ↓
┆19┆┆89┆┄┄(see subsection 4.2.1), but only the following two are configura┄↓
┆19┆┆89┆┄┄ting the module.↲
↲
╞	   max_chan╞	  : The maximum of active logical channels.↲
╞	   maxw_size          : The maximum window size.↲
↲
╞	The needed creation parameters are:↲
↲
╞	   Process parameters : please refer to subsection 4.2.1.↲
╞	   Stack size         : 1462 + max_chan * 36 (words).↲
╞	   Priority           : stdpriority (= -3) is recommended.↲
↲
╞	┆84┆When the DTE module is created and starts up the following text ↓
┆19┆┆89┆┄┄will be printed on the console if test(4) is true:↲
↲
╞	   >dte↲
╞	   DATE 85.10.21.  Version 14, env. 34.↲
╞	┆a1┆┆e1┆   Max channels 5. Max. users 5.↲
↲
╞	┆84┆This indicates the date (85.10.21) and version number (14) of the ↓
┆19┆┆89┆┄┄DTE module, the version number (34) of the internal dte environ┄↓
┆19┆┆89┆┄┄ment DTEENV. Furthermore the configuration parameters max_chan and ↓
┆19┆┆89┆┄┄max_users are printed.↲
↲
╞	┆84┆When the Trace System is created the following text will be print┄↓
┆19┆┆89┆┄┄ed on the console↲
↲
╞	   >dtetrace↲
╞	   DTE TRACE Release 006  85.07.30↲
╞	┆a1┆┆e1┆   Number of trace buf:  10↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
«index» formatlinie til RC manualer↲
┆14┆┆b3┆↲
┆14┆┆b3┆┆06┆- ┆0b┆ -↲
┆a1┆8.╞	SOURCE TEXT ORGANIZATION.↲
↲
╞	┆84┆The source texts to the DTE System and the different compilation ↓
┆19┆┆89┆┄┄and list jobs are organized in several RC8000 library files (lib ↓
┆19┆┆89┆┄┄files) and normal RC8000 files. The following files constitute the ↓
┆19┆┆89┆┄┄DTE System:↲
↲
╞	dteinfoenv╞	┆84┆version information, number and date↲
         xpoolenv╞	╞	external pool handler environment↲
╞	xdteenv             ┆84┆external dte environment (constants and types ↓
┆19┆┆9d┆┄┄needed by a user)↲
╞	xtraceenv╞	╞	external trace environment↲
╞	xx25env╞	╞	external X.25 environment↲
╞	dtenetenv╞	╞	comprimized netenv↲
↲
╞	libtdte<xx>╞	┆84┆DTE source texts and external procedures (lib ↓
┆19┆┆9d┆┄┄file)↲
╞	libtx25╞	╞	external X.25 procedures (lib file)↲
↲
╞	libjdte╞	╞	┆84┆compilation and list jobs for model 1 (lib ↓
┆19┆┆9d┆┄┄file)↲
╞	libjdte2╞	╞	┆84┆compilation and list jobs for model 2 (lib ↓
┆19┆┆9d┆┄┄file)↲
↲
╞	┆84┆Besides these files the following CENTERNET files are needed for ↓
┆19┆┆89┆┄┄compilation of the DTE System:↲
↲
╞	netenv╞	╞	general network environment↲
╞	cnnetenv╞	╞	general CENTERNET environment↲
╞	xncpenv╞	╞	external NCP environment↲
↲
╞	┆84┆In figure 44 the connections between the source texts, the compi┄↓
┆19┆┆89┆┄┄la┄tion jobs, the binary files, the CRC16 job and the load file are ↓
┆19┆┆89┆┄┄shown.↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 44: DTE System text and job connections.↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆The contents of the lib-files, the plib-files are shown in appen┄↓
┆19┆┆89┆┄┄dix E.↲
↲
╞	┆84┆At boot file generation it is possible to decide whether the Trace ↓
┆19┆┆89┆┄┄System and/or the Test System shall be integrated in the dteboot ↓
┆19┆┆89┆┄┄file. These options are input to the jdtepunch job.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆14┆┆b3┆┆06┆- ┆0b┆ -↲
↲
↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆A.       REFERENCES↲
↲
╞	(1)  ┆a1┆Recommendation X.25↲
              ┆84┆CCITT, Yellow Book┆14┆┆b3┆┆06┆↲
╞	     ┆84┆Services and Facilities, Terminal Equipment and Interfaces↲
╞	┆84┆     Vol. III - Fascicle VIII.2.↲
╞	     Geneva 1981.↲
↲
╞	(2)  ┆a1┆Recommendation X.121↲
 ╞	     CCITT, Yellow Book↲
╞	     Data Communication Networks↲
╞	     Transmission, Signalling and Switching, Network aspects,↲
╞	     Maintenance, Administrative arrangements↲
╞	     Vol. VIII - Fascicle VIII.3↲
              Geneva 1981.↲
↲
╞	(3)  RCSL No 991-10316↲
╞	     ┆a1┆CENTERNET, DTE Module↲
╞	     ┆a2┆┆e2┆┆a1┆Programming Guide, Rev. 3.00↲
╞	     Per Høgh, October 1985.↲
↲
╞	(4)  RCSL No 991-10315↲
╞	     ┆a1┆CENTERNET, Network Control,↲
╞	     ┆a1┆DTE LCP Specification Sheets, Rev. 2.00↲
╞	     Per Høgh, October 1985.↲
↲
╞	(5)  ┆84┆PAXNET↲
╞	     ┆a1┆The User and LCP Interface of the Pool Handler↲
╞	     ┆a1┆Reference Manual, Rev. 1.00↲
╞	     Jørgen Linderoth, March 1983.↲
↲
╞	(6)  DOKS NR. SP.TSSYS.15/2↲
╞	     ┆a1┆Alarm-system↲
╞	     ┆a1┆Systembeskrivelse for TS Timeoutmodulet↲
╞	     Ole Ejby Reinau, May 1980.↲
↲
╞	(7)  RCSL No 43-GL11870↲
╞	     ┆a1┆RC3502 Snooper↲
╞	     ┆a1┆User's Guide↲
╞	     Valther Rasmussen, October 1982.↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	(8)  RCSL No 43-GL12166↲
╞	     ┆a1┆CENTERNET, CNADAM↲
╞	     ┆a1┆Reference Manual, Rev. 2.00↲
╞	     Peter Holm, December 1983.↲
↲
╞	(9)  RCSL No 52-AA1214↲
╞	     ┆a1┆RC3546 HDLC Driver↲
╞	     ┆a1┆Reference Manual↲
╞	     Per Mondrup, December 1983.↲
↲
        (10)  RCSL No 43-GL11424↲
╞	     ┆a1┆NCP Data Structures,↲
╞	     ┆a1┆Reference Manual, Rev. 1.02↲
╞	     Claus Houlberg Hansen, August 1981.↲
↲
        (11)  RCSL No 52-AA964↲
╞	     ┆a1┆PASCAL80, Report↲
╞	     Jørgen Staunstrup, January 1980.↲
↲
        (12)  RCSL No 42-i1539↲
╞	     ┆a1┆PASCAL80, User's Guide↲
╞	     Jan Bardino, October 1980.↲
↲
        (13)  RCSL No 42-i1542↲
╞	     ┆a1┆RC3502 - PASCAL80, Reference Manual↲
╞	     Bo Bagger Laursen, November 1980.↲
↲
        (14)  RCSL No 52-AA1072↲
╞	     ┆a1┆RC3502 REAL TIME PASCAL↲
╞	     ┆a1┆Extensions to the Reference Manual↲
╞	     Bo Bagger Laursen, October 1981.↲
↲
        (15)  RCSL No 52-AA1056↲
╞	     ┆a1┆RC3502 REAL TIME PASCAL↲
╞	     ┆a1┆Character Input/Output Routines↲
╞	     Bo Bagger Laursen, June 1981.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆B.╞	ENVIRONMENTS↲
↲
╞	┆84┆In this appendix are the different RTP environments to the DTE ↓
┆19┆┆89┆┄┄System listed. Furthermore a lookup of necessary external ↓
┆19┆┆89┆┄┄environments is shown in B.1. In B.8 is an example (STDCONF) of ↓
┆19┆┆89┆┄┄the configuration environment shown.↲
↲
↲
┆b0┆┆a1┆B.1╞	External Environments↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆B.2╞	xdteenv↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆B.3╞	xx25env↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆B.4╞	xtraceenv↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆B.5╞	dteenv↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆B.6╞	dtebreakenv↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆B.7╞	hdlcenv↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆B.8╞	stdconf↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆C.╞	STATE/ACTION TABLES↲
↲
╞	┆84┆In this appendix are the state/action tables for the dte_access ↓
┆19┆┆89┆┄┄(C.1), dte_lcnzero (C.2), and dte_chan (C.3) shown and a short ↓
┆19┆┆89┆┄┄description of each action is given.↓
↲
↲
┆b0┆┆a1┆C.1╞	dte_access↲
↲
╞	┆84┆As mentioned in subsection 4.3.6 the dte_access process contains ↓
┆19┆┆89┆┄┄four state/action tables↲
↲
╞	╞	- one for user dependent actions↲
╞	╞	- one for stream dependent actions↲
╞	╞	- one for internal stream dependent actions↲
╞	╞	- one for stream independent actions.↲
↲
╞	┆84┆Because of the connection between the tables stream dependent and ↓
┆19┆┆89┆┄┄internal stream dependent, one table (C.1.2) outline the two im┄↓
┆19┆┆89┆┄┄plemented state/action tables. Furthermore is the call request and ↓
┆19┆┆89┆┄┄incomming call events included in this table. The other two are ↓
┆19┆┆89┆┄┄shown as they are implemented.↲
↲
↲
┆b0┆┆a1┆C.1.1╞	User Dependent↲
↲
╞	__________________________________________________________________↲
╞	    state     free         w_resc         idle         active↲
         ┆a1┆event╞	╞	╞	╞	╞	╞	╞	 ↲
╞	call          free╞	       w_resc         active       active↲
╞	request↲
╞	┆a1┆              not_conn     ill_ureq       call_init    call_init  ↲
         wait          free         w_resc         idle         active↲
         event↲
         ┆a1┆              not_conn     queue_ebuf     queue_ebuf   queue_ebuf ↲
         receive       free         idle           idle         active↲
         general↲
         ┆a1┆              not_conn     queue_gbuf     queue_gbuf   queue_gbuf ↲
↲
╞	Table 13: Process dte_access, user dependent state/action table.↲
↲
┆8c┆┄┆a9┆↓
╞	┆a1┆Actions:↲
↲
↲
╞	┆b0┆call_init╞	╞	┆f0┆: ┆84┆Check if the dte_state is ready, and a free ↓
┆19┆┆9f┆┆81┆┄stream awailable. If it is, start call set-↓
┆19┆┆9f┆┆81┆┄up phase by requesting a logical channel ↓
┆19┆┆9f┆┆81┆┄from the dte process.↲
↲
╞	┆b0┆queue_ebuf╞	┆f0┆: ┆84┆Queue the event buffer at the semaphore ↓
┆19┆┆9f┆┆81┆┄w_event_bsem. Then check if any event is ↓
┆19┆┆9f┆┆81┆┄lost and if so generate an event.↲
↲
╞	┆b0┆queue_gbuf╞	┆f0┆: ┆84┆Queue the input buffer at the semaphore ↓
┆19┆┆9f┆┆81┆┄general_bsem.↲
↲
╞	┆b0┆ill_ureq╞	╞	┆f0┆: ┆84┆Return the message with result 'function not ↓
┆19┆┆9f┆┆81┆┄allowed' (fct_not_allw)↲
↲
╞	┆b0┆not_conn╞	╞	┆f0┆: ┆84┆Return the message with result 'user un┄↓
┆19┆┆9f┆┆81┆┄known' (recv_unkw).↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆C.1.2╞	Stream Dependent↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆a1┆Actions:↲
↲
┆b0┆╞	queue_ureq╞	┆f0┆: ┆84┆The message is signalled to the associated ↓
┆19┆┆9f┆┆81┆┄dte_chan process incarnation.↲
↲
╞	┆b0┆call_accept╞	┆f0┆: ┆84┆Depending of the intern_state either the ↓
┆19┆┆9f┆┆81┆┄message is signalled to the semaphore sus┄↓
┆19┆┆9f┆┆81┆┄pend_bsem or the call set-up phase is ended, ↓
┆19┆┆9f┆┆81┆┄including forwarding the message to the as┄↓
┆19┆┆9f┆┆81┆┄sociated dte_chan process incarnation.↲
↲
╞	┆b0┆call_rejct╞	┆f0┆: ┆84┆The stream is cleared and the message ↓
┆19┆┆9f┆┆81┆┄forwarded to the dte_chan process ↓
┆19┆┆9f┆┆81┆┄incarnation in order to clear the Virtual ↓
┆19┆┆9f┆┆81┆┄Call.↲
↲
╞	┆b0┆user_clear╞	┆f0┆: ┆84┆Depending of intern_state the message is ↓
┆19┆┆9f┆┆81┆┄either signal to the dte_chan process incar┄↓
┆19┆┆9f┆┆81┆┄nation or the semaphore suspend_bsem.↲
↲
╞	┆b0┆chan_alloc╞	┆f0┆: ┆84┆The logical channel has been allocated, so ↓
┆19┆┆9f┆┆81┆┄the stream is initialized.↲
↲
╞	┆b0┆chan_clear╞	┆f0┆: ┆84┆The logical channel has been allocated, but ↓
┆19┆┆9f┆┆81┆┄cleared by the dte_chan process incarnation. ↓
┆19┆┆9f┆┆81┆┄The stream is cleared in the interface ↓
┆19┆┆9f┆┆81┆┄(dte_access).↲
↲
╞	┆b0┆xfer_event╞	┆f0┆: ┆84┆A stream event is generated.↲
↲
╞	┆b0┆clear_ch╞	╞	┆f0┆: ┆84┆The message is awaiting chan_start answer.↲
↲
╞	┆b0┆clear_strm╞	┆f0┆: ┆84┆The stream clearing phase is started.↲
↲
╞	┆b0┆st_cleared╞	┆f0┆: ┆84┆The stream clearing phase is ended.↲
↲
╞	┆b0┆switch_mode╞	┆f0┆: ┆84┆Switch input mode from dedicated to general.↲
↲
╞	┆b0┆retn_notpr╞	┆f0┆: ┆84┆Return the message with result ↓
┆19┆┆9f┆┆81┆┄not_processed.↲
↲
┆8c┆┄┆a9┆↓
╞	┆b0┆ill_sreq╞	╞	┆f0┆: ┆84┆Return the message with result 'function not ↓
┆19┆┆9f┆┆81┆┄allowed' (fct_not_allw).↲
↲
╞	┆b0┆unkw_req╞	╞	┆f0┆: ┆84┆Return the message with result 'illegal ope┄↓
┆19┆┆9f┆┆81┆┄ration' (ill_opcode).↲
↲
↲
┆b0┆┆a1┆C.1.3╞	Stream Independent↲

╱04002d440c00060000000003014e31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
↲
┆a1┆┆e1┆╞	____________________________________________________________________↲
              state                   dte_          hdlc_         net_↲
                        dte_ready     restart       active        down↲
┆a1┆┆e1┆         ┆a1┆event                                                               ↲
         connect        dte_ready     dte_restart   hdlc_active   net_down↲
↲
         ┆a1┆               conn_user     conn_user     conn_user     conn_user  ↲
┆e1┆┆a1┆┆e1┆╞	disconnect     dte_ready     dte_restart   hdlc_active   net_down↲
↲
         ┆a1┆               disc_user     disc_user     disc_user     disc_user  ↲
         inc call       dte_ready     dte_restart   hdlc_active   net_down↲
↲
         ┆a1┆               xfer_call     rest_state    rest_state    rest_state ↲
         restart_       dte_restart   dte_restart   hdlc_active   net_down↲
         start↲
         ┆a1┆               restart_dte   restarted     restarted     restarted  ↲
         restart_end    dte_ready     dte_ready     dte_ready     dte_ready↲
↲
         ┆a1┆               restart_dte   restart_dte   restart_dte   restart_dte↲
┆a1┆┆e1┆         inc_u_event    dte_ready     dte_restart   hdlc_active   net_down↲
↲
         ┆a1┆               xfer_u_event  rest_state    rest_state    rest_state ↲
↲
╞	Table 15: Process dte_access, stream independent state/action table.↲
↲
╞	┆a1┆Actions:↲
↲
╞	┆b0┆conn_user╞	╞	┆f0┆: ┆84┆Find an empty user entry and connect the user.↲
↲
┆8c┆┄┆a6┆↓
╞	┆b0┆disc_user╞	╞	┆f0┆: ┆84┆Disconnect the user.↲
↲
╞	┆b0┆xfer_call╞	╞	┆f0┆: ┆84┆Find the requested user and a free stream. If ↓
┆19┆┆9f┆┆81┆┄ok transfer the incoming call to the user.↲
↲
╞	┆b0┆restart_dte╞	┆f0┆: ┆84┆Get the restart parameters and generate an user ↓
┆19┆┆9f┆┆81┆┄event. If necessary clear all streams.↲
↲
╞	┆b0┆rest_state╞	┆f0┆: ┆84┆Return message with result 'dte_restarted'.↲
↲
╞	┆b0┆restarted╞	╞	┆f0┆: ┆84┆Nothing is performed.↲
↲
╞	┆b0┆xfer_u_event╞	┆f0┆: ┆84┆A user event is generated.↲
┆b0┆↲
↲
┆b0┆┆a1┆C.2╞	dte_lcnzero↲
↲
╞	┆84┆As mentioned in subsection 4.5.6 the dte_lcnzero process contains ↓
┆19┆┆89┆┄┄one state/action table implemented as a state machine. This table ↓
┆19┆┆89┆┄┄is shown below and a short description of the actions is given ↓
┆19┆┆89┆┄┄too.↲
↲

════════════════════════════════════════════════════════════════════════
↓
                state      r1         r2         r4         r5 ↲
                           dte_       dte_       hdlc_      net_↲
┆a1┆┆e1┆         ┆a1┆event             ready      restart    active     down  ↲
         restart_indi      r1         r1         r1         r5↲
┆a1┆┆e1┆         lcn = 0↲
╞	┆a1┆                    A10          A15       A15         A1↲
         restart_conf      r2         r1         r1         r5↲
         lcn = 0↲
         ┆a1┆                    A12          A15       A15         A1↲
         diagnostic        r1         r2         r4         r5↲
         lcn = 0↲
         ┆a1┆                    A13          A13       A13        A13↲
↲
↲
╞	_________________________________________________________↲
         all other         r1         r2         r4         r5↲
         X.25 packets↲
         ┆a1┆                     A1           A1        A1         A1↲
↲
↲
╞	_________________________________________________________↲
         NC restart        r2         r2         r4         r5↲
         request↲
         ┆a1┆                    A14           A0        A14        A2↲
         hdlc_             r5         r5         r5         r4↲
         connected↲
         ┆a1┆                     A9           A9         A9       A17↲
         hdlc_             r5         r5         r5         r5↲
         disconnected↲
         ┆a1┆                     A0           A5         A5        A9↲
         timer t20         r5         r2         r4         r5↲
         ┆a1┆┆e1┆expired↲
         ┆a1┆                     A9          A16        A16        A9↲
↲
╞	Table 16: Process dte_lcnzero, state/action table.↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014e31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆a1┆Actions:↲
↲
╞	┆b0┆A0 ┆f0┆:  Return message with result 'ok'↲
↲
╞	┆b0┆A1 ┆f0┆:  Return message to pool.↲
↲
╞	┆b0┆A2 ┆f0┆:  Return message with result 'rejected'.↲
↲
╞	┆b0┆A5 ┆f0┆:  ┆84┆Stop timer t20 (state := t_stop) and↲
╞	      return message with result 'ok'↲
↲
╞	┆b0┆A9 ┆f0┆:  (* State table error *)↲
↲
╞	┆b0┆A10┆f0┆: (* Restart indication received *)↲
                 ┆84┆Inform the dte process, send restart con┄firmation to DCE ↓
┆19┆┆91┆┄┄and generate an NC event.↲
↲
╞	┆b0┆A12┆f0┆: (* DCE local procedure error *)↲
                 ┆84┆Send restart request to DCE, start timer t20 (state := ↓
┆19┆┆91┆┄┄t_run) and inform the dte process.↲
↲
╞	┆b0┆A13┆f0┆: (* Diagnostic received *)↲
                 Generate an NC event and inform the dte process.↲
↲
╞	┆b0┆A14┆f0┆: (* Restart requested by the DTE *)↲
                 ┆84┆Send restart request to DCE, start timer t20 (state := ↓
┆19┆┆91┆┄┄t_run) and return message with result ok.↲
↲
╞	┆b0┆A15┆f0┆: (* Restart phase ended *)↲
                 ┆84┆Stop timer t20 (state := t_stop), inform the dte process ↓
┆19┆┆91┆┄┄and generate an NC event.↲
↲
╞	┆b0┆A16┆f0┆: (* Timer t20 has expired *)↲
                 ┆84┆Send restart request to the DCE start timer t20 (state := ↓
┆19┆┆91┆┄┄t_run) and inform the dte process.↲
↲
╞	┆b0┆A17┆f0┆: (* hdlc line connected *)↲
╞	        ┆84┆Start timer t20 (state := t_run) and return message with ↓
┆19┆┆91┆┄┄result ok.↲
↲
↲
┆8c┆┄┆a9┆↓
┆b0┆┆a1┆C.3╞	dte_chan↲
↲
╞	┆84┆As mentioned in subsection 4.6.6 the dte_chan process contains one ↓
┆19┆┆89┆┄┄state/action table, implemented as a state machine. This table is ↓
┆19┆┆89┆┄┄shown below as 5 subtables and a short description of each action ↓
┆19┆┆89┆┄┄is given too. To get a clearer view of the state transitions 4 ↓
┆19┆┆89┆┄┄figures (fig. 45 to fig. 48) outlines the call set-up/clear phase, ↓
┆19┆┆89┆┄┄the data phase and the reset phase.↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆84┆All actions are grouped depending of the overall type of action to ↓
┆19┆┆89┆┄┄be performed. ↓
┆19┆┆89┆┄┄Six groups have been identified:↲
↲
╞	A0-A9  : returnal/discard of message/answer.↲
         A10-A19: call set-up phase↲
         A20-A29: clear phase↲
         A30-A39: normal data transfer↲
         A40-A49: reset phase↲
         A50-A54: special actions↲
↲
╞	┆a1┆Actions:↲
↲
╞	┆b0┆A0 ┆f0┆: Dummy.↲
↲
╞	┆b0┆A1 ┆f0┆: ┆84┆Discard small or big packet by returning buffer to pool.↲
↲
╞	┆b0┆A2 ┆f0┆: ┆84┆Discard big packet by returning buffer to pool.↲
↲
╞	┆b0┆A4 ┆f0┆: ┆84┆(* State table error *)↲
╞	     ┆84┆Trace event.↲
↲
╞	┆b0┆A5 ┆f0┆: Return message with result 'ok'↲
↲
╞	┆b0┆A6 ┆f0┆: ┆84┆Return message with result 'not_processed'.↲
↲
╞	┆b0┆A8 ┆f0┆: ┆84┆Return message with result 'fct_not_allw'.↲
↲
╞	┆b0┆A10┆f0┆: ┆84┆(* Incomming call received *)↲
╞	     ┆84┆The packet is checked, tables are updated, data are moved to ↓
┆19┆┆8e┆┄┄a general input buffer and this buffer is signalled to the ↓
┆19┆┆8e┆┄┄dte_access process. If the check fails, a CLEAR REQUEST pac┄↓
┆19┆┆8e┆┄┄ket is transmitted to the DCE, and an NC event is generated.↲
↲
╞	┆b0┆A11┆f0┆: (* Call request is received from the user *)↲
╞	     ┆84┆The message is checked, tables are updated, and an X.25 CALL ↓
┆19┆┆8e┆┄┄REQUEST packet is build up and transmitted to the DCE. If any ↓
┆19┆┆8e┆┄┄thing went wrong the user is informed by returnal of the buf┄↓
┆19┆┆8e┆┄┄fer and a stream event.↲
↲
┆8c┆┄┆a8┆↓
╞	┆b0┆A12┆f0┆: (* The user has rejected the incomming call *)↲
╞	     ┆84┆A CLEAR REQUEST packet is transmitted to the DCE and table ↓
┆19┆┆8e┆┄┄chan_rec is updated. An NC event is genereated.↲
↲
╞	┆b0┆A13┆f0┆: ┆84┆(* The Virtual Call has been cleared before the user has ↓
┆19┆┆8e┆┆81┆┄responded *)↲
╞	     ┆84┆If the user is accepting the call set-up, the message is ↓
┆19┆┆8e┆┄┄returned with result 'not_processed'. All internal messages ↓
┆19┆┆8e┆┄┄are released.↲
↲
╞	┆b0┆A16┆f0┆: ┆84┆(* The call set-up is accepted by the DCE. A call connected ↓
┆19┆┆8e┆┆81┆┄packet is received *)↲
╞	     ┆84┆The CALL CONNECTED data is moved to the user dte_call_req ↓
┆19┆┆8e┆┄┄message and returned to the user. An NC event is generated ↓
┆19┆┆8e┆┄┄and tables, pool, and timers are updated. If dedicated input ↓
┆19┆┆8e┆┄┄is used, the state machine is prepared for sending an RNR ↓
┆19┆┆8e┆┄┄packet.↲
↲
┆b0┆╞	A17┆f0┆: ┆84┆(* The call set-up is accepted by the user. A call_accept ↓
┆19┆┆8e┆┆81┆┄message is received *)↲
╞	     ┆84┆A CALL ACCEPTED packet is transmitted to the DCE. An NC event ↓
┆19┆┆8e┆┄┄is generated, and tables, pool, and timers are updated.↲
╞	     ┆84┆If dedicated input is used, the state machine is prepared for ↓
┆19┆┆8e┆┄┄sending an RNR packet.↲
↲
╞	┆b0┆A18┆f0┆: ┆84┆(* Timeout t11m: the user has not answered a Virtual Call ↓
┆19┆┆8e┆┆81┆┄set-up request *)↲
╞	     ┆84┆The logical channel is cleared by transmitting a CLEAR ↓
┆19┆┆8e┆┄┄REQUEST packet to the DCE and informing the user through the ↓
┆19┆┆8e┆┄┄dte_access process. An NC event is generated.↲
↲
╞	┆b0┆A19┆f0┆: ┆84┆(* Timeout t21: the DCE has not answered a call request pac┄↓
┆19┆┆8e┆┆81┆┄ket *)↲
╞	     ┆84┆The logical channel is cleared by transmitting a CLEAR RE┄↓
┆19┆┆8e┆┄┄QUEST packet to the DCE and informing the user through the ↓
┆19┆┆8e┆┄┄dte_access process. An NC event is generated.↲
↲
╞	┆b0┆A21┆f0┆: (* DCE local procedure error in state xidle *)↲
╞	     ┆84┆A CLEAR REQUEST packet is transmitted to the DCE.↲
↲
┆8c┆┄┆a8┆↓
╞	┆b0┆A22┆f0┆: (* A clear indication packet is received in state xidle *)↲
╞	     ┆84┆A CLEAR CONFIRMATION packet is transmitted to the DCE, and ↓
┆19┆┆8e┆┄┄the internal stop procedure is initiated.↲
↲
┆b0┆╞	A23┆f0┆: (* A clear indication packet is received *)↲
╞	     ┆84┆A CLEAR CONFIRMATION packet is transmitted to the DCE. The ↓
┆19┆┆8e┆┄┄user is informed through the dte_access process. All user ↓
┆19┆┆8e┆┄┄buffers are returned with result 'not_processed'. An NC event ↓
┆19┆┆8e┆┄┄is generated and the internal stop procedure is initiated.↲
↲
┆b0┆╞	A24┆f0┆: (* DCE local procedure error *)↲
╞	     ┆84┆A CLEAR REQUEST packet is transmitted to the DCE. The user is ↓
┆19┆┆8e┆┄┄informed through the dte_access process. All user buffers are ↓
┆19┆┆8e┆┄┄returned with result 'not_processed'. An NC event is gene┄↓
┆19┆┆8e┆┄┄rated.↲
↲
┆b0┆╞	A25┆f0┆: (* A clear request message is received from the user *)↲
╞	     ┆84┆A CLEAR REQUEST packet is transmitted to the DCE. All user ↓
┆19┆┆8e┆┄┄buffers are returned, and an NC event is generated.↲
↲
┆b0┆╞	A26┆f0┆: ┆84┆(* Timeout t23: the DCE has not answered a clear request ↓
┆19┆┆8e┆┆81┆┄packet *)↲
╞	     ┆84┆A CLEAR REQUEST packet is transmitted to the DCE. If state is ↓
┆19┆┆8e┆┄┄xdteclear all remaining user buffers are returned, and the ↓
┆19┆┆8e┆┄┄clearing phase of the stream (interface to user) is finished ↓
┆19┆┆8e┆┄┄by informing the dte_access process.↲
↲
┆b0┆╞	A27┆f0┆: ┆84┆(* A clear indication or confirmation packet is received in ↓
┆19┆┆8e┆┆81┆┄state xret_clear *)↲
╞	     ┆84┆An NC event is generated and the internal stop procedure is ↓
┆19┆┆8e┆┄┄initiated.↲
↲
┆b0┆╞	A29┆f0┆: ┆84┆(* A clear indication or confirmation packet is received as ↓
┆19┆┆8e┆┆81┆┄an answer on a clear request packet *)↲
╞	     ┆84┆All pending user buffers are returned and the clearing phase ↓
┆19┆┆8e┆┄┄of the stream (interface to user) is finished by informing ↓
┆19┆┆8e┆┄┄the dte_access process. The internal stop procedure is ↓
┆19┆┆8e┆┄┄initiated.↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	┆b0┆A30┆f0┆: (* A data packet is received *)↲
╞	     ┆84┆The sequence counters (P(R), P(S)) are checked. If not ok an ↓
┆19┆┆8e┆┄┄reset phase is initiated by sending a RESET REQUEST packet to ↓
┆19┆┆8e┆┄┄the DCE.↲
↲
╞	     ┆84┆If ok, the data is moved to a user buffer (either general or ↓
┆19┆┆8e┆┄┄dedicated input depending on chan_rec.rcv_buf_type, receive ↓
┆19┆┆8e┆┄┄buffer type). If the P(R) acknowledged any send_data message ↓
┆19┆┆8e┆┄┄these are returned if possible. If the window has been moved, ↓
┆19┆┆8e┆┄┄data can be sent if any. An RR packet is transmitted to the ↓
┆19┆┆8e┆┄┄DCE if necessary. The timer t30 is updated.↲
↲
┆b0┆╞	A31┆f0┆: (* An interrupt packet is received *)↲
╞	     ┆84┆The interrupt data is moved to a user general input buffer, ↓
┆19┆┆8e┆┄┄which is returned to the user, and an INTERRUPT CONFIRMATION ↓
┆19┆┆8e┆┄┄packet is transmitted to the DCE.↲
↲
┆b0┆╞	A32┆f0┆: ┆84┆(* A data packet is received in a state, where the DTE is not ↓
┆19┆┆8e┆┆81┆┄ready *)↲
╞	     ┆84┆The sequence counters (P(R), P(S)) are checked. If not ok an ↓
┆19┆┆8e┆┄┄reset phase is initiated by sending a RESET REQUEST packet to ↓
┆19┆┆8e┆┄┄the DCE.↲
↲
╞	     ┆84┆If ok, queue the packet if the bit data_lost in status_word ↓
┆19┆┆8e┆┄┄is not already set. If it is, discard the packet.↲
↲
╞	     ┆84┆If the P(R) acknowledged any send_data message these are ↓
┆19┆┆8e┆┄┄returned if possible.↲
↲
┆b0┆╞	A33┆f0┆: (* An rr or rnr is received *)↲
╞	     ┆84┆The sequence counter P(R) is checked. If not ok an reset ↓
┆19┆┆8e┆┄┄phase is initiated by sending a RESET REQUEST packet to the ↓
┆19┆┆8e┆┄┄DCE. If the window has been moved, data can be sent if any. ↓
┆19┆┆8e┆┄┄If the P(R) acknowledged any send_data messages these are ↓
┆19┆┆8e┆┄┄returned if possible.↲
↲
┆b0┆╞	A34┆f0┆: (* Internal event: window open *)↲
╞	     ┆84┆Enough dedicated input buffers has been supplied by the user ↓

════════════════════════════════════════════════════════════════════════
↓
┆19┆┆8e┆┄┄to set the Virtual Call in dte ready, by transmitting an RR ↓
┆19┆┆8e┆┄┄packet to the DCE. If any X.25 DATA packets are queued, ↓
┆19┆┆8e┆┄┄'receive' these and return the data to the user in a ↓
┆19┆┆8e┆┄┄dedicated input buffer.↲
↲
┆b0┆╞	A35┆f0┆: (* A send_data message is received *)↲
╞	     ┆84┆The size of the message is checked, so an X.25 header can be ↓
┆19┆┆8e┆┄┄in front of the user data. If ok an X.25 DATA packet is ↓
┆19┆┆8e┆┄┄transmitted to the DCE if internal resources available and ↓
┆19┆┆8e┆┄┄window open. If not possible to sent DATA packet it is queue ↓
┆19┆┆8e┆┄┄at a semaphore.↲
↲
┆b0┆╞	A36┆f0┆: (* A send_interrupt message is received *)↲
╞	     ┆84┆The size of the message is checked, so an X.25 header can be ↓
┆19┆┆8e┆┄┄in front of the user data. If ok an X.25 INTERRUPT packet is ↓
┆19┆┆8e┆┄┄transmitted to the DCE.↲
↲
┆b0┆╞	A37┆f0┆: (* Timeout t30: idle timer *)↲
╞	     ┆84┆An RR packet is transmitted to the DCE.↲
↲
┆b0┆╞	A38┆f0┆: (* An interrupt confirmation packet is received *)↲
╞	     ┆84┆The now acknowledged interrupt is returned to the user. If ↓
┆19┆┆8e┆┄┄any dte_send_interrupt is pending the first is transmitted to ↓
┆19┆┆8e┆┄┄the DCE as an X.25 INTERRUPT packet.↲
↲
┆b0┆╞	A40┆f0┆: (* An reset request message is received *)↲
╞	     ┆84┆An reset phase is initiated by transmitting an RESET REQUEST ↓
┆19┆┆8e┆┄┄packet to the DCE. All user buffers are returned.↲
↲
┆b0┆╞	A41┆f0┆: ┆84┆(* An reset indication packet is received in state wsync, ↓
┆19┆┆8e┆┆81┆┄ndce_wsync *)↲
╞	     ┆84┆An RESET CONFIRMATION packet is transmitted to the DCE. All ↓
┆19┆┆8e┆┄┄user buffers are returned.↲
↲
┆b0┆╞	A42┆f0┆: (* Timeout t12m: DCE reset timeout *)↲
╞	     ┆84┆An RESET CONFIRMATION packet is transmitted to the DCE. If ↓
┆19┆┆8e┆┄┄dedicated input is used, the state machine is prepared for ↓
┆19┆┆8e┆┄┄sending an RNR packet.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	A43┆f0┆: (* A sync message is received *)↲
╞	     ┆84┆The message is queued until an RESET CONFIRMATION packet is ↓
┆19┆┆8e┆┄┄received.↲
↲
╞	┆b0┆A44┆f0┆: (* A sync message is received *)↲
╞	     ┆84┆The reset phase is ended by sending a RESET CONFIRMATION ↓
┆19┆┆8e┆┄┄packet to the DCE and returning the dte_sync_stream message ↓
┆19┆┆8e┆┄┄to the user. If dedicated input is used, the state machine is ↓
┆19┆┆8e┆┄┄prepared for sending an RNR packet.↲
↲
┆b0┆╞	A45┆f0┆: (* An reset indication packet is received *)↲
╞	     ┆84┆The user is informed through the dte_access process and all ↓
┆19┆┆8e┆┄┄user buffers are returned with result 'not_processed_. Timer ↓
┆19┆┆8e┆┄┄t12m is started.↲
↲
┆b0┆╞	A46┆f0┆: ┆84┆(* An reset indication packet is received in state ↓
┆19┆┆8e┆┆81┆┄ndte_wsync, ndctewsync *)↲
╞	     ┆84┆An RESET CONFIRMATION packet is transmitted to the DCE. All ↓
┆19┆┆8e┆┄┄user buffers are returned, and any X.25 DATA packets queued ↓
┆19┆┆8e┆┄┄are discarded.↲
╞	     ┆84┆The state machine is prepared for sending an RNR packet.↲
↲
┆b0┆╞	A47┆f0┆: ┆84┆(* An reset indication or confirmation packet is received *)↲
╞	     ┆84┆The reset phase is ended. Return a possible dte_reset_req ↓
┆19┆┆8e┆┄┄message. If dedicated input is used and not enough dedicated ↓
┆19┆┆8e┆┄┄input buffers are supplied by the user, the state machine is ↓
┆19┆┆8e┆┄┄prepared for sending an RNR packet.↲
↲
┆b0┆╞	A48┆f0┆: ┆84┆(* Timeout t22: the DCE has not answered an reset request ↓
┆19┆┆8e┆┆81┆┄packet *)↲
╞	     ┆84┆An RESET REQUEST packet is transmitted to the DCE, and timer ↓
┆19┆┆8e┆┄┄t22 is started.↲
↲
┆b0┆╞	A49┆f0┆: (* DCE local procedure error *)↲
╞	     ┆84┆All user buffers are returned. If state is xreset or any ↓
┆19┆┆8e┆┄┄xxx_wsync the user is not informed. Otherwise the user is ↓
┆19┆┆8e┆┄┄informed through the dte_access process. Timer t22 is ↓
┆19┆┆8e┆┄┄started.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	A50┆f0┆: ┆84┆(* A send data message received in any state with dte not ↓
┆19┆┆8e┆┆81┆┄ready *)↲
╞	     ┆84┆The message size is checked, so an X.25 header can be in front ↓
┆19┆┆8e┆┄┄of the user data. If ok queue the message at a semaphore.↲
↲
┆b0┆╞	A51┆f0┆: ┆84┆(* A send interrupt message is received in a state with an ↓
┆19┆┆8e┆┆81┆┄unacknowledged X.25 interrupt *)↲
╞	     ┆84┆The message is queued at a semaphore.↲
↲
┆b0┆╞	A52┆f0┆: (* Timeout t31: data lost timer *)↲
╞	     ┆84┆Discard any queued X.25 DATA packets and if any is discarded ↓
┆19┆┆8e┆┄┄set the bit data_lost in the status_word.↲
↲
┆b0┆╞	A53┆f0┆: (* Internal event: xdata ┆a1┆d┆e1┆te ┆a1┆n┆e1┆ot ┆a1┆r┆e1┆eady *)↲
╞	     ┆84┆An RNR packet is transmitted to the DCE.↲
↲
┆b0┆╞	A54┆f0┆: (* A change input mode message is received *)↲
╞	     ┆84┆All dedicated input buffers are returned with result ↓
┆19┆┆8e┆┄┄'not_processed', and an RR packet is transmitted to the DCE.↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 45: ┆84┆Process dte_chan, state transition graph for the call ↓
┆19┆┆94┆┄┄set-up and clear phase.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 46: ┆84┆Process dte_chan, state transition graph for the data ↓
┆19┆┆94┆┄┄phase.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 47: ┆84┆Process dte_chan, state transition graph for the reset ↓
┆19┆┆94┆┄┄phase, part 1.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
┆81┆↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 48: ┆84┆Process dte_chan, state transition graph for the reset ↓
┆19┆┆94┆┄┄phase, part 2.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆D.╞	TRACE AND TEST DESCRIPTION↲
↲
╞	┆84┆In this appendix examples of trace output (D.1) and internal ↓
┆19┆┆89┆┄┄testoutput (D.3) is shown. Furthermore are the text strings used ↓
┆19┆┆89┆┄┄in writing the internal testoutput on the console described.↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆D.1  ╞	Trace Example↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆D.2╞	Testoutput Conversion↲
↲
╞	┆84┆As mentioned in subsection 6.2.4 the format of the printed ↓
┆19┆┆89┆┄┄testoutput line for the processes dte_lcnzero and dte_chan depends ↓
┆19┆┆89┆┄┄of the testrecord type (kind).↲
╞	┆84┆In table 18 these dependants are outlined.↲
↲
╞	dte_lcnzero print line:↲
↲
╞	┆b0┆<time> <kind> <dte state> <field1> <field2> <field3> <aux>↲
↲
╞	dte_chan print line:↲
↲
╞	┆b0┆<time> <kind> <state> <c_active> <field5>↲
╞	       ┆b0┆<dec.field1> <hex.field1> <dec.field2> <hex.field2>↲
╞	       ┆b0┆<dec.field3> <hex.field3> <dec.field4> <hex.field4>↲
╞	       ┆b0┆<aux>↲
↲

╱04002d440c00060000000003015031400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓

════════════════════════════════════════════════════════════════════════
↓
↲
╞	______________________________________________________________________↲
╞	╞	     ┆82┆text┆81┆      kind                ┆82┆<aux>┆81┆↲
╞	┆a1┆     ╞	                no                                ╞	     ↲
╞	 dte_lcnzero  ┆a1┆ ┆a1┆x25-er      0     <packet_id> <decode result>          ↲
╞	╞	    ┆a1┆ ┆a1┆a-lcn0      1                                          ↲
╞	╞	    ┆a1┆ ┆a1┆timer       2     <t20 state>                          ↲
╞	╞	    ┆a1┆ ┆a1┆ev/ac       3     <packet_id><event><action><t20 state>↲
╞	╞	    ┆a1┆ ┆a1┆unknw       4                                          ↲
╞	┆a1┆╞	     ┆a1┆sup-er      5                                          ↲
╞	 dte_chan     ┆a1┆ ┆a1┆u-dedi      0                                          ↲
╞	╞	    ┆a1┆ ┆a1┆lcp-op      2                                          ↲
╞	╞	    ┆a1┆ ┆a1┆unkw-m      3                                          ↲
╞	╞	    ┆a1┆ ┆a1┆a-chan      4                                          ↲
╞	╞	    ┆a1┆ ┆a1┆a-hrec      6     <packet_id> <decode result>          ↲
╞	╞	    ┆a1┆ ┆a1┆a-hxmit     7                                          ↲
╞	╞	    ┆a1┆ ┆a1┆supmes      8                                          ↲
╞	╞	    ┆a1┆ ┆a1┆timer       9     <timer state>                        ↲
╞	╞	    ┆a1┆ ┆a1┆unkw-a     10                                          ↲
╞	╞	    ┆a1┆ ┆a1┆c-stop     11     <stop cause>                         ↲
╞	╞	    ┆a1┆ ┆a1┆c-init     12                                          ↲
╞	╞	    ┆a1┆ ┆a1┆ev/ac      13     <event> <action>                     ↲
         ┆a1┆╞	     ┆a1┆CONT.      15                                          ↲
↲

╱04002d440c00060000000003014b31400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱

╱04002d440c00060000000003015031400000000000000000000000000000000000000000000000000a141e28323c464b555f69737d8791ff04╱
↓
╞	Table 18: ┆84┆Print format for testoutput from the processes ↓
┆19┆┆93┆┄┄dte_lcnzero and dte_chan.↲
↲
↲
┆b0┆╞	┆a1┆parameter <dte state> in dte and dte_lcnzero testoutput:↲
↲
╞	READY╞	: ┆84┆the DTE is in ready state, i.e. r1 according to the ↓
┆19┆┆95┆┄┄X.25 Recommendation (ref. (1)).↲
↲
╞	RESTART╞	: ┆84┆the DTE is in a restart phase, i.e. r2 according to ↓
┆19┆┆95┆┄┄the X.25 Recommendation (ref. (1)).↲
↲

════════════════════════════════════════════════════════════════════════
↓
╞	H-ACTIVE╞	: ┆84┆the hdlc line is connected, but level 3 has not yet ↓
┆19┆┆95┆┄┄exchanged restart packets.↲
↲
╞	NET DOWN╞	: ┆84┆the hdlc line is disconnected.↲
↲
┆b0┆╞	┆a1┆parameter <packet-id> in dte_lcnzero and dte_chan:↲
↲
╞	DATA╞	: DCE data packet↲
╞	CALL╞	: incomming call packet↲
╞	CALL-A╞	: call connected packet↲
╞	CLEAR╞	: clear indication packet↲
╞	CLEAR-C╞	: DCE clear confirmation packet↲
╞	RESET╞	: reset indication packet↲
╞	RESET-C╞	: DCE reset confirmation packet↲
╞	INT╞	: DCE interrupt packet↲
╞	INT-C╞	: DCE interrupt confirmation packet↲
╞	DIAG╞	: Diagnostic packet↲
╞	RR╞	: DCE rr (modulo 8) packet↲
╞	RNR╞	: DCE rnr (modulo 8) packet↲
╞	REJ╞	: DTE rej (modulo 8) packet↲
╞	RESTART╞	: restart indication packet↲
╞	RESTA-C╞	: DCE restart confirmation packet↲
╞	???????╞	: unknown packet↲
↲
┆b0┆╞	┆a1┆parameter <decode result> in dte_lcnzero and dte_chan:↲
↲
╞	ok╞	: the packet decoding was performed without error↲
╞	lgth-e╞	: the packet is shorter than 2 octets↲
╞	form-e╞	: error in the general format identifier↲
╞	qbit-e╞	: the Q-bit is not allowed in call packets↲
╞	i-chan╞	: ┆84┆a restart, restart confirmation or diagnostic packet ↓
┆19┆┆95┆┄┄on a channel different from zero.↲
╞	diagna╞	: the diagnostic packet is not allowed↲
╞	rej-na╞	: the rej packet is not allowed from the DCE.↲
╞	unk-id╞	: ┆84┆the packet type is unknown or the packet length is ↓
┆19┆┆95┆┄┄shorter than 3 octets.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	┆a1┆parameter <timer state> in dte_lcnzero and dte_chan:↲
↲
╞	run╞	: the timer is active↲
╞	stop╞	: the timer is stopped↲
╞	updt╞	: ┆84┆the timer will be updated (started) as soon as ↓
┆19┆┆95┆┄┄resources are available.↲
↲
┆b0┆╞	┆a1┆parameter <event> in dte_lcnzero:↲
↲
╞	rest-xt╞	: restart indication received from the network↲
╞	rest-xc╞	: ┆84┆restart confirmation received from the network↲
╞	x-diag╞	: diagnostic packet received from the network↲
╞	r-buf╞	: ┆84┆buffer request message returned from the dte_pool ↓
┆19┆┆95┆┄┄process↲
╞	rest-sr╞	: restart request received from the dte process↲
╞	c-hdlc╞	: hdlc connected indication received↲
╞	d-hdlc╞	: hdlc disconnected indication received↲
╞	t20-exp╞	: timer t20 expired↲
↲
┆b0┆╞	┆a1┆parameter <state> in dte_chan:↲
↲
╞	┆84┆The texts printed all equal those described in subsection 4.6.2.↲
↲
┆b0┆╞	┆a1┆parameter <c_active> and <send_rnr> in dte_chan:↲
↲
╞	T╞	: true↲
╞	F╞	: false↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆╞	┆a1┆parameter <stop cause> in dte_chan:↲
↲
╞	dtecl╞	: DTE initated clearing↲
╞	dceer╞	: ┆84┆clearing initiated because of an DCE error in call ↓
┆19┆┆95┆┄┄set-up↲
╞	cacce╞	: error in generation of an call accepted packet↲
╞	uterm╞	: user initiated clearing↲
╞	dcecl╞	: DCE clearing in state xidle↲
╞	calle╞	: error in generation of an call request packet↲
╞	incrj╞	: incomming call rejected↲
╞	srest╞	: restart indicated by the dte process↲
╞	timeo╞	: timeout in xdteclear state↲
╞	ruser╞	: remote user initiated clearing↲
╞	?????╞	: unknown result↲
↲
┆b0┆╞	┆a1┆parameter <event> in dte_chan:↲
↲
╞	┆84┆The texts equal those in the state/action tables in appendix C.3.↲
↲
╞	w-open╞	: the X.25 window has been moved↲
╞	enghres╞	: enough buffers have been supplied by the user↲
╞	callreq╞	: call request message from the user↲
╞	inc-acp╞	: incomming call accepted by the user↲
╞	inc-rej╞	: incomming call rejected↲
╞	s-data╞	: send data message from the user↲
╞	s-intrp╞	: send interrupt message from the user↲
╞	ci-mode╞	: change input mode message from the user↲
╞	clr-req╞	: clear request message from the user↲
╞	sync╞	: synchronize stream message from the user↲
╞	t11╞	: timer t11m has expired↲
╞	t12╞	: timer t12m has expired↲
╞	t21       : timer t21 has expired↲
╞	t22╞	: timer t22 has expired↲
╞	t23╞	: timer t23 has expired↲
╞	t30╞	: timer t30 has expired↲
╞	t31╞	: timer t31 has expired↲

════════════════════════════════════════════════════════════════════════
↓
╞	xinccal╞	: X.25 incomming call received↲
╞	xcalcon╞	: X.25 call connected packet received↲
╞	xclear╞	: X.25 clear indication received↲
╞	xclr-co╞	: X.25 clear confirmation packet received↲
╞	xdatrnr╞	: internal event: xdata dte not ready↲
╞	xdata╞	: X.25 data packet received↲
╞	xint╞	: X.25 interrupt packet received↲
╞	xint-co╞	: X.25 interrupt confirmation packet received↲
╞	xrr╞	: X.25 rr packet received↲
╞	xrnr╞	: X.25 rnr packet received↲
╞	xreset╞	: X.25 reset indication received↲
╞	xresetc╞	: X.25 reset confirmation packet received↲
╞	others╞	: other undefined or illegal X.25 packet received↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆D.3╞	Testoutput Examples↲
↲
┆a1┆┆b0┆D.3.1╞	Process dte↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆D.3.2╞	Process dte_chan_001↲
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆E.╞	CONTENTS OF LIBRARIES↲
↲
╞	┆84┆In this appendix are the contents of the different DTE libraries ↓
┆19┆┆89┆┄┄shown. In E.1 the libraries operated on by the fp utility ┆b0┆lib ↓
┆19┆┆89┆┆81┆┆82┆┆f0┆(source libraries) and in E.2 those operated on by the fp ↓
┆19┆┆89┆┆81┆┄utilities ┆b0┆pliblookup┆f0┆, ┆b0┆plibinsert┆f0┆, ┆b0┆plibextract ┆f0┆and ┆b0┆plibdelete ↓
┆19┆┆89┆┆85┆┆82┆┆f0┆(binary libraries).↲
↲
↲
┆b0┆┆a1┆E.1╞	Lib-Files↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆E.2╞	Plib-Files↲

════════════════════════════════════════════════════════════════════════
↓
↲

════════════════════════════════════════════════════════════════════════
↓
┆b0┆┆a1┆F.╞	COMPILATION EXAMPLES↲
↲
╞	┆84┆In this appendix four compilation examples are shown. In F.1 is ↓
┆19┆┆89┆┄┄the operator dialogue during an update of an existing binary dte ↓
┆19┆┆89┆┄┄shown. In F.2 is the generation of the X.25 procedure library ↓
┆19┆┆89┆┄┄shown and in F.3 an update of the same library. The trace system ↓
┆19┆┆89┆┄┄generation is shown in F.4. All operator operations are indicated ↓
┆19┆┆89┆┄┄by block faced types.↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆┆b0┆F.1╞	Update of an Existing Binary dte.↲
┆81┆↲
╞	┆b0┆lib set.libjdte jdtegen↲
↲
╞	end         38↲
╞	┆b0┆i jdtegen↲
╞	*************** CENTERNET DTE MODULE COMPILATION ***************↲
           type FILE NAME of SOURCE DTE : ┆b0┆libtdte14↲
╞	  ┆81┆-----------------------------------------↲
╞	  compilation of DTE supervisor  type 1,yes ↲
╞	  compilation of DTE access      type 2.yes↲
╞	  compilation of DTE channel p.  type 3.yes↲
╞	  compilation of DTE lcn zero    type 4.yes↲
╞	  compilation of hrec            type 5.yes↲
╞	  compilation of DTE poolhandler type 6.yes↲
╞	  in one line ended with <cr>↲
╞	┆b0┆5.yes↲
╞	  Type name of DTE CONFIGURATION file↲
╞	  standard file : type stdconf↲
╞	┆b0┆stdconf↲
╞	  Type yes if listning of DTE configuration file↲
           is wanted ELSE no !!↲
╞	┆b0┆no↲
↲
╞	information: segm pr. buf optimized: 34↲
╞	end↲
╞	  UPDATE of an EXISTING or NEW  binary DTE ????↲
╞	  Type yes or no : ┆b0┆yes↲
╞	  Type NAME of EXISTING or NEW binary DTE : ┆b0┆bdte20↲
          dte hrec compilation↲
╞	 dte hrec procwess generated↲
╞	 binary dte updated↲
╞	***lookup tempdte unknown↲
╞	 dte generation ended↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆┆b0┆F.2╞	Generation of the X.25 Procedure Library.↲
↲
╞	┆b0┆lib set.libjdte jx25lib↲
↲
╞	end         38↲
┆b0┆╞	i jx25lib↲
╞	********** CENTERNET EXTERNAL X25 LIBRARY GENERATION **********↲
  ╞	  type FILE NAME of SOURCE X.25 : ┆b0┆libx25↲
╞	fastmove: a temporary output file created on disc↲
↲
╞	end         38↲
╞	edit begin.↲
╞	;    (**** check x25 facilities ****)↲
╞	;    (**** check faci spec ****)↲
╞	;    (**** procedure code x25 ****)↲
╞	;    (**** procedure decode x25 ****)↲
         ;    (**** init x25 facility check ****)↲
╞	;    (**** init window ****)↲
╞	;    (**** pack address ****)↲
╞	;    (**** unpack address ****)↲
╞	.    (**** procedure w_algorithm ****)↲
↲
╞	1136  line, end document.↲
╞	edit end.↲
          x25 library generation↲
╞	 x25 library generated↲
╞	 x25 external procedure library compilation ended↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆┆b0┆F.3╞	Update of the X.25 Procedure Library.↲
↲
╞	┆b0┆lib set.libjdte jx25proc↲
↲
╞	end         38↲
╞	┆b0┆i jx25proc↲
╞	********** CENTERNET X25 External Procedure Compilation **********↲
           type FILE NAME of SOURCE X.25↲
╞	  ended with a æ                ┆b0┆: libtx25æ↲
╞	  type NAME of EXTERNAL PROCEDURE,↲
╞	  ended with a æ                ┆b0┆: packadræ↲
           type yes if LISTNING of source else no↲
╞	┆b0┆no↲
↲
╞	end         38↲
╞	  x25 external procedure compilation↲
╞	  x25 library updated↲
╞	  x25 procedure compilation ended↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆┆b0┆F.4╞	Generation of the Trace System.↲
↲
╞	┆b0┆lib set.libjdte jdtetrace↲
↲
 ╞	end         38↲
╞	┆b0┆i jdtetrace↲
╞	*********** CENTERNET DTE TRACE SYSTEM COMPILATION ***********↲
╞	  type FILE NAME of SOURCE DTE TRACE ┆b0┆: libtdte14↲
╞	  ┆81┆----------------------------------------------↲
╞	  compilation of DTE trace       type 1.yes↲
╞	  compilation of DTE outtrace    type 2.yes↲
           in one line ended with <cr>↲
╞	┆b0┆1.yes 2.yes↲
╞	  UPDATE of an EXISTING binary DTE TRACE SYSTEM ????↲
╞	  type yes or no ┆b0┆: no↲
╞	 dte trace compilation↲
╞	 dte trace process generated↲
╞	 dte outtrace compilation↲
╞	 dte outtrace process generated↲
╞	***lookup tempdte unknown↲
╞	 dte trace system generation ended↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆┆b0┆G.╞	BUFFER LAYOUT IN CALL SET-UP PHASE.↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 49: ┆84┆Layout and transfer of call-parameters from User ↓
┆19┆┆94┆┄┄dte_call_req to X.25 CALL REQUEST packet.↲
↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
↲
╞	Figure 50: ┆84┆Layout and transfer of call parameters from an INCOMING ↓
┆19┆┆94┆┄┄CALL Packet to an Internal Buffer and a User Buffer.↲
↲

════════════════════════════════════════════════════════════════════════
↓
┆a1┆┆b0┆H.╞	INDEX↲
↲
┆a1┆┆b0┆H.1╞	Survey of Figures.↲
↲
╞	Figure  1: Process tree of the External DTE and its environment.↲
╞	Figure  2: ┆84┆Process tree of the DTE debugging, test and trace ↓
┆19┆┆94┆┄┄tools.↲
╞	Figure  3: Message flow of normale data.↲
╞	Figure  4: Message flow of interrupt data.↲
╞	Figure  5: Message flow of X.25 control packet output.↲
╞	Figure  6: Message flow at Virtual Call Set-up.↲
╞	Figure  7: External Interfaces of the DTE module.↲
╞	Figure  8: Message flow between the DTE module and the NCP.↲
╞	Figure  9: Snap shot of routing pointers.↲
╞	Figure 10: Buffer flow for bigbuf, smallbuf, x25buf.↲
╞	Figure 11: Relation between streams and logical channels.↲
╞	Figure 12: State transition graph for dte_state in process dte.↲
╞	Figure 13: Flow of messages to and from dte.↲
╞	Figure 14: process dte, main flowchart.↲
╞	Figure 15: process dte, part (B) flowchart.↲
╞	Figure 16: process dte, part (C) flowchart.↲
╞	Figure 17: Process dte, part (D) flowchart.↲
╞	Figure 18: Process dte, part (E) flowchart.↲
╞	Figure 19: Process dte, part (F) flowchart.↲
╞	Figure 20: Process dte, part (G) flowchart.↲
╞	Figure 21: process dte, part (H) flowchart.↲
╞	Figure 22: Process dte, part (I) flowchart.↲
╞	Figure 23: Process dte, part (J) flowchart.↲
╞	Figure 24: Snap shot of tables connections.↲
╞	Figure 25: Flowchart for HDLC event treatment.↲
╞	Figure 26: ┆84┆State transition graph for dte_state in process ↓
┆19┆┆94┆┄┄dte_access.↲
╞	Figure 27: Flow of message to and from dte_access.↲
╞	Figure 28: Process dte_access, main flowchart.↲
╞	Figure 29: Flow of messages to and from dte_hrec.↲
╞	Figure 30: Process dte_hrec, main flowchart.↲
╞	Figure 31: ┆84┆State transition graph for p_level_state in process ↓
┆19┆┆94┆┄┄dte_lcnzero.↲

════════════════════════════════════════════════════════════════════════
↓
╞	Figure 32: Flow of messages to and from dte_lcnzero.↲
╞	Figure 33: Process dte_lcnzero, main flowchart.↲
╞	Figure 34: Flow of messages to and from dte_chan.↲
╞	Figure 35: Process dte_chan, main flowchart.↲
╞	Figure 36: Process dte_chan, part (C) flowchart.↲
╞	Figure 37: Process dte_chan, part (D) flowchart.↲
╞	Figure 38: process dte_chan, part (E) flowchart.↲
╞	Figure 39: Process dte_chan, part (F) flowchart.↲
╞	Figure 40: Process dte_chan, part (G) flowchart.↲
╞	Figure 41: Acknowledgement strategy flowchart.↲
╞	Figure 42: Message flow in the trace system.↲
╞	Figure 43: Message flow of testmessages.↲
╞	Figure 44: DTE System text and job connections.↲
╞	Figure 45: ┆84┆Process dte_chan, state transition graph for the call ↓
┆19┆┆94┆┄┄set-up and clear phases.↲
╞	Figure 46: ┆84┆Process dte_chan, state transition graph for the data ↓
┆19┆┆94┆┄┄phase.↲
╞	Figure 47: ┆84┆Process dte_chan, state transition graph for the reset ↓
┆19┆┆94┆┄┄phase, part 1.↲
╞	Figure 48: ┆84┆Process dte_chan, state transition graph for the reset ↓
┆19┆┆94┆┄┄phase, part 2.↲
╞	Figure 49: ┆84┆Layout and transfer of call parameters from User Call ↓
┆19┆┆94┆┄┄Request to X.25 Call request.↲
╞	Figure 50: ┆84┆Layout and transfer of call parameters fron an Incoming ↓
┆19┆┆94┆┄┄Call Packet to an Internal Buffer and a User Buffer.↲
↲
↲
┆a1┆┆b0┆H.2╞	Survey of Tables.↲
↲
╞	Table  1: Processing of DTE User operations.↲
╞	Table  2: HDLC operations utilized by the DTE module.↲
╞	Table  3: ┆84┆Environments in which address types and constants are ↓
┆19┆┆93┆┄┄defined.↲
╞	Table  4: ┆84┆Process dte, internal state/action table for dte_chan ↓
┆19┆┆93┆┄┄incarnations.↲
╞	Table  5: ┆84┆Process dte, internal state/action table for logical ↓
┆19┆┆93┆┄┄channels.↲

════════════════════════════════════════════════════════════════════════
↓
╞	Table  6: Process dte, state transition table for line_state.↲
╞	Table  7: ┆84┆Process dte_access, state transition table for ↓
┆19┆┆93┆┄┄user_state.↲
╞	Table  8: State variables of the Trace System.↲
╞	Table  9: Process dte, testrecord kind and parameter fields.↲
╞	Table 10: ┆84┆Process dte_lcnzero, testrecord kind and parameter ↓
┆19┆┆93┆┄┄fields.↲
╞	Table 11: Process dte_chan, testrecord kind and parameter fields.↲
╞	Table 12: Storage requirements of the DTE System.↲
╞	Table 13: Process dte_access, user dependent state/action table.↲
╞	Table 14: Process dte_access, stream dependent state/action table.↲
╞	Table 15: ┆84┆Process dte_access, stream independent state/action ↓
┆19┆┆93┆┄┄table.↲
╞	Table 16: Process dte_lcnzero, state/action table.↲
╞	Table 17: Process dte_chan, state/action table.↲
╞	Table 18: ┆84┆Print format for testoutput from the processes ↓
┆19┆┆93┆┄┄dte_lcnzero and dte_chan.↲
↲
↲
┆a1┆┆b0┆H.3╞	Survey of Examples.↲
↲
╞	Example 1: Example of DTE address.↲
╞	Example 2: ┆84┆Example of user_id_length greater than sub address ↓
┆19┆┆94┆┄┄length.↲
╞	Example 3: ┆84┆Example of user_id_length smaller than sub address ↓
┆19┆┆94┆┄┄length.↲
╞	Example 4: Operator commands for update of an existing binary dte.↲
╞	Example 5: ┆84┆Operator commands for generating the X.25 procedure ↓
┆19┆┆94┆┄┄library.↲
╞	Example 6: ┆84┆Operator commands for update of the X.25 procedure ↓
┆19┆┆94┆┄┄library.↲
╞	Example 7: Operator commands for generating the Trace System.↲

════════════════════════════════════════════════════════════════════════
↓
↲
↲
┆1a┆┆1a┆.4. All operator operations are i

Full view