CONTENTS Title Page Copyright Page Preface 1 An Introduction to the OSI Transport Layer 1.1 The OSI Transport Service and Protocol 1.1.1 The Classes of Transport Protocol 1.2 Transport Layer Functions 1.2.1 How a Transport Connection Is Set Up 1.2.2 Exchanging Data 2 Introduction to VOTS Programming 2.1 An Overview of the VOTS Programming Interface 2.2 The VOTS Device, Channels, and Mailboxes 2.3 Using $QIO or $QIOW System Service Calls 2.4 NCBs and Item Lists 2.5 Issuing an Outbound Connection Request 2.5.1 The Status of an Outbound Connection Request 2.6 Receiving an Inbound Connection Request 2.6.1 Examining an Inbound Connection Request 2.6.2 Accepting an Inbound Connection Request 2.6.3 Rejecting an Inbound Connection Request 2.7 Exchanging Data 2.8 Canceling I/O on a Channel 2.9 Disconnecting a Transport Connection 2.9.1 Receiving a Disconnection 2.9.2 Results of Disconnection 2.10 Deassigning a Channel 2.11 System Service Calls 3 Programming Guidelines 3.1 Including Definitions of Symbols 3.1.1 VOTS-specific Symbols 3.1.2 Mailbox Message Types 3.2 Assigning a Channel and Setting Up a Mailbox 3.2.1 What Happens When You Assign a Channel to VOTS 3.2.2 Assigning a Channel Without Creating a Mailbox 3.2.3 Assigning a Channel and Creating a Mailbox 3.2.4 Associating One Mailbox with Several Channels 3.2.5 Reading the Mailbox 3.2.6 Reading a Mailbox Associated with Several Channels 3.2.7 Removing an Associated Mailbox 3.2.8 Mailbox Messages 3.3 Issuing $QIO and $QIOW Calls to VOTS 3.3.1 Input/Output Status Block (IOSB) 3.3.2 Item Lists and NCBs 3.3.3 Item Lists 3.3.3.1 Input Item Lists 3.3.3.2 Output Item Lists 3.3.3.3 Structure of an Item in an Item List 3.3.4 NCBs 3.4 Initiating an Outbound Connection 3.4.1 $QIO and $QIOW Calls for Connection Requests 3.4.2 Supplying an Input Item List in a Connection Request 3.4.3 Supplying an Output Item List Buffer in a Connection Request 3.4.4 Supplying an NCB in a Connection Request 3.4.5 Addressing the Remote Host 3.4.6 Using Logical Names for VOTS-addresses 3.4.6.1 Adding VOTS Logical Names to OSIT$NAMES 3.4.7 Access Control Information in Outbound Connection Requests 3.4.8 TSAPs in Outbound Connection Requests 3.4.8.1 TSAP Identifiers in Input Item Lists 3.4.8.2 TSAP Identifiers in NCBs 3.4.9 Connection Status 3.4.9.1 Reading the IOSB 3.4.9.2 Reading the Mailbox 3.4.9.3 Reading the Output Item List 3.5 Inbound Connection Requests 3.5.1 Transport Service Access Points 3.5.1.1 Creating an Active TSAP Association 3.5.1.2 A Passive TSAP Association That Becomes Active 3.5.1.3 Deleting an Active TSAP Association 3.5.1.4 Passive TSAP Association: Supplying a .COM File 3.5.1.5 Passive TSAP Association: Access Control Information 3.5.2 Reading Inbound Connection Requests 3.5.3 Examining the NCB 3.5.4 Examining the Connection Request Using $QIO(IO$_SENSEMODE) 3.5.5 Accepting or Rejecting a Connection Request 3.5.5.1 Accepting a Connection Request 3.5.5.2 Rejecting a Connection Request 3.5.5.3 Using Different Channels for Receiving and Accepting 3.6 Exchanging Data 3.6.1 Exchanging Normal Data with No Fragmentation 3.6.2 Exchanging Expedited Data 3.6.3 Correct Sequence for Expedited and Normal Data 3.6.4 Fragmented Data Messages 3.6.4.1 Fragmented Read Requests 3.6.4.2 Fragmented Write Requests 3.6.5 How VOTS Handles Write Requests 3.6.6 Example Routines for Exchanging Data 3.7 Canceling Input/Output on a Channel 3.8 Disconnecting a Transport Connection 3.8.1 Initiating a Disconnection 3.8.2 Receiving a Disconnection Request 3.9 Deassigning the Channel 3.10 Example Program 3.10.1 Introduction and Data Structures 3.10.2 Translation of SYS$NET 3.10.3 Routine Called for Initiator 3.10.4 Routine Called for Responder 3.10.5 AST Routine to Check Status of Outbound Connection Request 3.10.6 Initiate Outbound Connection Request 3.10.7 Assign a Channel to VOTS 3.10.8 Create Mailbox and Post a Read 3.10.9 Deassign a Channel 3.10.10 Check Status of Disconnection 3.10.11 Disconnect Current Transport Connection 3.10.12 Free Write Buffer When Write Request Completes 3.10.13 Send Data on the Transport Connection 3.10.14 Disconnect after Read is Complete 3.10.15 Read Data 3.10.16 Check Acceptance of Inbound Connection 3.10.17 Accept an Inbound Connection 3.10.18 Build Input Item List 3.10.19 Analyze NCB and Build Input Item List 3.10.20 Build Input Item List for a Connection Request 3.10.21 Display Output Item List 3.10.22 Displays a Specified Item 3.10.23 Report $QIO Error 3.10.24 Read Mailbox 3.10.25 Report Mailbox Message Type 3.10.26 Wait for Mailbox Message and Read Mailbox 4 Calling the System Services 4.1 Introduction 4.2 MACRO Coding 4.2.1 Argument Lists 4.3 High-Level Language Coding 4.3.1 Descriptors 4.4 Return Status Codes 4.4.1 Format of the Return Status 4.4.2 Information Provided by Status Codes 4.4.3 Testing the Status Code 4.5 Obtaining Values for Other Symbolic Codes 4.6 Special Return Conditions 5 System Service Calls Not Using Item Lists 5.1 Introduction 5.2 Summary of Call Description 5.2.1 Argument List 5.2.2 Syntax of Calls $ASSIGN $CANCEL $DASSGN $QIO (IO$_ACCESS) $QIO (IO$_ACCESS) $QIO (IO$_ACCESS!IO$M_ABORT) $QIO (IO$_ACPCONTROL) $QIO IO$_DEACCESS $QIO (IO$_READVBLK) $QIO (IO$_WRITEVBLK) $QIO (IO$_WRITEVBLK!IO$M_INTERRUPT) 6 System Service Calls Using Item Lists 6.1 Introduction 6.1.1 Item Lists in $QIO(W) System Service Calls 6.2 Kinds of Item List 6.2.1 Item Types 6.3 Input Item Lists 6.3.1 Description of Input Items 6.4 Output Item Lists 6.4.1 Description of Output Items $QIO (IO$_ACCESS) $QIO (IO$_ACCESS) $QIO (IO$_ACCESS!IO$M_ABORT) $QIO (IO$_SENSEMODE!IO$M_ACCESS) 7 Negotiating Protocol Classes and Options 7.1 Options Within the Transport Protocol Standard 7.2 Transport Protocol Version Number 7.3 Transport Protocol Class 7.3.1 Class Negotiation in Outbound Connection Requests 7.3.1.1 Transport User Specifies Protocol Class 7.3.1.2 Transport User Does Not Specify Protocol Class 7.3.1.3 Negotiating Class 0 7.3.2 Class Negotiation in Inbound Connection Requests 7.3.3 Special Restrictions Applying to Class 0 Connections 7.4 Checksums, Expedited Data and TPDU Format 7.4.1 Specifying Checksums and Expedited Data 7.4.2 Default Values for Checksums and Expedited Data 7.4.3 TPDU Format 7.4.4 Negotiating Protocol Options 7.5 Maximum TPDU Size 7.5.1 Outbound Connection Requests 7.5.2 Inbound Connection Requests 7.5.3 NDSU Size and TPDU Size on an IEEE 802.3 LAN 8 General Differences Between VOTS and DECnet-VAX 8.1 Converting DECnet-VAX Programs 8.1.1 Device Name 8.1.2 NCB Format 8.1.3 User Data 8.1.4 Identifying Tasks 8.1.5 Destination Address 8.1.6 Using the $QIO(IO$_DEACCESS) Call 8.1.7 Zero-length TSDU 8.1.8 Logical Names 8.1.9 Source Node Identifier A $QIO(W) Status Codes B Mailbox Message Types C Structure of IOSBs C.1 IOSB for Successful $QIO(W) Calls C.1.1 Successful $QIO(W) Call with Item List C.1.2 Successful $QIO(W) Call with No Item List C.1.3 Successful $QIO(W) Read and Write Calls C.2 IOSB for Unsuccessful $QIO(W) Calls C.2.1 Unsuccessful $QIO(W) Call with Input Item List Error C.2.2 Unsuccessful Read or Write $QIO(W) Call C.2.3 All Other Unsuccessful $QIO(W) Calls D LIB$PARSE_NCB E Example Programs Glossary access control information . . . data transfer facility DECnet . . . expedited data flow control . . . International Standard Internet protocol . . . network connection network parameter . . . Open Systems Interconnection (OSI) OSI Network Service . . . remote task responding host . . . transport protocol Transport Protocol Data Unit (TPDU) . . . X.25 network TABLES 2-1 Summary of System Service Calls in MACRO Format 3-1 Item Types Used in a Connection Request 6-1 Item Types and Sizes 6-2 Use of Input Items in $QIO(W) calls 7-1 Option Negotiation A-1 Status Codes for $QIO System Services B-1 Mailbox Message Summary B-2 Contents of the INFO Field in a Mailbox Message