SDP(4D) SDP(4D)
NAME
sdp - Sockets Direct Protocol driver
SYNOPSIS
#include <sys/socket.h>
#include <netinet/in.h>
s = socket(AF_INET, SOCK_STREAM, PROTO_SDP); s = socket(AF_INET6, SOCK_STREAM, PROTO_SDP);DESCRIPTION
The Sockets Direct Protocol (
SDP) is a transport protocol layered over
the
Infiniband Transport Framework (
IBTF).
SDP is a standard
implementation based on Annex 4 of the
Infiniband Architecture Specification Vol 1 and provides reliable byte-stream, flow controlled
two-way data transmission that closely mimics the Transmission Control
Protocol (
TCP).
SDP supports a sockets-based SOCK_STREAM interface to application
programs. It also supports graceful close (including half-closed
sockets), IP addressing (IPv4 or IPv6), the connecting/accepting connect
model, out-of-band (OOB) data and common socket options. The
SDP protocol
also supports kernel bypass data transfers and data transfers from send-
upper-layer-protocol (ULP) buffers to receive ULP buffers. A
SDP message
includes a BSDH header followed by data. (A BSDH header advertises the
amount of available buffers on the local side).
SDP networking functionality is broken into the
sdp driver and a function
call-based sockfs implementation. A new protocol family of PROTO_SDP is
introduced to use the
SDP transport provided by the driver.
Sockets utilizing
SDP are either active or passive. Active sockets
initiate connections to passive sockets. Both active and passive sockets
must have their local IP or IPv6 address and
SDP port number bound with
the
bind(3SOCKET) system call after the socket is created. By default,
SDP sockets are active. A passive socket is created by calling the
listen(3SOCKET) system call after binding the socket with bind(). This
process establishes a queueing parameter for the passive socket.
Connections to the passive socket can be received with the
accept(3SOCKET) system call. Active sockets use the
connect(3SOCKET) call after binding to initiate connections.
In most cases,
SDP sends data when it is presented. When outstanding data
is not yet acknowledged,
SDP gathers small amounts of output to be sent
in a single packet once an acknowledgement is received. For a small
number of clients this packetization may cause significant delays. To
circumvent this problem,
SDP provided by the driver supplies SDP_NODELAY,
a socket-level boolean option. Note that this behavior is similar to the
TCP_NODELAY option.
SDP provides an urgent data mechanism that can be invoked using the out-
of-band provisions of
send(3SOCKET). The out-of-band delivery behavior is
identical to TCP. The caller may mark one byte as "urgent" with the
MSG_OOB flag to
send(3SOCKET). This sets an "urgent pointer" pointing to
the byte in the
SDP stream. The receiver of the stream is notified of the
urgent data by a
SIGURG signal. The SIOCATMARK
ioctl(2) request returns a
value indicating whether the stream is at the urgent mark. Because the
system never returns data across the urgent mark in a single
read(2) call, it is possible to advance to the urgent data in a simple loop which
reads data, testing the socket with the
SIOCATMARK ioctl() request until
it reaches the mark.
ADDRESS FORMATS
SDP uses IP/IPv6 addresses to refer to local and remote devices and opens
a reliable connected IB connection between two end points. The
sdp driver
supports a point-to-point connection, however broadcasting and
multicasting are not supported.
SOCKET OPTIONS
SDP supports setsockopt and getsockopt to set and read socket options.
Very few socket options affect
SDP protocol operations. Other common
socket options are processed but do not affect SDP protocol operation.
All socket options are checked for validity. A getsockopt returns the
values set or toggled by setsockopt. Socket options that affect protocol
operations are SO_LINGER, SO_DEBUG, SO_REUSEADDR and SO_OOBINLINE.
ERRORS
EISCONN A connect() operation was attempted on a
socket on which a connect() operation had
already been performed.
ECONNRESET The remote peer forced the connection to be
closed. This usually occurs when the remote
machine loses state information about the
connection due to a crash.
ECONNREFUSED The remote peer actively refused connection
establishment. This usually occurs because no
process is listening to the port.
EADDRINUSE A bind() operation was attempted on a socket
with a network address/port pair that has
already been bound to another socket.
EADDRNOTAVAIL A bind() operation was attempted on a socket
with a network address for which no network
interface exists.
EACCES A bind() operation was attempted with a
reserved port number and the effective user
ID of the process was not the privileged
user.
ENOBUFS The system ran out of memory for internal
data structures.
FILES
/kernel/drv/amd64/sdp 64-bit
ELF kernel module (x86).
/kernel/drv/sparcv9/sdp 64-bit
ELF kernel module (SPARC).
/kernel/drv/amd64/sdpib 64-bit
ELF kernel module (x86).
/kernel/drv/sparcv9/sdpib 64-bit
ELF kernel module (SPARC).
ATTRIBUTES
See
attributes(7) for descriptions of the following attribute:
+---------------+-----------------+
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+---------------+-----------------+
|Architecture | x86, SPARC |
+---------------+-----------------+
SEE ALSO
read(2),
socket.h(3HEAD),
accept(3SOCKET),
bind(3SOCKET),
connect(3SOCKET),
send(3SOCKET),
getsockopt(3XNET),
attributes(7),
standards(7) Infiniband Architecture Specification Vol 1- Annex 4 -- November, 2002
June 19, 2021
SDP(4D)