DL_BIND_REQ (dl_bind_req_t) - requests the DLS provider bind a DLSAP to the stream. The DLS user must identify the address of the DLSAP to be bound to the stream. Forconnection-mode service, the DLS user also indicates whether it will accept incoming connection requests on the stream. Finally, the request directs the DLS provider to activate the stream associated with the DLSAP.A stream is viewed as active when the DLS provider may transmit and receive protocol data units destined to or originating from the stream. The PPA associated with each stream must be initialized upon completion of the processing of the DL_BIND_REQ (see
PPA Initialization/De-initialization ). More specifically, the DLS user is ensured that the PPA is initialized when the DL_BIND_ACK is received. If the PPA cannot be initialized, the DL_BIND_REQ will fail.A stream may be bound as a"connection management" stream, such that it will receive all connect requests that arrive through a given PPA (see
Connection Management Stream ). In this case, the dl_sap will be ignored.
The message consists of one M_PROTO message block, which contains the following structure.
typedef struct { t_uscalar_t dl_primitive; t_uscalar_t dl_sap; t_uscalar_t dl_max_conind; ushort dl_service_mode; ushort dl_conn_mgmt; t_uscalar_t dl_xidtest_flg; } dl_bind_req_t;
- dl_primitive
conveys DL_BIND_REQ.
- dl_sap
conveys sufficient information to identify the DLSAP that will be bound to the DLPI stream (seeDLPI Addressing for a description of DLSAP addresses). The format of this information is specific to a given DLS provider, and may contain the full DLSAP address or some portion of that address sufficient to uniquely identify the DLSAP in question. The full address of the bound DLSAP will be returned in the DL_BIND_ACK.The following rules are used by the DLS provider when binding a DLSAP address:
- The DLS provider must define and manage its DLSAP address space.
- DLPI allows the same DLSAP to be bound to multiple streams, but a given DLS provider may need to restrict its address space to allow one stream per DLSAP.
- The DLS provider may not be able to bind the specified DLSAP address for one of the following reasons:
- the DLS provider may statically associate a specific DLSAP with each stream
- the DLS provider may only support one stream per DLSAP and the DLS user attempted to bind a DLSAP that was already bound to another stream.
In case of reason 1, the value of dl_sap is ignored by the DLS provider and the DL_BIND_ACK returns the DLSAP address that is already associated with the stream. In case of reason 2, if the DLS provider cannot bind the given DLSAP to the stream, it may attempt to choose an alternate DLSAP and return that on the DL_BIND_ACK. If an alternate DLSAP cannot be chosen, the DLS provider will return a DL_ERROR_ACK and set dl_errno to DL_NOADDR.
Because of the provider-specific nature of the DLSAP address, DLS user software that is to be protocol independent should avoid hard-coding this value. The DLS user should retrieve the necessary DLSAP address from some other entity (such as a management entity or higher layer protocol entity) and insert it without inspection into the DL_BIND_REQ.
- dl_max_conind
conveys the maximum number of outstanding DL_CONNECT_IND messages allowed on the DLPI stream. If the value is zero, the stream cannot accept any DL_CONNECT_IND messages. If greater than zero, the DLS user will accept DL_CONNECT_IND messages up to the given value before having to respond with a DL_CONNECT_RES or a DL_DISCONNECT_REQ (seeMulti-threaded Connection Establishment for details on how this value is used to support multi-threaded connect processing). The DLS provider may not be able to support the value supplied in dl_max_conind, as specified by the following rules:
- If the provider cannot support the specified number of outstanding connect indications, it should set the value down to a number it can support.
- Only one stream that is bound to the indicated DLSAP may have an allowed number of maximum outstanding connect indications greater than zero. If a DL_BIND_REQ specifies a value greater than zero, but another stream has already bound itself to the DLSAP with a value greater than zero, the DLS provider will fail the request, setting dl_errno to DL_BOUND on the DL_ERROR_ACK.
- If a stream with dl_max_conind greater than zero is used to accept a connection, the stream will be found busy during the duration of the connection, and no other streams may be bound to the same DLSAP with a value of dl_max_conind greater than zero. This restriction prevents more than one stream bound to the same DLSAP from receiving connect indications and accepting connections. Accepting a connection on such a stream is only allowed if there is just a single outstanding connect indication being processed.
- A DLS user should always be able to request adl_max_conind value of zero, since this indicates to the DLS provider that the stream will only be used to originate connect requests.
- A stream with a negotiated value of dl_max_conind that is greater than zero may not originate connect requests.
This field is ignored in connectionless-mode service.
- dl_service_mode
conveys the desired mode of service for this stream, and may contain one of the following:
- DL_CODLS
- connection-oriented data link service
- DL_CLDLS
- connectionless data link service
- DL_ACLDLS
- acknowledged connectionless data link service.
If the DLS provider does not support the requested service mode, a DL_ERROR_ACK will be generated, specifying DL_UNSUPPORTED.
- dl_conn_mgmt
if non-zero, indicates that the stream is the "connection management" stream for the PPA to which the stream is attached. When an incoming connect request arrives, the DLS provider will first look for a stream bound with dl_max_conind greater than zero that is associated with the destination DLSAP. If such a stream is found, the connect indication will be issued on that stream. Otherwise, the DLS provider will issue the connect indication on the "connection management" stream for that PPA, if one exists. Only one "connection management" stream is allowed per PPA, so an attempt to bind a second connection management stream on a PPA will fail with the DLPI error set to DL_BOUND. When l_conn_mgmt is non-zero, the value of dl_sap will be ignored. In connectionless-mode service, dl_conn_mgmt is ignored by the DLS provider.
- dl_xidtest_flg
indicates to the DLS Provider that XID and/or TEST responses for this stream are to be automatically generated by the DLS Provider. The DLS Provider will not generate DL_XID_IND and/or DL_TEST_IND, and will error a DL_XID_REQ and/or DL_TEST_REQ. If the DLS Provider does not support automatic handling of XID and/or TEST responses, a DL_ERROR_ACK will be generated, specifying DL_NOAUTO, DL_NOXIDAUTO or DL_NOTESTAUTO. If the Provider receives an XID or TEST request from the DLS User, a DL_ERROR_ACK will be generated specifying DL_XIDAUTO or DL_TESTAUTO respectively.The dl_xidtest_flg contains a bit-mask specifying zero or more of the following values:
- DL_AUTO_XID
- automatically respond to XID commands
- DL_AUTO_TEST
- automatically respond to TEST commands.
The message is valid in state DL_UNBOUND.
The resulting state is DL_BIND_PENDING.
If the bind request is successful, DL_BIND_ACK is sent to the DLS user resulting in state DL_IDLE.If the request fails, message DL_ERROR_ACK is returned and the resulting state is unchanged.
- DL_ACCESS
The DLS user did not have proper permission to use the requested DLSAP address.
- DL_BADADDR
The DLSAP address information was invalid or was in an incorrect format.
- DL_BOUND
The DLS user attempted to bind a second stream to a DLSAP with dl_max_conind greater than zero, or the DLS user attempted to bind a second "connectionmanagement" stream to a PPA.
- DL_INITFAILED
Automatic initialization of the PPAfailed.
- DL_NOTINIT
The PPA had not been initialized prior to this request.
- DL_NOADDR
The DLS provider could not allocate a DLSAP address for this stream.
- DL_NOAUTO
Automatic handling of XID and TEST responses not supported.
- DL_NOTESTAUTO
Automatic handling of TEST response not supported.
- DL_NOXIDAUTO
Automatic handling of XID response not supported.
- DL_OUTSTATE
The primitive was issued from an invalid state.
- DL_SYSERR
- DL_UNSUPPORTED
The DLS provider does not support requested service mode on this stream. A system error has occurred and the UNIX system error is indicated in the DL_ERROR_ACK.
Contents | Next section | Index |