Notes: 1) While the Padding, Error Reporting, and Header Error Detection functions must be provided, they are provided only when selected by the sending Network Service user. 2) The correct treatment of the Padding function involves no processing. Therefore, this could equally be described as a Type 3 function. 3) The rationale for the inclusion of type 3 functions is that in the case of some functions it is more important to forward the PDUs between intermediate systems or deliver them to an end-system than it is to support the functions. Type 3 functions should be used in those cases where they are of an advisory nature and should not be the cause of the discarding of a PDU when not supported.
7 STRUCTURE AND ENCODING OF PDUS 7.1 Structure All Protocol Data Units shall contain an integral number of octets. The octets in a PDU are numbered starting from one (1) and increasing in the order in which they are put into an SNSDU. The bits in an octet are numbered from one (1) to eight (8), where bit one (1) is the low-order bit. When consecutive octets are used to represent a binary number, the lower octet number has the most significant value. Any subnetwork supporting this protocol is required to state in its specification the way octets are transferred, using the terms "most significant bit" and "least significant bit." The PDUs of this protocol are defined using the terms "most significant bit" and "least significant bit." Note: When the encoding of a PDU is represented using a diagram in this section, the following representation is used: a) octets are shown with the lowest numbered octet to the left, higher number octets being further to the right; b) within an octet, bits are shown with bit eight (8) to the left and bit one (1) to the right. PDUs shall contain, in the following order: 1) the header, comprising: a) the fixed part; b) the address part; c) the segmentation part, if present; d) the options part, if present and
2) the data field, if present. This structure is illustrated below: Part: Described in: +-------------------+ | Fixed Part | Section 7.2 +-------------------+ +-------------------+ | Address Part | Section 7.3 +-------------------+ +-------------------+ | Segmentation Part | Section 7.4 +-------------------+ +-------------------+ | Options Part | Section 7.5 +-------------------+ +-------------------+ | Data | Section 7.6 +-------------------+ Figure 7-1. PDU Structure
7.2 Fixed Part 7.2.1 General The fixed part contains frequently occuring parameters including the type code (DT or ER) of the protocol data unit. The length and the structure of the fixed part are defined by the PDU code. The fixed part has the following format: Octet +------------------------------------+ | Network Layer Protocol Identifier | 1 |------------------------------------| | Length Indicator | 2 |------------------------------------| | Version/Protocol Id Extension | 3 |------------------------------------| | Lifetime | 4 |------------------------------------| |S |M |E/R| Type | 5 | P| S| | | |------------------------------------| | Segment Length | 6,7 |------------------------------------| | Checksum | 8,9 +------------------------------------+ Figure 7-2. PDU Header--Fixed Part 7.2.2 Network Layer Protocol Identifier The value of this field shall be binary 1000 0001. This field identifies this Network Layer Protocol as ISO 8473, Protocol for Providing the Connectionless-mode Network Service.
7.2.3 Length Indicator The length is indicated by a binary number, with a maximum value of 254 (1111 1110). The length indicated is the length in octets of the header, as described in Section 7.1, Structure. The value 255 (1111 1111) is reserved for possible future extensions. Note: The rules for forwarding and segmentation ensure that the header length is the same for all segments (Derived PDUs) of the Initial PDU, and is the same as the header length of the Initial PDU. 7.2.4 Version/Protocol Identifier Extension The value of this field is binary 0000 0001. This Identifies a standard version of ISO 8473, Protocol for Providing the Connectionless-mode Network Service. 7.2.5 PDU Lifetime The Lifetime field is encoded as a binary number representing the remaining lifetime of the PDU, in units of 500 milliseconds. The Lifetime field is set by the originating network-entity, and is decremented by every network-entity which processes the PDU. The PDU shall be discarded if the value of the field reaches zero. When a network-entity processes a PDU, it decrements the Lifetime by at least one. The Lifetime shall be decremented by more than one if the sum of: 1) the transit delay in the subnetwork from which the PDU was received; and
2) the delay within the system processing the PDU exceeds or is estimated to exceed 500 milliseconds. In this case, the lifetime field should be decremented by one for each additional 500 milliseconds of delay. The determination of delay need not be precise, but where error exists the value used shall be an overestimate, not an underestimate. If the Lifetime reaches a value of zero before the PDU is delivered to the destination, the PDU shall be discarded. The Error Reporting function shall be invoked, as described in Section 6.10, Error Reporting Function, and may result in the generation of an ER PDU. It is a local matter whether the destination network-entity performs the Lifetime Control function. When the Segmentation function is applied to a PDU, the Lifetime field is copied into all of the Derived PDUs. 7.2.6 Flags 7.2.6.1 Segmentation Permitted and More Segments Flags The Segmentation Permitted flag determines whether segmentation is permitted. A value of one indicates that segmentation is permitted. A value of zero indicates that the non-segmenting protocol subset is employed. Where this is the case, the segmentation part of the PDU header is not present, and the Segment Length field serves as the Total Length field. The More Segments flag indicates whether the data segment in this PDU contains (as its last octet) the last octet of the User Data in the NSDU. When the More Segments flag is set to one (1) then segmentation has taken place and the last octet of the NSDU is not contained in this PDU. The More Segments flag cannot be set to one (1) if the Segmentation Permitted flag is not set to one (1).
When the More Segments flag is set to zero (0) the last octet of the Data Part of the PDU is the last octet of the NSDU. 7.2.6.2 Error Report Flag When the Error Report flag is set to one, the rules in Section 6.10 are used to determine whether to generate an Error Report PDU upon discard of the PDU. When the Error Report flag is set to zero, discard of the PDU will not cause the generation of an Error Report PDU. 7.2.7 Type Code The Type code field identifies the type of the protocol data unit. Allowed values are given in Table 7-1: Bits 5 4 3 2 1 +-----------------------------+ | DT PDU | 1 1 1 0 0 | |-----------------------------| | ER PDU | 0 0 0 0 1 | +-----------------------------+ Table 7-1. Valid PDU Types 7.2.8 PDU Segment Length The Segment Length field specifies the entire length of the PDU segment including both header and data, if present. When the full protocol is employed and a PDU is not segmented, then the value of this field is identical to the value of the Total Length field located in the Segmentation Part of the header.
When the Non-segmenting protocol subset is employed, no segmentation part is present in the header. In this subset, the Segment Length field serves as the Total Length field of the header (see Section 7.4.3). 7.2.9 PDU Checksum The checksum is computed on the entire PDU header. This includes the segmentation and options parts, if present. A checksum value of zero is reserved to indicate that the checksum is to be ignored. The operation of the PDU Header Error Detection function ensures that the value zero does not represent a valid checksum. A non-zero value indicates that the checksum must be processed or the PDU must be discarded. 7.3 Address Part 7.3.1 General Address parameters are distinguished by their location, immediately following the fixed part of the PDU header. The address part is illustrated below:
Octet +--------------------------------------+ | | | Destination Address Length Indicator | 10 | | |--------------------------------------| | | 11 | Destination Address | | | m-1 |--------------------------------------| | | | Source Address Length Indicator | m | | |--------------------------------------| | | m+1 | Source Address | | | n-1 +--------------------------------------+ Figure 7-3. PDU header--Address Part 7.3.1.1 Destination and Source Address Information The Destination and Source addresses are Network Service Access Point addresses as defined in ISO 8348/DAD2, Addendum to the Network Service Definition Covering Network Layer Addressing. The Destination and Source Address information is of variable length. The Destination Address Length Indicator field specifies the length of the Destination Address in number of octets. The Destination Address field follows the Destination Address Length Indicator field. The Source Address Length Indicator field specifies the length of the Source Address in number of octets. The Source Address Length Indicator field follows the Destination Address field. The Source Address field follows the Source Address Length Indicator field.
Each address parameter is encoded as follows: Bits 8 7 6 5 4 3 2 1 +---------------------------------------------+ | Octet | Address parameter Length Indicator | | n | (e.g., 'm') | |---------------------------------------------| | Octets | | | n+1 | Address Parameter Value | | thru | | | n+m | | +---------------------------------------------+ Table 7-2. Address Parameters 7.4 Segmentation Part If the Segmentation Permitted Flag in the Fixed Part of the PDU Header (Octet 4, Bit 8) is set to one, the segmentation part of the header, illustrated below, must be present: Octet +------------------------+ | Data Unit Identifier | n,n+1 |------------------------| | Segment Offset | n+2,n+3 |------------------------| | Total Length | n+4,n+5 +------------------------+ Figure 7-4. PDU Header--Segmentation Part Where the "Segmentation Permitted" flag is set to zero, the nonsegmenting protocol subset is in use.
7.4.1 Data Unit Identifier The Data Unit Identifier identifies an Initial PDU (and hence, its Derived PDUs) so that a segmented data unit may be correctly reassembled by the destination network-entity. The Data Unit Identifier size is two octets. 7.4.2 Segment Offset For each segment the Segment Offset field specifies the relative position of the segment in the data part of the Initial PDU with respect to the start of the data field. The offset is measured in units of octets. The offset of the first segment is zero. 7.4.3 PDU Total Length The Total Length field specifies the entire length of the Initial PDU, including both the header and data. This field is not changed in any segment (Derived PDU) for the lifetime of the PDU. 7.5 Options Part 7.5.1 General The options part is used to convey optional parameters. If the options part is present, it contains one or more parameters. The number of parameters that may be contained in the options part is indicated by the length of the options part which is: PDU Header Length - (length of fixed part + length of address part + length of segmentation part).
The options part of the PDU header is illustrated below: Octet +--------------------+ | | n+6 | Options | | | p +--------------------+ Figure 7-5. PDU Header--Options Part Each parameter contained within the options part of the PDU header is encoded as follows: BITS 8 7 6 5 4 3 2 1 +------------------------------------------+ | Octets | | | n | Parameter Code | |------------------------------------------| | n+1 | Parameter Length (e.g., 'm') | |------------------------------------------| | n+2 | Parameter Value | | n+m+1 | | +------------------------------------------+ Table 7-3. Encoding of Parameters The parameter code field is coded in binary and, without extensions, provides a maximum number of 255 different parameters. However, as noted below, bits 8 and 7 cannot take every possible value, so the practical maximum number of different parameters is less. A parameter code of 255 (binary 1111 1111) is reserved for possible extensions of the parameter code. The parameter length field indicates the length, in octets, of the parameter value field. The length is indicated by a binary number, 'm', with a theoretical maximum value of 255. The practical maximum value of 'm' is lower. For example, in the case of a single parameter contained within the options part, two octets are required for the parameter code and the parameter length indication itself. Thus, the value of 'm' is limited to:
253 - (length of fixed part + length of address part + length of segmentation part). For each succeeding parameter the maximum value of 'm' decreases. The parameter value field contains the value of the parameter identified in the parameter code field. No parameter codes use bits 8 and 7 with the value 00. Implementations shall accept the parameters defined in the options part in any order. Duplication of options (where detected) is not permitted. Receipt of a PDU with an option duplicated should be treated as a protocol error. The rules governing the treatment of protocol errors are described in Section 6.10, Error Reporting Function. The following parameters are permitted in the options part. 7.5.2 Padding The padding parameter is used to lengthen the PDU header to a convenient size (See Section 6.12). Parameter Code: 1100 1100 Parameter Length: variable Parameter Value: any value is allowed 7.5.3 Security This parameter is user defined. Parameter Code: 1100 0101 Parameter Length: variable Parameter Value: High order bit of first octet is Security Domain bit, S, to be interpreted as follows:
S=0 +--------------------------- | S | User Defined ---- +------------------------ S=1 +--------------------------- | S | CODE | ORGANIZATION ---- +------------------------ where CODE = This field contains a geographic or non-geographic code to which the option applies. ORGANIZATION = This is a further subdivision of the CODE field and is determined by an administrator of the geographic or non-geographic domain identified by the value of CODE. 7.5.4 Source Routing The source routing parameter specifies, either completely or partially, the route to be taken from Source Network Address to Destination Network Address. Parameter Code: 1100 1000 Parameter Length: variable Parameter Value: 2 octet control information succeeded by a concatenation of ordered address fields (ordered from source to destination)
The first octet of the parameter value is the type code. This has the following significance. 0000 0001 complete source routing 0000 0000 partial source routing <all other values reserved> The second octet indicates the octet offset of the next address to be processed in the list. A value of three (3) indicates that the next address begins immediately after this control octet. Successive octets are indicated by correspondingly larger values of this indicator. The third octet begins the intermediate-system address list. The address list consists of variable length address fields. The first octet of each address field identifies the length of the address which comprises the remainder of the address field. 7.5.5 Recording of Route The recording of route parameter identifies the route of intermediate systems traversed by the PDU. Parameter Code: 1100 1011 Parameter Length: variable Parameter Value: two octets control information succeeded by a concatenation of ordered addresses The first octet is used to indicate that the recording of route has been terminated owing to lack of space in the option. It has the following significance: 0000 0000 Recording of Route still in progress 1111 1111 Recording of Route terminated <all other values reserved>
The second octet identifies the next octet which may be used to record an address. It is encoded relative to the start of the parameter, such that a value of three (3) indicates that the octet after this one is the next to be used. The third octet begins the address list. The address list consists of variable length address fields. The first octet of each address field identifies the length of the address which comprises the remainder of the field. Address fields are always added to the beginning of the address list; i.e., the most recently added field will begin in the third octet of the parameter value. 7.5.6 Quality of Service Maintenance The Quality of Service parameter conveys information about the quality of service requested by the originating Network Service user. At intermediate systems, Network Layer relay entities may (but are not required to) make use of this information as an aid in selecting a route when more than one route satisfying other routing criteria is available and the available routes are known to differ with respect to Quality of Service (see Section 6.16). Parameter Code: 1100 0011 Parameter Length: one octet Parameter Value: Bit 8: transit delay vs. cost Bit 7: residual error probability vs. transit delay Bit 6: residual error probability vs. cost Bits 5 thru 0 are not specified. Bit 8 is set to one indicates that where possible, routing decision should favor low transit delay over low cost. A value of 0 indicates that routing decisions should favor low cost over low transit delay.
Bit 7 set to one indicates that where possible, routing decisions should favor low residual error probability over low transit delay. A value of zero indicates that routing decisions should favor low transit delay over low residual error probability. Bit 6 is set to one indicates that where possible, routing decisions should favor low residual error probability over low cost. A value of 0 indicates that routing decisions should favor low cost over low residual error probability. 7.6 Priority The priority parameter carries the relative priority of the protocol data unit. Intermediate systems that support this option should make use of this information in routing and in ordering PDUs for transmission. Parameter Code: 1100 1100 Parameter Length: one octet Parameter Value: 0000 0000 - Normal (Default) thru 0000 1111 - Highest The values 0000 0001 through 0000 1111 are to be used for higher priority protocol data units. If an intermediate system does not support this option then all PDUs shall be treated as if the field had the value 0000 0000. 7.7 Data Part The Data part of the PDU is structured as an ordered multiple of octets, which is identical to the same ordered multiple of octets specified for the NS_Userdata parameter of the N_UNITDATA Request and Indication primitives. The data field is illustrated below:
Octet +------------------+ | | p+1 | Data | | | z +------------------+ Figure 7-6. PDU header--Data Field
7.8 Data (DT) PDU 7.8.1 Structure The DT PDU has the following format: Octet +--------------------------------------+ | Network Layer Protocol Identifier | 1 |--------------------------------------| | Length Indicator | 2 |--------------------------------------| | Version/Protocol Id Extension | 3 |--------------------------------------| | Lifetime | 4 |--------------------------------------| |SP|MS|E/R| Type | 5 |--------------------------------------| | Segment Length | 6,7 |--------------------------------------| | Checksum | 8,9 |--------------------------------------| | Destination Address Length Indicator | 10 |--------------------------------------| | Destination Address | 11 through m-1 |--------------------------------------| | Source Address Length Indicator | m |--------------------------------------| | Source Address | m+1 through n-1 |--------------------------------------| | Data Unit Identifier | n,n+1 |--------------------------------------| | Segment Offset | n+2,n+3 |--------------------------------------| | Total Length | n+4,n+5 |--------------------------------------| | Options | n+6 through p |--------------------------------------| | Data | p+1 through z +--------------------------------------+ Figure 7-7. PDU Header Format
7.8.1.1 Fixed Part 1) Network Layer Protocol Identifier See Section 7.2.2. 2) Length Indicator See Section 7.2.3. 3) Version/Protocol Id Extension See Section 7.2.4. 4) Lifetime See Section 7.2.5. 5) SP, MS, E/R See Section 7.2.6. 6) Type Code See Section 7.2.7. 7) Segment Length See Section 7.2.8. 8) Checksum See Section 7.2.9. 7.8.1.2 Addresses See Section 7.3. 7.8.1.3 Segmentation See Section 7.4. 7.8.1.4 Options See Section 7.5. 7.8.1.5 Data See Section 7.7.
7.9 Inactive Network Layer Protocol Octet +-----------------------------+ | Network Layer Protocol Id | 1 |-----------------------------| | Data | 2 through n +-----------------------------+ Figure 7-9. Inactive Network Layer Protocol 7.9.1 Network Layer Protocol Id The value of the Network Layer Protocol Identifier field is binary zero (0000 0000). 7.9.2 Data Field See Section 7.7. The length of the NS_Userdata parameter is constrained to be less than or equal to the value of the length of the SN_Userdata parameter minus one.
7.10 Error Report PDU (ER) 7.10.1 Structure Octet +--------------------------------------+ | Network Layer Protocol Identifier | 1 |--------------------------------------| | Length Indicator | 2 |--------------------------------------| | Version/Protocol Id Extension | 3 |--------------------------------------| | Lifetime | 4 |--------------------------------------| |SP|MS|E/R| Type | 5 |--------------------------------------| | Segment Length | 6,7 |--------------------------------------| | Checksum | 8,9 |--------------------------------------| | Destination Address Length Indicator | 10 |--------------------------------------| | Destination Address | 10 through m-1 |--------------------------------------| | Source Address Length Indicator | m |--------------------------------------| | Source Address | m+1 through n-1 |--------------------------------------| | Data Unit Identifier | n,n+1 |--------------------------------------| | Segment Offset | n+2,n+3 |--------------------------------------| | Total Length | n+4,n+5 |--------------------------------------| | Options | n+6 through p-1 |--------------------------------------| | Reason for Discard | p through q-1 |--------------------------------------| | Error Report Data Field | z +--------------------------------------+ Figure 7-10. Error Report PDU
7.10.1.1 Fixed Part The fixed part of the Error Report Protocol Data Unit is set as though this is a new (Initial) PDU. Thus, references are provided to precious sections describing the composition of the fields comprising the fixed part: 1) Network Layer Protocol Identifier See Section 7.2.2. 2) Length Indicator See Section 7.2.3. 3) Version/Protocol Id Extension See Section 7.2.4. 4) Lifetime See Section 7.2.5. 5) SP, MS, E/R See Section 7.2.6. 6) Type Code See Section 7.2.7. 7) Segment Length See Section 7.2.8. 8) Checksum See Section 7.2.9. 7.10.1.2 Addresses See Section 7.3. The Destination Address specifies the original source of the discarded PDU. The Source Address specifies the intermediate system or end system network-entity initiating the Error Report PDU. 7.10.1.3 Segmentation See Section 7.4.
7.10.1.4 Options See Section 7.5. 7.10.1.5 Reason for Discard This parameter is only valid for the Error Report PDU. It provides a report on the discarded protocol data unit. Parameter Code: 1100 0001 Parameter Length: two octets type of error encoded in binary: 0000 0000: Reason not specified. 0000 0001: Protocol Procedure Error. other than below: 0000 0010: Incorrect checksum. 0000 0011: PDU discarded due to congestion. 0000 0100: Header syntax error (header cannot be parsed). 0000 0101: Segmentation is needed but is not permitted. 1000 xxxx: Addressing Error: 0000 0000: Destination Address Unreachable. 1000 0001: Destination Address Unknown. 1001 xxxx: Source Routing Error: 1001 0000: Unspecified Source Routing error. 1001 0001: Syntax error in Source Routing field. 1001 0010: Unknown Address in Source Routing field. 1001 0011: Path not acceptable.
1010 xxxx: Lifetime Expiration: 1010 0000: Lifetime expired while data unit in transit. 1010 0001: Lifetime expired during reassembly. 1011 xxxx: PDU discarded due to unsupported option: 1011 0000: unsupported option not specified. 1011 0001: unsupported padding option. 1011 0010: unsupported security option. 1011 0011: unsupported source routing option. 1011 0100: unsupported recording of route option. 1011 0101: unsupported QoS Maintenance option. The second octet contains a pointer to the field in the associated discarded PDU which caused the error. If no one particular field can be associated with the error, then this field contains the value of zero. 7.10.1.6 Error Report Data Field This field provides all or a portion of the discarded PDU. The octets comprising this field contain the rejected or discarded PDU up to and including the octet which caused the rejection/discard.
8 FORMAL DESCRIPTION The operation of the protocol is modelled as a finite state automaton governed by a state variable with three values. The behavior of the automaton is defined with respect to individual independent Protocol Data Units. A transition of the automaton is prompted by the occurrence of an atomic event at one of three interfaces: 1) an interface to the Transport Layer, defined by the service primitives of the Addendum to the Network Service Definition Covering Connectionless-mode Transmission; 2) an interface to the subnetwork service provider, defined by the SN_UNITDATA primitive of Section 5.5 of this Standard; 3) an interface to an implementation-dependent timer function defined by the TIMER primitives described in Section 5.6 of this Standard. In addition, a transition of the automaton may be prompted by the occurrence of a condition of the automaton. The atomic events are defined in Section 8.2. The occurrence of an atomic event is not in itself sufficient to cause a transition to take place; other conditions, called "enabling conditions" may also have to be met before a particular transition can take place. Enabling conditions are boolean expressions that depend on the values of parameters associated with the corresponding atomic event (that is, the parameters of some primitive), and on the values of locally maintained variables. More than one enabling condition -- and therefore, more than one possible transition -- may be associated with a single atomic event. In every such case, the enabling conditions are mutually exclusive, so that for any given combination of atomic event and parameter values, only one state transition can take place. Associated with each transition is an action, or "output." Actions consist of changes to the values of local variables and the sequential performance of zero or more functions. The operation of the finite state automaton is completely specified in Section 8.3 by defining the action associated with every possible transition.
8.1 Values of the State Variable The protocol state variable has three values: 1) INITIAL The automaton is created in the INITIAL state. No transition may carry the automaton into the INITIAL state. 2) REASSEMBLING The automaton is in the REASSEMBLING state for the period in which it is assembling PDU segments into a complete PDU. 3) CLOSED The final state of the automaton is the CLOSED state. When the automaton enters the CLOSED state it ceases to exist. 8.2 Atomic Events An atomic event is the transfer of a unit of information across an interface. The description of an atomic event specifies a primitive (such as an N_UNITDATA.Request), and the service boundary at which it is invoked (such as the Network Service boundary). The direction of information flow across the boundary is implied by the definition of each of the primitives. 8.2.1 N.UNITDATA_request and N.UNITDATA_indication The N.UNITDATA_request and N.UNITDATA_indication atomic events occur at the Network Service boundary. They are defined by the Addendum to the Network Service Definition Covering Connectionless Data Transmission (ISO 8348/DAD1).
N.UNITDATA_request (NS Source_Address, NS_Destination_Address, NS_Quality_of_Service, NS_Userdata) N.UNITDATA_indication (NS_Source_Address, NS_Destination_Address, NS_Quality_of_Service, NS_Userdata) The parameters of the N.UNITDATA_request and N.UNITDATA_indication are collectively referred to as Network Service Data Unit (NSDUs). 8.2.2 SN.UNITDATA_request and SN.UNITDATA_indication The SN.UNITDATA_request and SN.UNITDATA_indication atomic events occur at the interface between the Protocol described herein and a subnetwork service provider. They are defined in Section 5.5 of this Standard. SN.UNITDATA_request (SN_Source_Address, SN_Destination_Address, SN_Quality_of_Service, SN_Userdata) SN.UNITDATA_indication (SN_Source_Address, SN_Destination_Address, SN_Quality_of_Service, SN_Userdata) The parameters of the SN_UNITDATA request and SN_UNITDATA Indication are collectively referred to as Subnetwork Service Data Units (SNSDUs). The value of the SN_Userdata parameter may represent an Initial PDU or a Derived PDU.
8.2.3 TIMER Atomic Events The TIMER atomic events occur at the interface between the Protocol described herein and its local environment. They are defined in Section 5.6 of this Standard. S.TIMER_request (Time, Name, Subscript) S.TIMER_cancel (Name Subscript) S.TIMER_response (Name, Subscript) 8.3 Operation of the Finite State Automation The operation of the automaton is defined by use of the formal description technique and notation specified in ISO/TC97/SC16 N1347. This technique is based on an extended finite state transition model and the Pascal programming language. The technique makes use of strong variable typing to reduce ambiguity in interpretation of the specification. This specification formally specifies an abstract machine which provides a single instance of the Connectionless-Mode Network Service by use of the Protocol For Providing the Connectionless-Mode Network Service. It should be emphasized that this formal specification does not in any way constrain the internal operation or design of any actual implementation. For example, it is not required that the program segments contained in the state transitions will actually appear as part of an actual implementation. A formal protocol specification is useful in that it goes as far as possible to eliminate any degree of ambiguity or vagueness in the specification of a protocol standard. The formal specification contained here specifies the behavior of a single finite-state machine, which provides the protocol
behavior corresponding to a single independent service request. It is expected that any actual implementation will be able to handle behavior corresponding to many simultaneous finite state machines.
8.3.1 Type and Constant Definitions const ZERO = 0; max_user_data = 64512; type NSAP_addr_type = ...; { NSAP_addr_type defines the data type for NSAP addresses, as passed across the Network Service Boundary. } NPAI_addr_type = ...; { NPAI_addr_type defines the data type for the addresses carried in PDUs. } SN_addr_type = ...; { SN_addr_type defines the data type for addresses in the underlying service used by this protocol. } quality_of_service_type = ...; { Quality_of_service_type defines the data type for the QOS parameter passed across the Network Service boundary. } SN_QOS_type = ...; { SN_QOS_type defines the data type for the QOS parameter, if any, passed to the underlying service used by this protocol. } data_type = ...; { Data_type defines the data type for user data. Conceptually this is equivalent to a variable length binary string. } buffer_type = ...; { Buffer_type defines the data type for the memory resources used in sending and receiving of user data. This provides capabilities required for segmentation and reassembly. }
timer_name_type = (lifetime_timer); timer_data_type = ...; network_layer_protocol_id_type = (ISO_8473_protocol_id); version_id_type = (version1); pdu_tp_type = (DT, ER); options_type = ...; { Options_type defines the data type used to store the options part of the PDU header. } subnet_id_type = ...; { The subnet_id_type defines the data type used to locally identify a particular underlying service used by this protocol. In general there may be multiple underlying subnetwork (or data link) services. } error_type = (NO_ERROR, TOO_MUCH_USER_DATA, PROTOCOL_PROCEDURE_ERROR, INCORRECT_CHECKSUM, CONGESTION, SYNTAX_ERROR, SEG_NEEDED_AND_NOT_PERMITTED, DESTINATION_UNREACHABLE, DESTINATION_UNKNOWN, UNSPECIFIED_SRC_ROUTING_ERROR, SYNTAX_ERROR_IN_SRC_ROUTING, UNKNOWN_ADDRESS_IN_SRC_ROUTING, PATH_NOT_ACCEPTABLE_IN_SRC_ROUTING, LIFETIME_EXPIRED_IN_TRANSIT, LIFETIME_EXPIRED_IN_REASSEMBLY, UNSUPPORTED_OPTION_NOT_SPECIFIED, UNSUPPORTED_PADDING_OPTION, UNSUPPORTED_SECURITY_OPTION, UNSUPPORTED_SRC_ROUTING_OPTION, UNSUPPORTED_RECORDING_OF_ROUTE_OPTION, UNSUPPORTED_QOS_MAINTENANCE_OPTION);
nsdu_type = record da : NSAP_addr_type; sa : NSAP_addr_type; qos : quality_of_service_type; data : data_type; end; pdu_type = record nlp_id : network_layer_protocol_id_type; hli : integer; vp_id : version_id_type; lifetime : integer; sp : boolean; ms : boolean; er_flag : boolean; pdu_tp : pdu_tp_type; seg_len : integer; checksum : integer; da_len : integer; da : NPAI_addr_type; sa_len : integer; sa : NPAI_addr_type; du_id : optional integer; so : optional integer; tot_len : optional integer; { du_id, so, and tot_len are present only if sp has the value TRUE. } options : options_type; data : data_type; end;
route_result_type = record subnet_id : subnet_id_type; sn_da : SN_addr_type; sn_sa : SN_addr_type; segment_size : integer; end;
8.3.2 Interface Definitions channel Network_access_point (User, Provider); by User: UNITDATA_request (NS_Destination_address : NSAP_addr_type; NS_Source_address : NSAP_addr_type; NS_Quality_of_Service : quality_of_service_type; NS_Userdata : data_type); by Provider: UNITDATA_indication (NS_Destination_address : NSAP_addr_type; NS_Source_address : NSAP_addr_type; NS_Quality_of_Service : quality_of_service_type; NS_Userdata : data_type); channel Subnetwork_access_point (User, Provider); by User: UNITDATA_request (SN_Destination_address : SN_addr_type; SN_Source_address : SN_addr_type; SN_Quality_of_Service : SN_QOS_type; SN_Userdata : pdu_type); by Provider: UNITDATA_indication (SN_Destination_address : SN_addr_type; SN_Source_address : SN_addr_type; SN_Quality_of_Service : SN_QOS_type; SN_Userdata : pdu_type); channel System_access_point (User, Provider); by User: TIMER_request (Time : integer; Name : timer_name_type; Subscript : integer);