man pages section 3: Extended Library Functions, Volume 1

Exit Print View

Updated: July 2014
 
 

dat_ep_connect(3DAT)

Name

dat_ep_connect - establish a connection between the local Endpoint and a remote Endpoint

Synopsis

cc [ flag… ] file–ldat [ library… ] 
#include <dat/udat.h>

DAT_RETURN
    dat_ep_connect (
    IN    DAT_EP_HANDLE         ep_handle,
    IN    DAT_IA_ADDRESS_PTR    remote_ia_address,
    IN    DAT_CONN_QUAL         remote_conn_qual,
    IN    DAT_TIMEOUT           timeout,
    IN    DAT_COUNT             private_data_size,
    IN const  DAT_PVOID         private_data,
    IN    DAT_QOS               qos,
    IN    DAT_CONNECT_FLAGS     connect_flags
    )

Parameters

ep_handle

Handle for an instance of an Endpoint.

remote_ia_address

The Address of the remote IA to which an Endpoint is requesting a connection.

remote_conn_qual

Connection Qualifier of the remote IA from which an Endpoint requests a connection.

timeout

Duration of time, in microseconds, that a Consumer waits for Connection establishment. The value of DAT_TIMEOUT_INFINITE represents no timeout, indefinite wait. Values must be positive.

private_data_size

Size of the private_data. Must be nonnegative.

private_data

Pointer to the private data that should be provided to the remote Consumer as part of the Connection Request. If private_data_size is zero, then private_data can be NULL.

qos

Requested quality of service of the connection.

connect_flags

Flags for the requested connection. If the least significant bit of DAT_MULTIPATH_FLAG is 0, the Consumer does not request multipathing. If the least significant bit of DAT__MULTIPATH_FLAG is 1, the Consumer requests multipathing. The default value is DAT_CONNECT_DEFAULT_FLAG, which is 0.

Description

The dat_ep_connect() function requests that a connection be established between the local Endpoint and a remote Endpoint. This operation is used by the active/client side Consumer of the Connection establishment model. The remote Endpoint is identified by Remote IA and Remote Connection Qualifier.

As part of the successful completion of this operation, the local Endpoint is bound to a Port Qualifier of the local IA. The Port Qualifier is passed to the remote side of the requested connection and is available to the remote Consumer in the Connection Request of the DAT_CONNECTION_REQUEST_EVENT .

The Consumer-provided private_data is passed to the remote side and is provided to the remote Consumer in the Connection Request. Consumers can encapsulate any local Endpoint attributes that remote Consumers need to know as part of an upper-level protocol. Providers can also provide a Provider on the remote side any local Endpoint attributes and Transport-specific information needed for Connection establishment by the Transport.

Upon successful completion of this operation, the local Endpoint is transferred into DAT_EP_STATE_ACTIVE_CONNECTION_PENDING.

Consumers can request a specific value of qos. The Provider specifies which quality of service it supports in documentation and in the Provider attributes. If the local Provider or Transport does not support the requested qos, the operation fails and DAT_MODEL_NOT_SUPPORTED is returned synchronously. If the remote Provider does not support the requested qos, the local Endpoint is automatically transitioned into the DAT_EP_STATE_DISCONNECTED state, the connection is not established, and the event returned on the connect_evd_handle is DAT_CONNECTION_EVENT_NON_PEER_REJECTED. The same DAT_CONNECTION_EVENT_NON_PEER_REJECTED event is returned if the connection cannot be established for all reasons of not establishing the connection, except timeout, remote host not reachable, and remote peer reject. For example, remote Consumer is not listening on the requested Connection Qualifier, Backlog of the requested Service Point is full, and Transport errors. In this case, the local Endpoint is automatically transitioned into DAT_EP_STATE_DISCONNECTED state.

The acceptance of the requested connection by the remote Consumer is reported to the local Consumer through a DAT_CONNECTION_EVENT_ESTABLISHED event on the connect_evd_handle of the local Endpoint and the local Endpoint is automatically transitioned into a DAT_EP_STATE_CONNECTED state.

The rejection of the connection by the remote Consumer is reported to the local Consumer through a DAT_CONNECTION_EVENT_PEER_REJECTED event on the connect_evd_handle of the local Endpoint and the local Endpoint is automatically transitioned into a DAT_EP_STATE_DISCONNECTED state.

When the Provider cannot reach the remote host or the remote host does not respond within the Consumer requested Timeout, a DAT_CONNECTION_EVENT_UNREACHABLE event is generated on the connect_evd_handle of the Endpoint. The Endpoint transitions into a DAT_EP_STATE_DISCONNECTED state.

If the Provider can locally determine that the remote_ia_address is invalid, or that the remote_ia_address cannot be converted to a Transport-specific address, the operation can fail synchronously with a DAT_INVALID_ADDRESS return.

The local Endpoint is automatically transitioned into a DAT_EP_STATE_CONNECTED state when a Connection Request accepted by the remote Consumer and the Provider completes the Transport-specific Connection establishment. The local Consumer is notified of the established connection through a DAT_CONNECTION_EVENT_ESTABLISHED event on the connect_evd_handle of the local Endpoint.

When the timeout expired prior to completion of the Connection establishment, the local Endpoint is automatically transitioned into a DAT_EP_STATE_DISCONNECTED state and the local Consumer through a DAT_CONNECTION_EVENT_TIMED_OUT event on the connect_evd_handle of the local Endpoint.

Return Values

DAT_SUCCESS

The operation was successful.

DAT_INSUFFICIENT_RESOURCES

The operation failed due to resource limitations.

DAT_INVALID_PARAMETER

Invalid parameter.

DAT_INVALID_ADDRESS

Invalid address.

DAT_INVALID_HANDLE

Invalid DAT handle; Invalid Endpoint handle.

DAT_INVALID_STATE

Parameter in an invalid state. Endpoint was not in DAT_EP_STATE_UNCONNECTED state.

DAT_MODEL_NOT_SUPPORTED

The requested Model was not supported by the Provider. For example, the requested qos was not supported by the local Provider.

Usage

It is up to the Consumer to negotiate outstanding RDMA Read incoming and outgoing with a remote peer. The outstanding RDMA Read outgoing attribute should be smaller than the remote Endpoint outstanding RDMA Read incoming attribute. If this is not the case, Connection establishment might fail.

DAT API does not define a protocol on how remote peers exchange Endpoint attributes. The exchange of outstanding RDMA Read incoming and outgoing attributes of EPs is left to the Consumer ULP. The Consumer can use Private Data for it.

If the Consumer does not care about posting RDMA Read operations or remote RDMA Read operations on the connection, it can set the two outstanding RDMA Read attribute values to 0.

If the Consumer does not set the two outstanding RDMA Read attributes of the Endpoint, the Provider is free to pick up any value for default. The Provider is allowed to change these default values during connection setup.

Attributes

See attributes(5) for descriptions of the following attributes:

ATTRIBUTE TYPE
ATTRIBUTE VALUE
Interface Stability
Committed
MT-Level
Unsafe
Standard
uDAPL, 1.1, 1.2

See Also

libdat(3LIB), attributes(5)