| OpenSS7 SS7 for the Common Man | © Copyright 1997-2007 OpenSS7 Corporation All Rights Reserved. Last modified: Sun, 05 Mar 2006 08:34:14 GMT | ||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||
| NPI Technical SpecificationDescription: OpenSS7 Resources Library.A PDF version of this document is available here. Network Provider Interface SpecificationNetwork Provider Interface1 IntroductionThis document specifies a STREAMS-based kernel-level instantiation of the ISO/CCITT network service definition. The Network Provider Interface (NPI) enables the user of a network layer service to access and use any of a variety of conforming network layer service providers without specific knowledge of the provider's protocol. The service interface is designed to support any connection-mode network protocol and connectionless network protocol. This interface only specifies access to network layer service providers, and does not address issues concerning network layer management,protocol performance, and performance analysis tools. The specification assumes that the reader is familiar with the OSI reference model terminology, ISO/CCITT Network Layer Service, and STREAMS. 1.1 Related Documentation
1.1.1 RoleThis document specifies an interface that supports the service provided by the Network Services Definition for Open Systems Interconnection for CCITT Applications as described in CCITT Recommendation X.213 and ISO 8348 (for CONS) and ISO8348/Addendum 1 (for CLNS). These specifications are targeted for use by developers and testers of protocol modules that require network layer service. 1.2 Definitions, Acronyms, and Abbreviations
2 The Network LayerThe Network Layer provides the means to manage the operation of the network. It is responsible for the routing and management of data exchange between network-user entities. 2.1 Model of the NPIThe NPI defines the services provided by the network layer to the network-user at the boundary between the network layer and the network layer user entity. The interface consists of a set of primitives defined as STREAMS messages that provide access to the network layer services, and are transferred between the NS user entity and the NS provider. These primitives are of two types; ones that originate from the NS user, and others that originate from the NS provider. The primitives that originate from the NS user make requests to the NS provider, or respond to an event of the NS provider. The primitives that originate from the NS provider are either confirmations of a request or are indications to the NS user that the event has occurred. Figure 1 shows the model of the NPI.
The NPI allows the NS provider to be configured with any network layer user (such as the OSI Transport Layer) that also conforms to the NPI. A network layer user can also be a user program that conforms to the NPI and accesses the NS provider via “putmsg” and “getmsg” system calls. 2.2 NPI ServicesThe features of the NPI are defined in terms of the services provided by the NS provider,and the individual primitives that may flow between the NS user and the NS provider. The services supported by the NPI are based on two distinct modes of communication, connection (CONS) and connectionless (CLNS). In addition, the NPI supports services for local management. 2.2.1 CONSThe main features of the connection mode communication are:
There are three phases to each instance of communication: Connection Establishment; Data Transfer; and Connection Termination. Units of data arrive at their destination in the same order as they departed their source and the data is protected against duplication or loss of data units within some specified quality of service. 2.2.2 CLNSThe main features of the connectionless mode communication are:
Connectionless mode communication has no separate phases. Each unit of data is transmitted from source to destination independently, appropriate addressing information is included with each unit of data. As the units of data are transmitted independently from source to destination, there are, in general, no guarantees of proper sequence and completeness of the data stream. 2.2.3 Local ManagementThe NPI specifications also define a set of local management functions that apply to both CONS and CLNS modes of communication. These services have local significance only. Tables 1 and 2 summarizes the NPI service primitives by their state and service.
3 NPI Services DefinitionThis section describes the services of the NPI primitives. Time-sequence diagrams that illustrate the sequence of primitives are included. (Conventions for the time-sequence diagrams are defined in CCITT X.210 [8].) The format of the primitives will be defined later in this document. 3.1 Local Management Services DefinitionThe services defined in this section are outside the scope of the international standards. These services apply to both connection-mode as well as the connection-less modes of communication. They are invoked for the initialization/de-initialization of a stream connected to the NS provider. They are also used to manage options supported by the NS provider and to report information on the supported parameter values. 3.1.1 Network Information Reporting ServiceThis service provides information on the options supported by the NS provider.
The sequence of primitives for network information management is shown in Figure 2.
3.1.2 NS User Bind ServiceThis service allows a network address to be associated with a stream. It allows the NS user to negotiate the number of connect indications that can remain unacknowledged for that NS user (a connect indication is considered unacknowledged while it is awaiting a corresponding connect response or disconnect request from the NS user). This service also defines a mechanism that allows a stream (bound to a network address of the NS user) to be reserved to handle incoming calls only. This stream is referred to as the listener stream.
The sequence of primitives for NS user bind service is shown in Figure 3.
3.1.3 NS User Unbind ServiceThis service allows the NS user to be unbound from a network address.
The sequence of primitives for NS user unbind service is shown in Figure 4.
3.1.4 Receipt Acknowledgement Service
An example showing the sequence of primitives for successful receipt acknowledgement is depicted in Figure 4. 3.1.5 Options Management ServiceThis service allows the NS user to manage the QOS parameter values associated with the NS provider.
Figure 5 shows the sequence of primitives for network options management.
3.1.6 Error Acknowledgement Service
Figure 6 shows the sequence of primitives for the error management primitive.
3.2 Connection-Mode Network Services DefinitionThis section describes the required network service primitives that define the CONS interface. The queue model for CONS is discussed in more detail in CCITT X.213 section 9.2. The queue model represents the operation of a network connection in the abstract by a pair of queues linking the two network addresses. There is one queue for each direction of information flow. Each queue represents a flow control function in one direction of transfer. The ability of a user to add objects to a queue will be determined by the behaviour of the user removing objects from that queue, and the state of the queue. The pair of queues is considered to be available for each potential NC. Objects that are entered or removed from the queue are either as a result of interactions at the two network addresses, or as the result of NS provider initiatives.
Table 3 shows the ordering relationships among the queue model objects.
3.2.1 Connection Establishment PhaseA pair of queues is associated with an NC between two network addresses when the NS provider receives an N_CONNECT_REQ primitive at one of the network addresses resulting in a connect object being entered into the queue. The queues will remain associated with the NC until a N_DISCON_REQ primitive (resulting in a disconnect object) is either entered or removed from a queue. Similarly, in the queue from the called NS user, objects can be entered into the queue only after the connect object associated with the N_CONN_RES has been entered into the queue. Alternatively, the called NS user can enter a disconnect object into the queue instead of the connect object to terminate the NC. The NC establishment procedure will fail if the NS provider is unable to establish an NC,or if the destination NS user is unable to accept the N_CONN_IND (see NC Release primitive definition). 3.2.1.1 User Primitives for Successful Network Connection Establishment
3.2.1.2 Provider Primitives for Successful Network Connection Establishment
The sequence of primitives in a successful NC establishment is defined by the time sequence diagram as shown in Figure 7. The sequence of primitives for the NC response token value determination is shown in Figure 8 (procedures for NC response token value determination are discussed in sections 4.1.3 and 4.1.4.).
3.2.2 Data Transfer PhaseFlow control on the NC is done by management of the queue capacity, and by allowing objects of certain types to be inserted to the queues, as shown in Table 4.
3.2.2.1 User Primitives for Data Transfer
3.2.2.2 Provider Primitives for Data Transfer
Figure 9 shows the sequence of primitives for successful normal data transfer. The sequence of primitives may remain incomplete if a N_RESET or N_DISCON primitive occurs.
The sequence of primitives in a successful confirmation of receipt is defined in the time sequence diagram as shown in Figure 10.
The sequence of primitives as shown above may remain incomplete if an N_RESET or an N_DISCON primitive occurs (see Table 3). A NS user must not issue an N_DATACK_REQ primitive if no N_DATA_IND with confirmation request set has been received, or if all such N_DATA_IND have been previously acknowledged. Following a reset procedure (N_RESET_REQ or N_RESET_IND), a NS user may not issue aN_DATACK_REQ to acknowledge an outstanding N_DATA_IND received before the reset procedure was signalled. Note — The withholding of confirmation of receipt by a NS user can have an effect on the attainable throughput on the NC. The sequence of primitives for expedited data transfer is shown in the time sequence diagram in Figure 11. This sequence of primitives may remain incomplete if a N_RESET or N_DISCON primitive is issued.
3.2.3 Reset Operation PrimitivesThe reset service is used by the NS user to resynchronize the use of the NC, or by the NS provider to report detected loss of unrecoverable data. The reset procedure involves the following interactions:
The complete sequence of primitives depends upon the origin/s of the reset action. The reset service may be:
The N_RESET_REQ acts as a synchronization mark in the flow of N_DATA,N_EXDATA, and N_DATACK primitives transmitted by the issuing NS user; the N_RESET_IND acts as a synchronization mark in the flow of N_DATA, N_EXDATA,and N_DATACK primitives received by the receiving NS user. Similarly, N_RESET_RES acts as a synchronization mark in the flow of N_DATA, N_EXDATA,and N_DATACK primitives transmitted by the responding NS user, while the N_RESET_CON acts as a synchronization mark in the flow of N_DATA, N_EXDATA, and N_DATACK primitives received by the NS user that originally issued the reset. The resynchronizing properties of the reset service are the following:
3.2.3.1 User Primitives for Reset Operations
3.2.3.2 Provider Primitives for Reset Operations
The sequence of primitives as shown in Figures 12, 13, 14, and 15 may remain in complete if a N_DISCON primitive occurs.
3.2.4 Connection Termination PhaseThe NC release procedure is initialized by the insertion of a disconnect object (associated with a N_DISCON_REQ) into the queue. As shown in Table 3, the disconnect procedure is destructive with respect to other objects in the queue, and eventually results in the emptying of queues and termination of the NC connection. The sequence of primitives depends on the origin of the release action. The sequence may be:
3.2.4.1 User Primitives for Connection Termination
3.2.4.2 Provider Primitives for Connection Termination
The sequence of primitives are shown in the time sequence diagrams in Figures 16, 17, 18, and 19.
A NS user may reject an NC establishment attempt by issuing a N_DISCON_REQ. The originator parameter in the N_DISCON primitives will indicate NS user invoked release. The sequence of events is shown in Figure 20.
If the NS provider is unable to establish an NC, it indicates this to the requester by an N_DISCON_IND. The originator in this primitive indicates an NS provider invoked release. This is shown in Figure 21.
3.3 Connectionless Network Services DefinitionThe CLNS allows for the transfer of the NS user data in one or both directions simultaneously without establishing a network connection. A set of primitives are defined that carry user data and control information between the NS user and NS provider entities. The primitives are modelled as requests initiated by the NS user and indications initiated by the NS provider. Indications may be initiated by the NS provider independently from requests by the NS user. The connectionless network service consists of one phase. 3.3.1 User Request Primitives
3.3.2 Provider Response Primitives
Figure 22 shows the sequence of primitives for the connectionless mode of data transfer.
Figure 23 shows the sequence of primitives for the CLNS error management primitive.
4 NPI PrimitivesThis section describes the format and parameters of the NPI primitives (Appendix A shows the mapping of the NPI primitives to the primitives defined in ISO 8348 and CCITT X.213). In addition, it discusses the states the primitive is valid in, the resulting state, and the acknowledgement that the primitive expects. (The state/event tables for these primitives are shown in Appendix B. The precedence tables for the NPI primitives are shown in Appendix C.) Rules for OSI conformance are described in Addendum 1 to this document. Tables 5, 6, and 7 provide a summary of the NS primitives and their parameters.
4.1 Management PrimitivesThese primitives apply both to CONS as well as CLNS. 4.1.1 Network Information RequestN_INFO_REQThis primitive requests the NS provider to return the values of all supported protocol parameters (see under N_INFO_ACK), and also the current state of the NS provider (as defined in Appendix B). This primitive does not affect the state of the network provider and does not appear in the state tables. FormatThe format of the message is one M_PCPROTO message block and its structure is as follows: typedef struct {
ulong PRIM_type; /* always N_INFO_REQ */
} N_info_req_t;
ParametersValid StatesThis primitive is valid in any state where a local acknowledgement is not pending. New StateThe new state remains unchanged. AcknowledgementsThis primitive requires the NS provider to generate one of the following acknowledgements upon receipt of the primitive:
4.1.2 Network Information AcknowledgementN_INFO_ACKThis primitive indicates to the NS user any relevant protocol-dependent parameters. 1 It should be initiated in response to the N_INFO_REQ primitive described above. FormatThe format of this message is one M_PCPROTO message block and its structure is as follows: typedef struct {
ulong PRIM_type; /* always N_INFO_ACK */
ulong NSDU_size; /* maximum NSDU size */
ulong ENSDU_size; /* maximum ENSDU size */
ulong CDATA_size; /* connect data size */
ulong DDATA_size; /* discon data size */
ulong ADDR_size; /* address size */
ulong ADDR_length; /* address length */
ulong ADDR_offset; /* address offse t */
ulong QOS_length; /* length of default QOS values */
ulong QOS_offset; /* offset of default QOS values from
the beginning of block */
ulong QOS_range_length; /* length of range of QOS values */
ulong QOS_range_offset; /* offset of range of QOS values from
the beginning of block */
ulong OPTIONS_flags; /* bit masking for options supported */
ulong NIDU_size; /* network interface data unit size */
long SERV_type; /* service type */
ulong CURRENT_state; /* current state */
ulong PROVIDER_type; /* type of provider */
ulong NODU_size; /* optimal NSDU size */
ulong PROTOID_length; /* length of bound protocol ids */
ulong PROTOID_offset; /* offset of bound protocol ids */
ulong NPI_version; /* version number of NPI that's
supported */
} N_info_ack_t;
/* Flags to indicate support of NS provider options */
#define REC_CONF_OPT 0x00000001L
#define EX_DATA_OPT 0x00000002L
#define DEFAULT_RC_SEL 0x00000004L
/* Service types supported by the NS provider */
#define N_CONS 1
#define N_CLNS 2
/* Valid provider types */
#define N_SNICFP 1
#define N_SUBNET 2
ParametersThe above fields have the following meaning:
Flags
Valid StatesThis primitive is valid in any state in response to a N_INFO_REQ primitive. New StateThe state remains the same. 4.1.3 Bind Protocol Address RequestN_BIND_REQThis primitive requests that the NS provider bind a NS user entity to a network address and negotiate the number of connect indications allowed to be outstanding by the NS provider for the specified NS user entity being bound. FormatThe format of the message is one M_PROTO message block and its structure is as follows: typedef struct {
ulong PRIM_type; /* always N_BIND_REQ */
ulong ADDR_length; /* length of address */
ulong ADDR_offset; /* offset of address */
ulong CONIND_number; /* req # of conn-indications to be
queued */
ulong BIND_flags; /* flags associated with N_BIND_REQ */
ulong PROTOID_length; /* length of the protocol id */
ulong PROTOID_offset; /* offset of protocol id */
} N_bind_req_t;
/* Flags associated with N_BIND_REQ */
#define DEFAULT_LISTENER 0x00000001L
#define TOKEN_REQUEST 0x00000002L
#define DEFAULT_DEST 0x00000004L
Parameters
Flags
Valid StatesThis primitive is valid in state NS_UNBND (see Appendix B). New StateThe new state is NE_WACK_BREQ. AcknowledgementsThe NS provider will generate one of the following acknowledgements upon receipt of the N_BIND_REQ primitive:
4.1.4 Bind Protocol Address AcknowledgementN_BIND_ACKThis primitive indicates to the NS user that the specified network user entity has been bound to the requested network address and that the specified number of connect indications are allowed to be queued by the NS provider for the specified network address. FormatThe format of the message is one M_PCPROTO message block, and its structure is the following: typedef struct {
ulong PRIM_type; /* always N_BIND_ACK */
ulong ADDR_length; /* address length */
ulong ADDR_offset; /* offset of address */
ulong CONIND_number; /* connection indications */
ulong TOKEN_value; /* NC response token value */
ulong PROTOID_length; /* length of protocol id */
ulong PROTOID_offset; /* offset from beg. of block */
} N_bind_ack_t;
Parameters
The proper alignment of the address in the M_PCPROTO message block is not guaranteed. Bind Rules:The following rules apply to the binding of the specified network address to the stream:
The following rules apply to negotiating CONIND_number argument:
If the above rules result in an error condition, then the NS provider must issue anN_ERROR_ACK primitive to the NS user specifying the error as defined in the description of the N_BIND_REQ primitive. Valid StatesThis primitive is in response to a N_BIND_REQ primitive and is valid in the state NS_WACK_BREQ. New StateThe new state is NS_IDLE. 4.1.5 Unbind Protocol Address RequestN_UNBIND_REQThis primitive requests that the NS provider unbind the NS user entity that was previously bound to the network address. FormatThe format of the message is one M_PROTO block, and its structure is as follows: typedef struct {
ulong PRIM_type; /* always N_UNBIND_REQ */
} N_unbind_req_t;
ParametersValid StatesThis primitive is valid in the NS_IDLE state. New StateThe new state is NS_WACK_UREQ. AcknowledgementsThis primitive requires the NS provider to generate the following acknowledgements upon receipt of the primitive:
4.1.6 Network Options Management RequestN_OPTMGMT_REQThis primitive allows the NS user to manage the QOS parameter values associated with the stream. FormatThe format of the message is one M_PROTO message block, and its structure is as follows: typedef struct {
ulong PRIM_type; /* always N_OPTMGMT_REQ */
ulong QOS_length; /* length of QOS values */
ulong QOS_offset; /* offset of QOS values */
ulong OPTMGMT_flags; /* default receipt conf. selection */
} N_optmgmt_req_t;
Parameters
Flags
Valid StatesThis primitive is valid in the NS_IDLE state. New StateThe new state is NS_WACK_OPTREQ. AcknowledgementsThe N_OPTMGMT_REQ primitive requires the NS provider to generate one of the following acknowledgements upon receipt of the primitive:
4.1.7 Error AcknowledgementN_ERROR_ACKThis primitive indicates to the NS user that a non-fatal error has occurred in the last network-user-originated primitive. This may only be initiated as an acknowledgement for those primitives that require one. It also indicates to the user that no action was taken on the primitive that caused the error. FormatThe format of the message is one M_PCPROTO message block, and its structure is asfollows: typedef struct {
ulong PRIM_type; /* always N_ERROR_ACK */
ulong ERROR_prim; /* primitive in error */
ulong NPI_error; /* NPI error code */
ulong UNIX_error; /* UNIX system error code */
} N_error_ack_t;
Parameters
Valid Error CodesThe following error codes are allowed to be returned:
Valid StatesThis primitive is valid in all states that have a pending acknowledgement or confirmation. New StateThe new state is the same as the one from which the acknowledged request or response was issued. 4.1.8 Successful Receipt AcknowledgementN_OK_ACKThis primitive indicates to the NS user that the previous network- user-originated primitive was received successfully by the network provider. It does not indicate to the NS user any network protocol action taken due to the issuance of the last primitive. The N_OK_ACK primitive may only be initiated as an acknowledgement for those user originated primitives that have no other means of confirmation. FormatThe format of the message is one M_PCPROTO message block, and its structure is as follows: typedef struct {
ulong PRIM_type; /* always N_OK_ACK */
ulong CORRECT_prim; /* primitive being acknowledged */
} N_ok_ack_t;
Parameters
Valid StatesThis primitive is issued in states
New StateThe resulting state depends on the current state (see Appendix B, Tables B-7 and B-8.) 4.2 CONS Primitive Format and RulesThis section describes the format of the CONS primitives and the rules associated with these primitives. The default values of the QOS parameters associated with a NC may be selected via the N_OPTMGMT_REQ primitive. 4.2.1 Connection Establishment PrimitivesThe following network service primitives pertain to the establishment of an NC, provided the NS users exist, and are known to the NS provider. 4.2.1.1 Network Connection RequestN_CONN_REQThis primitive requests that the NS provider make a network connection to the specified destination. FormatThe format of the message is one M_PROTO message block followed by one or more M_DATA blocks for the NS user data transfer. The specification of the NS user data is optional. The NS user can send any integral number of octets of data within the range supported by the NS provider (see N_INFO_ACK). If the user does not specify QOS parameter values, the default values (specified via N_OPTMGMT_REQ) are used by the NS provider. The structure of the M_PROTO message block is as follows: typedef struct {
ulong PRIM_type; /* always N_CONN_REQ */
ulong DEST_length; /* destination address length */
ulong DEST_offset; /* destination address offset */
ulong CONN_flags; /* bit masking for options flags */
ulong QOS_length; /* QOS parameters' length */
ulong QOS_offset; /* QOS parameters' offset */
} N_conn_req_t;
/* Flags to indicate if options are requested */
#define REC_CONF_OPT 0x00000001L
#define EX_DATA_OPT 0x00000002L
Parameters
Flags
Valid StatesThis primitive is valid in state NS_IDLE. New StateThe new state is NS_WCON_CREQ. AcknowledgementsThe following acknowledgements are valid for this primitive:
4.2.1.2 Network Connection IndicationN_CONN_INDThis primitive indicates to the destination NS user that a network connect request has been made by the user at the specified source address. FormatThe format of this message is one M_PROTO message block followed by one or more M_DATA blocks for NS user data. The specification of NS user data is optional. The NS user can send any integral number of octets of data within the range supported by the NS provider. The NS user data will only be present if the corresponding N_CONN_REQ had NS user data parameter specified, and their data will be identical. The structure of the M_PROTO message block is as follows: typedef struct {
ulong PRIM_type; /* always N_CONN_IND */
ulong DEST_length; /* destination address length */
ulong DEST_offset; /* destination address offset */
ulong SRC_length; /* source address length */
ulong SRC_offset; /* source address offset */
ulong SEQ_number; /* sequence number */
ulong CONN_flags; /* bit masking for options flags */
ulong QOS_length; /* QOS parameters' length */
ulong QOS_offset; /* QOS parameters' offset */
} N_conn_ind_t;
Parameters
Flags
4.2.1.3 Network Connection ResponseN_CONN_RESThis primitive allows the destination NS user to request that the network provider accept a previous connect request. FormatThe format of this message is one M_PROTO message block followed by one or more M_DATA blocks (for NS user data). The specification of the NS user data is optional. The NS user can send any integral number of octets of data within the range supported by the NS provider. The structure of the M_PROTO block is as follows: typedef struct {
ulong PRIM_type; /* always N_CONN_RES */
ulong TOKEN_value; /* NC response token value */
ulong RES_length; /* responding address length */
ulong RES_offset; /* responding address offset */
ulong SEQ_number; /* sequence number */
ulong CONN_flags; /* bit masking for options flags */
ulong QOS_length; /* QOS parameters' length */
ulong QOS_offset; /* QOS parameters' offset */
} N_conn_res_t;
Parameters
Flags
Valid StatesThis primitive is valid in state NS_WRES_CIND. New StateThe new state is NS_WACK_CRES. AcknowledgementsThe NS provider should generate one of the following acknowledgements upon receipt of this primitive:
4.2.1.4 Network Connection ConfirmN_CONN_CONThis primitive indicates to the source NS user that the network connect request has been confirmed on the specified responding address. FormatThe format of this message is one M_PROTO message block followed by one or more M_DATA blocks (for NS user data). The specification of the NS user data is optional. The NS user can send any integral number of octets of NS user data within a range supported by the NS provider (see N_INFO_ACK). The NS user data will only be present if the corresponding N_CONN_RES had NS user data specified with it, and their data will always be identical. The structure of the M_PROTO block is as follows: typedef struct {
ulong PRIM_type; /* always N_CONN_CON */
ulong RES_length; /* responding address length */
ulong RES_offset; /* responding address offset */
ulong CONN_flags; /* bit masking for options flags */
ulong QOS_length; /* QOS parameters' length */
ulong QOS_offset; /* QOS parameters' offset */
} N_conn_con_t;
Parameters
Flags
4.2.2 Normal Data Transfer PhaseThe data transfer service primitives provide for an exchange of NS user data known as NSDUs, in either direction or in both directions simultaneously on a NC. The network service preserves both the sequence and the boundaries of the NSDUs (when the NS provider supports NSDUs). 4.2.2.1 Normal Data Transfer RequestN_DATA_REQThis user-originated primitive indicates to the NS provider that this message contains NS user data. It allows the transfer of NS_user_data between NS users, without modification by the NS provider. The NS user must send any integral number of octets of data greater than zero. In a case where the size of the NSDU exceeds the NIDU (as specified by the size of the NIDU_size parameter of the N_INFO_ACK primitive), the NSDU may be broken up into more than one NIDU. When an NSDU is broken up into more than one NIDU, the N_MORE_DATA_FLAG will be set on each NIDU except the last one. The RC_flagmay only be set on the last NIDU. FormatThe format of the message is one or more M_DATA blocks. Use of a M_PROTOmessage block is optional. The M_PROTO message block is used for two reasons:
Guidelines for use of M_PROTO:The following guidelines must be followed with respect to the use of the M_PROTO message block:
The structure of the M_PROTO message block, if present, is as follows: typedef struct {
ulong PRIM_type; /* always N_DATA_REQ */
ulong DATA_xfer_flags; /* bit masking for data xfer flags */
} N_data_req_t;
/* Data Transfer Flags */
#define N_MORE_DATA_FLAG 0x00000001L
#define N_RC_FLAG 0x00000002L
ParametersFlags
Valid StatesThis primitive is valid in the NS_DATA_XFER state. New StateThe resulting state remains the same (NS_DATA_XFER). AcknowledgementsThis primitive does not require any acknowledgements, although it may generate a fatal error. This is indicated to the NS user via a M_ERROR STREAMS message type (specifying an errno value of EPROTO) which results in the failure of all system calls on that stream. The applicable errors are defined as follows:
NOTE: If the interface is in the NS_IDLE or NS_WRES_RIND states when the provider receives the N_DATA_REQ primitive, then the NS provider should discard the request without generating a fatal error. 4.2.2.2 Normal Data Transfer IndicationN_DATA_INDThis network-provider-originated primitive indicates to the NS user that this message contains NS user data. As in the N_DATA_REQ primitive, the NSDU can be segmented into more than one NIDUs. The NIDUs are associated with the NSDU by using theMORE_DATA_FLAG. The RC_FLAG is allowed to be set only on the last NIDU. FormatThe format of the message is one or more M_DATA message blocks. The value of the NS user data field is always the same as that supplied in the corresponding N_DATA_REQ primitive at the peer service access point. Use of M_PROTO message blocks is optional (see guidelines under N_DATA_REQ). The structure of the M_PROTO message block, if present, is as follows: typedef struct {
ulong PRIM_type; /* always N_DATA_IND */
ulong DATA_xfer_flags; /* bit masking for data xfer flags */
} N_data_ind_t;
/* Data Transfer Flags */
#define N_MORE_DATA_FLAG 0x00000001L
#define N_RC_FLAG 0x00000002L
ParametersFlags
Valid StatesThis primitive is valid in state NS_DATA_XFER. New StateThe resulting state remains the same (NS_DATA_XFER). 4.2.3 Receipt Confirmation Service PrimitivesThe receipt confirmation service is requested by the confirmation request parameter on the N_DATA_REQ primitive. For each and every NSDU with the confirmation request parameter set, the receiving NS user should return an N_DATACK_REQ primitive.Such acknowledgements should be issued in the same sequence as the corresponding N_DATA_IND primitives are received, and are to be conveyed by the NS provider in such a way so as to preserve them distinct from any previous or subsequent acknowledgements. The NS user may thus correlate them with the original requests by counting. When an NSDU has been segmented into more than one NIDUs, only the last NIDU is allowed to request receipt confirmation. N_DATACK_REQ primitives will not be subject to the flow control affectingN_DATA_REQ primitives at the same NC endpoint. N_DATACK_IND primitives will not be subject to the flow control affecting N_DATA_IND primitives at the same NC endpoint. The use of the receipt confirmation service must be agreed to by the two NS users of the NC and the NS provider during the NC establishment by using the RC_selection parameter on the N_CONN primitives. 4.2.3.1 Data Acknowledgement RequestN_DATACK_REQThis is a user-originated primitive that requests that the network provider acknowledge the N_DATA_IND that had previously been received with the receipt confirmation parameter set. FormatThe format of the message is one M_PROTO message block and its structure is as follows: typedef struct {
ulong PRIM_type; /* always N_DATACK_REQ */
} N_datack_req_t;
ParametersValid StatesThis primitive is valid in state NS_DATA_XFER. New StateThe resulting state remains the same (NS_DATA_XFER). AcknowledgementsThis primitive does not require any acknowledgements, although it may generate a fatal (unrecoverable) error. This is indicated via an M_ERROR STREAMS message type (issued to the NS user specifying the errno value of EPROTO), which results in the failure of all system calls on that stream. The allowable errors are as follows:
NOTE: If the interface is in the NS_IDLE state when the provider receives the N_DATACK_REQ primitive, then the NS provider should discard the request without generating a fatal error. If the NS provider had no knowledge of a previous N_DATA_IND with the receipt confirmation flag set, then the NS provider should just ignore the request without generating a fatal error. 4.2.3.2 Data Acknowledgement IndicationN_DATACK_INDThis is a NS provider originated primitive that indicates to the network service user that the remote network service user has acknowledged the data that had previously been sent with the receipt confirmation set. FormatThe format of the message is one M_PROTO message block and its structure is as follows: typedef struct {
ulong PRIM_type; /* always N_DATACK_IND */
} N_datack_ind_t;
ParametersValid StatesThis primitive is valid in state NS_DATA_XFER. New StateThe resulting state remains the same (NS_DATA_XFER). 4.2.4 Expedited Data Transfer ServiceThe expedited data transfer service provides a further means of information exchange on an NC in both directions simultaneously. The transfer of expedited network service data unit (ENSDU) is subject to separate flow control from that applying to NS user data (However, a separate STREAMS message type for expedited data is not available with UNIX® System V Release 3.1. Until a new STREAMS message type is provided, expedited data will be implemented via queue manipulation). The NS provider should guarantee that an expedited-NSDU will not be delivered after any subsequently issued NSDU or expedited-NSDU on that NC. The relationship between normal and expedited data is shown in Table 2. Expedited data can still be delivered when the receiving NS user is not accepting normal data (however this cannot be guaranteed if there are blockages occurring in the lower layers). The expedited data transfer service is a NS provider option, and its use must be agreed by the two NS users of the NC and the NS provider during NC establishment by using the EX_DATA_OPT parameter on the N_CONN primitives. 4.2.4.1 Expedited Data Transfer RequestN_EXDATA_REQThis is a NS user originated primitive and is used to indicate to the network provider that the message block contains an ENSDU. FormatThe format of the message is one M_PROTO message block, followed by one or more M_DATA blocks. The NS user must send an integral number of octets of data within the range supported by the NS provider (see N_INFO_ACK). The structure of the M_PROTO message block is as follows: typedef struct {
ulong PRIM_type; /* always N_EXDATA_REQ */
} N_exdata_req_t;
ParametersValid StatesThis primitive is valid in state NS_DATA_XFER. New StateThe resulting state remains the same (NS_DATA_XFER). AcknowledgementsThis primitive does not require any acknowledgements, although it may generate a fatal (unrecoverable) error. This is indicated via an M_ERROR STREAMS message type (issued to the NS user with the errno value of EPROTO), which results in the failure of all system calls on that stream. The applicable errors are as follows:
NOTE: If the interface is in the NS_IDLE or NS_WRES_RIND states when the provider receives the N_EXDATA_REQ primitive, then the NS provider should discard the request without generating a fatal error. 4.2.4.2 Expedited Data Transfer IndicationN_EXDATA_INDThis is a NS provider originated primitive and is used to indicate to the NS user that this message contains an ENSDU. FormatThe format of the message is one M_PROTO message block, followed by one or more M_DATA blocks. The value of the data in the M_DATA blocks is identical to that supplied with the corresponding N_EXDATA_REQ primitive. The structure of the M_PROTO message block is as follows: typedef struct {
ulong PRIM_type; /* always N_EXDATA_IND */
} N_exdata_ind_t;
Parameters |