Previous section.
Data Link Provider Interface (DLPI)
Data Link Provider Interface (DLPI)
Copyright © 1997 The Open Group
DLPI Services
The various features of the DLPI interface are defined in terms of the services provided by the DLS provider, and the individual primitives that may flow between the DLS user and DLS provider.
The data link provider interface supports three modes of service: connection, connectionless and acknowledged connectionless. The connection mode is circuit-oriented and enables data to be transferred over an established connection in a sequenced manner. The connectionless mode is message-oriented and supports data transfer in self-contained units with no logical relationship required between units. The acknowledged connectionless mode is message-oriented and guarantees that data units
will be delivered to the destination user in the order in which they were sent. This specification also defines a set of local management functions that apply to all modes of service.
The XID and TEST services that are supported by DLPI are listed below. The DLS User can issue an XID or TEST request to the DLS Provider. The Provider will transmit an XID or TEST frame to the peer DLS Provider. On receiving a response, the DLS Provider sends a confirmation primitive to the DLS User. On receiving an XID or TEST frame from the peer DLS Provider, the local DLS Provider sends up an XID or TEST indication primitive to the DLS User.
The User must respond with an XID or TEST response frame to the Provider.
The services are tabulated below and described more fully in the remainder of this section.
Phase
| Service
| Primitives
|
---|
Local Management
| Information Reporting
| DL_INFO_REQ, DL_INFO_ACK, DL_ERROR_ACK
|
| _
| _
|
| Attach
| DL_ATTACH_REQ, DL_DETACH_REQ, DL_OK_ACK, DL_ERROR_ACK
|
| _
| _
|
| Bind
| DL_BIND_REQ, DL_BIND_ACK, DL_SUBS_BIND_REQ, DL_SUBS_BIND_ACK, DL_UNBIND_REQ, DL_SUBS_UNBIND_REQ, DL_OK_ACK, DL_ERROR_ACK
|
| _
| _
|
| Other
| DL_ENABMULTI_REQ, DL_DISABMULTI_REQ, DL_PROMISCON_REQ, DL_PROMISCOFF_REQ, DL_OK_ACK, DL_ERROR_ACK
|
Connection Establishment
| Connection Establishment
| DL_CONNECT_REQ, DL_CONNECT_IND, DL_CONNECT_RES, DL_CONNECT_CON, DL_DISCONNECT_REQ, DL_DISCONNECT_IND, DL_TOKEN_REQ, DL_TOKEN_ACK, DL_OK_ACK, DL_ERROR_ACK
|
Connection-mode Data Transfer
| Data Transfer
| DL_DATA_REQ, DL_DATA_IND
|
| _
| _
|
| Reset
| DL_RESET_REQ, DL_RESET_IND, DL_RESET_RES, DL_RESET_CON, DL_OK_ACK, DL_ERROR_ACK
|
Connection Release
| Connection Release
| DL_DISCONNECT_REQ, DL_DISCONNECT_IND, DL_OK_ACK, DL_ERROR_ACK
|
Connectionless-mode Data Transfer
| Data Transfer
| DL_UNITDATA_REQ, DL_UNITDATA_IND
|
| _
| _
|
| QOS Management
| DL_UDQOS_REQ, DL_OK_ACK, DL_ERROR_ACK
|
| _
| _
|
| Error Reporting
| DL_UDERROR_IND
|
XID and TEST services
| XID
| DL_XID_REQ, DL_XID_IND, DL_XID_RES, DL_XID_CON
|
| _
| _
|
| TEST
| DL_TEST_REQ, DL_TEST_IND, DL_TEST_RES, DL_TEST_CON
|
Acknowledged Connectionless-mode Data Transfer
| Data Transfer
| DL_DATA_ACK_REQ, DL_DATA_ACK_IND, DL_DATA_ACK_STATUS_IND, DL_REPLY_REQ, DL_REPLY_IND, DL_REPLY_STATUS_IND, DL_REPLY_UPDATE_REQ, DL_REPLY_UPDATE_STATUS_IND
|
| _
| _
|
| QOS Management
| DL_UDQOS_REQ, DL_OK_ACK, DL_ERROR_ACK
|
| _
| _
|
| Error Reporting
| DL_UDERROR_IND
|
Table: Cross-Reference of DLS Services and Primitives
Management Services
The local management services apply to the connection, connectionless and acknowledged connectionless modes of transmission. These services, which fall outside the scope of standards specifications, define the method for initializing a stream that is connected to a DLS provider. DLS provider information reporting services are also supported by the local management facilities.
Information Reporting Service
This service provides information about the DLPI stream to the DLS user. The message DL_INFO_REQ requests the DLS provider to return operating information about the stream. The DLS provider returns the information in a DL_INFO_ACK message.
Figure: Information Reporting
Attach Service
The attach service assigns a physical point of attachment ( PPA ) to a stream. This service is required for style 2 DLS providers (see
Physical Attachment Identification
)
to specify the physical medium over which communication will occur. The DLS provider indicates success with a DL_OK_ACK; failure with a DL_ERROR_ACK. The normal message sequence is illustrated in the following figure.
Figure: Attaching a Stream to a Physical Line.
A PPA may be disassociated with a stream using the DL_DETACH_REQ. The normal message sequence is illustrated in the following figure.
Figure: Detaching a Stream from a Physical Line
Bind Service
The bind service associates a data link service access point (DLSAP) with a stream. The DLSAP is identified by a DLSAP address.
DL_BIND_REQ requests that the DLS provider bind a DLSAP to a stream. It also notifies the DLS provider to make the stream active with respect to the DLSAP for processing connectionless and acknowledged connectionless data transfer and connection establishment requests. Protocol-specific actions taken during activation should be described in DLS provider-specific addenda.
The DLS provider indicates success with a DL_BIND_ACK; failure with a DL_ERROR_ACK. Certain DLS providers require the capability of binding on multiple DLSAP addresses. DL_SUBS_BIND_REQ provides that added capability. The DLS provider indicates success with a DL_SUBS_BIND_ACK; failure with a DL_ERROR_ACK.
The normal flow of messages is illustrated in the following figure.
Figure: Binding a Stream to a DLSAP
DL_UNBIND_REQ requests the DLS provider to unbind all DLSAP(s) from a stream. The DL_UNBIND_REQ also unbinds all the subsequently bound DLSAPs that have not been unbound. The DLS provider indicates success with a DL_OK_ACK; failure with a DL_ERROR_ACK.
DL_SUBS_UNBIND_REQ requests the DLS Provider to unbind the subsequently bound DLSAP. The DLS Provider indicates success with a DL_OK_ACK; failure with a DL_ERROR_ACK.
Figure: Unbinding a Stream from a DLSAP
DL_ENABMULTI_REQ requests the DLS Provider to enable specific multicast addresses on a per stream basis. The Provider indicates success with a DL_OK_ACK; failure with a DL_ERROR_ACK.
Figure: Enabling a specific multicast address on a Stream
DL_DISABMULTI_REQ requests the DLS Provider to disable specific multicast addresses on a per Stream basis. The Provider indicates success with a DL_OK_ACK; failure with a DL_ERROR_ACK.
Figure: Disabling a specific multicast address on a Stream
DL_PROMISCON_REQ requests the DLS Provider to enable promiscuous mode on a per Stream basis, either at the physical level or at the SAP level. The Provider indicates success with a DL_OK_ACK; failure with a DL_ERROR_ACK.
Figure: Enabling promiscuous mode on a Stream
DL_PROMISCOFF_REQ requests the DLS Provider to disable promiscuous mode on a per Stream basis, either at the physical level or at the SAP level. The Provider indicates success with a DL_OK_ACK; failure with a DL_ERROR_ACK.
Figure: Disabling promiscuous mode on a Stream
Connection-mode Services
The connection-mode services enable a DLS user to establish a data link connection, transfer data over that connection, reset the link, and release the connection when the conversation has terminated.
Connection Establishment Service
The connection establishment service establishes a data link connection between a local DLS user and a remote DLS user for the purpose of sending data. Only one data link connection is allowed on each stream.
Normal Connection Establishment
In the connection establishment model, the calling DLS user initiates connection establishment, while the called DLS user waits for incoming requests. DL_CONNECT_REQ requests that the DLS provider establish a connection. DL_CONNECT_IND informs the called DLS user of the request, which may be accepted using DL_CONNECT_RES informing the calling DLS user that the connection has been established.
The normal sequence of messages is illustrated in the following figure.
Figure: Successful Connection Establishment
Once the connection is established, the DLS users may exchange user data using DL_DATA_REQ and DL_DATA_IND.
The DLS user may accept an incoming connect request on either the stream where the connect indication arrived or an alternate, responding stream. The responding stream is indicated by a token in the DL_CONNECT_RES.
This token is a value associated with the responding stream, and is obtained by issuing a DL_TOKEN_REQ on that stream.
The DLS provider responds to this request by generating a token for the stream and returning it to the DLS user in a DL_TOKEN_ACK. The normal sequence of messages for obtaining a token is illustrated in the following figure.
Figure: Token Retrieval
In the typical connection establishment scenario, the called DLS user processes one connect indication at a time, accepting the connection on another stream. Once the user responds to the current connect indication, the next connect indication (if any) can be processed.
DLPI also enables the called DLS user to multi-thread incoming connect indications. The user can receive multiple connect indications before responding to any of them. This enables the DLS user to establish priority schemes on incoming connect requests.
Connection Establishment Rejections
In certain situations, the connection establishment request cannot be completed. The following paragraphs describe the occasions under which DL_DISCONNECT_REQ and DL_DISCONNECT_IND primitives will flow during connection establishment, causing the connect request to be aborted.
The following figure illustrates the situation where the called DLS user chooses to reject the connect request by issuing DL_DISCONNECT_REQ instead of DL_CONNECT_RES.
Figure: Called DLS User Rejection of Connection Establishment Attempt
The following figure illustrates the situation where the DLS provider rejects a connect request for lack of resources or other reason. The DLS provider sends DL_DISCONNECT_IND in response to DL_CONNECT_REQ.
Figure: DLS Provider Rejection of a Connection Establishment Attempt
The following figures illustrate the situation where the calling DLS user chooses to abort aprevious connection attempt. The DLS user issues DL_DISCONNECT_REQ at some point following a DL_CONNECT_REQ. The resulting sequence of primitives depends on the relative timing of the primitives involved, as defined in the following time sequence diagrams.
Figure: Both Primitives Destroyed by Provider
Figure: DL_DISCONNECT Indication Arrives before DL_CONNECT Response is Sent
Figure: DL_DISCONNECT Indication Arrives after DL_CONNECT Response is Sent
Data Transfer Service
The connection-mode data transfer service provides for the exchange of user data in either direction or in both directions simultaneously between DLS users. Data is transmitted in logical groups called data link service data units (DLSDUs). The DLS provider preserves both the sequence and boundaries of DLSDUs as they are transmitted.
Normal data transfer is neither acknowledged nor confirmed. It is up to the DLS users, if they so choose, to implement a confirmation protocol
Each DL_DATA_REQ primitive conveys a DLSDU from the local DLS user to the DLS provider. Similarly, each DL_DATA_IND primitive conveys a DLSDU from the DLS provider to the remote DLS user. The normal flow of messages is illustrated in the figure below.
Figure: Normal Data Transfer
Connection Release Service
The connection release service provides for the DLS users or the DLS provider to initiate the connection release. Connection release is an abortive operation, and any data in transit (has not been delivered to the DLS user)
may be discarded.
DL_DISCONNECT_REQ requests that a connection be released. DL_DISCONNECT_IND informs the DLS user that a connection has been released. Normally, one DLS user requests disconnection and the DLS provider issues an indication of the ensuing release to the other DLS user, as illustrated by the message flow in the following figure.
Figure: DLS User-Invoked Connection Release
The next figure illustrates that when two DLS users independently invoke the connection release service, neither receives a DL_DISCONNECT_IND.
Figure: Simultaneous DLS User Invoked Connection Release
The next figure illustrates that when the DLS provider initiates the connection release service, each DLS user receives a DL_DISCONNECT_IND.
Figure: DLS Provider Invoked Connection Release
The next figure illustrates that when the DLS provider and the local DLS user simultaneously invoke the connection release service, the remote DLS user receives a DL_DISCONNECT_IND.
Figure: Simultaneous DLS User & DLS Provider Invoked Connection Release Service
Reset Service
The reset service may be used by the DLS user to resynchronize the use of a data link connection, or by the DLS provider to report detected loss of data unrecoverable within the data link service.
Invocation of the reset service will unblock the flow of DLSDUs if the data link connection is congested; DLSDUs may be discarded by the DLS provider. The DLS user or users that did not invoke the reset will be notified that a reset has occurred. A reset may require a recovery procedure to be performed by
the DLS users.
The interaction between each DLS user and the DLS provider will be one of the following:
-
a DL_RESET_REQ from the DLS user, followed by a DL_RESET_CON from the DLS provider
-
a DL_RESET_IND from the DLS provider, followed by a DL_RESET_RES from the DLS user.
The DL_RESET_REQ acts as asynchronization mark in the stream of DLSDUs that are transmitted by the issuing DLS user; the DL_RESET_IND acts as asynchronization mark in the stream of DLSDUs that are received by the peer DLS user. Similarly, the DL_RESET_RES acts as asynchronization mark in the stream of DLSDUs that are transmitted by the responding DLS user; the DL_RESET_CON acts as a synchronization mark in the stream of DLSDUs that are received by the DLS user which originally issued the reset.
The resynchronizing properties of the reset service are that:
-
No DLSDU transmitted by the DLS user before the synchronization mark in that transmitted stream will be delivered to the other DLS user after the synchronization mark in that received stream.
-
The DLS provider will discard all DLSDUs submitted before the issuing of the DL_RESET_REQ that have not been delivered to the peer DLS user when the DLS provider issues the DL_RESET_IND.
-
The DLS provider will discard all DLSDUs submitted before the issuing of the DL_RESET_RES that have not been delivered to the initiator of the DL_RESET_REQ when the DLS provider issues the DL_RESET_CON.
-
No DLSDU transmitted by a DLS user after the synchronization mark in that transmitted stream will be delivered to the other DLS user before the synchronization mark in that received stream.
The complete message flow depends on the origin of the reset, which may be the DLS provider or either DLS user. The following figure illustrates the message flow for a reset invoked by one DLS user.
Figure: DLS User-Invoked Connection Reset
The following figure illustrates the message flow for a reset invoked by both DLS users simultaneously.
Figure: Simultaneous DLS User-Invoked Connection Reset
The following figure illustrates the message flow for a reset invoked by the DLS provider.
Figure: DLS Provider-Invoked Connection Reset
The following figure illustrates the message flow for a reset invoked simultaneously by one DLS user and the DLS provider.
Figure: Simultaneous DLS User & DLS Provider Invoked Connection Reset
Connectionless-mode Services
The connectionless-mode services enable a DLS user to transfer units of data to peer DLS users without incurring the overhead of establishing and releasing a connection. The connectionless service does not, however, guarantee reliable delivery of data units between peer DLS users (e.g. lack of flow control may cause buffer resource shortages that result in data being discarded ) .
Once a stream has been initialized via the local management services, it may be used to send and receive connectionless data units.
Connectionless Data Transfer Service
The connectionless data transfer service provides for the exchange of user data (DLSDUs) in either direction or in both directions simultaneously without having to establish a data link connection. Data transfer is neither acknowledged nor confirmed, and there is no end-to-end flow control provided. As such, the connectionless data transfer service cannot guarantee reliable delivery of data. However, a specific DLS provider can provide assurance that messages will not be lost, duplicated, or reordered.
DL_UNITDATA_REQ conveys one DLSDU to the DLS provider. DL_UNITDATA_IND conveys one DLSDU to the DLS user. The normal flow of messages is illustrated in the figure below.
Figure: Connectionless Data Transfer
QOS Management Service
The QOS (Quality of Service) management service enables a DLS user to specify the quality of service it can expect for each invocation of the connectionless data transfer service. The DL_UDQOS_REQ directs the DLS provider to set the QOS parameters to the specified values. The normal flow of messages is illustrated in the figure below.
Figure: QOS Service
Error Reporting Service
The connectionless-mode error reporting service may be used to notify a DLS user that a previously sent data unit either produced an error or could not be delivered. This service does not, however, guarantee that an error indication will be issued for every undeliverable data unit.
Figure: Error Reporting Service
XID and TEST Service
The XID and TEST service enables the DLS User to issue an XID or TEST request to the DLS Provider. On receiving a response for the XID or TEST frame transmitted to the peer DLS Provider, the DLS Provider sends up an XID or TEST confirmation primitive to the DLS User. On receiving an XID or TEST frame from the peer DLS Provider, the local DLS Provider sends up an XID or TEST indication respectively to the DLS User. The DLS User must respond with an XID or TEST response primitive.
If the DLS User requested automatic handling of the XID or TEST response, at bind time, the DLS Provider will send up an error acknowledgement on receiving an XID or TEST request. Also, no indications will be generated to the DLS User on receiving XID or TEST frames from the remote side.
The normal flow of messages is illustrated in the figures below.
Figure: XID Service
Figure: TEST Service
Acknowledged Connectionless-mode Services
The acknowledged connectionless-mode services are designed for general use for the reliable transfer of informations between peer DLS Users. These services are intended for applications that require acknowledgement of cross-LAN data unit transfer, but wish to avoid the complexity that is viewed as being associated with the connection-mode services. Although the exchange service is connectionless, insequence delivery is guaranteed for data sent by the initiating station.
Acknowledged Connectionless-mode Data Transfer Services
The acknowledged connectionless-mode data transfer services provide the means by which the DLS Users can exchange DLSDUs which are acknowledged at the LLC sublayer, without the establishment of a Data Link connection. The services provide a means by which a local DLS User can send a data unit to the peer DLS User, request a previously prepared data unit, or exchange data units with the peer DLS User.
Figure: Acknowledged Connectionless-Mode Data Unit Transmission Service
The next figure illustrates the acknowledged connectionless-mode data unit exchange service.
Figure: Acknowledged Connectionless-Mode Data Unit Exchange Service
The next figure illustrates the Reply Data Unit Preparation service.
Figure: Acknowledged Connectionless-Mode Reply Data Unit Preparation Service
QOS Management Service
The Quality of Service (QOS) management service enables a DLS User to specify the quality of service it can expect for each invocation of the acknowledged connectionless data transfer service. The DL_UDQOS_REQ directs the DLS provider to set the QOS parameters to the specified values. The normal flow of messages is illustrated in
QOS Management Service
).
Error Reporting Service
The acknowledged connectionless mode error reporting service is the same as the unacknowledged connectionless-mode error reporting service. For the message flow, refer to
Error Reporting Service
.
Example
To bring together all the the items described in this chapter, the following example illustrates the primitives that flow during a complete, connection-mode sequence between stream open and stream close.
Figure: A Connection-mode Example
Why not acquire a nicely bound hard copy?
Click here to return to the publication details or order a copy
of this publication.