DLPI_RECV(3DLPI) Data Link Provider Interface Library Functions


NAME


dlpi_recv - receive a data message using DLPI

SYNOPSIS


cc [ flag ... ] file ... -ldlpi [ library ... ]
#include <libdlpi.h>

int dlpi_recv(dlpi_handle_t dh, void *saddrp,
size_t * saddrlenp, void *msgbuf, size_t *msglenp,
int msec, dlpi_recvinfo_t *recvp);


DESCRIPTION


The dlpi_recv() function attempts to receive data messages over the DLPI
link instance associated with the DLPI handle dh. If dh is not in the
DL_IDLE DLPI state, the attempt fails. The caller must ensure that msgbuf
is at least msglenp bytes in size. Upon success, msgbuf contains the
data message received, msglenp contains the number of bytes placed in
msgbuf.


The caller must ensure that saddrp is at least DLPI_PHYSADDR_MAX bytes in
size and saddrlenp must contain the length of saddrp. Upon success,
saddrp contains the address of the source sending the data message and
saddrlenp contains the source address length. If the caller is not
interested in the source address, both saddrp and saddrlenp can be left
as NULL. If the source address is not available, saddrp is not filled in
and saddrlenp is set to zero.


The dlpi_recvinfo_t is a structure defined in <libdlpi.h> as follows:

typedef struct {
uchar_t dri_destaddr[DLPI_PHYSADDR_MAX];
uchar_t dri_destaddrlen;
dlpi_addrtype_t dri_destaddrtype;
size_t dri_totmsglen;
} dlpi_recvinfo_t;


Upon success, if recvp is not set to NULL, dri_destaddr contains the
destination address, dri_destaddrlen contains the destination address
length, and dri_totmsglen contains the total length of the message
received. If the destination address is unicast, dri_destaddrtype is set
to DLPI_ADDRTYPE_UNICAST. Otherwise, it is set to DLPI_ADDRTYPE_GROUP.


The values of msglenp and dri_totmsglen might vary when a message larger
than the size of msgbuf is received. In that case, the caller can use
dri_totmsglen to determine the original total length of the message.


If the handle is in raw mode, as described in dlpi_open(3DLPI), msgbuf
starts with the link-layer header. See dlpi(7P). The values of saddrp,
saddrlenp, and all the members of dlpi_recvinfo_t except dri_totmsglen
are invalid because the address information is already included in the
link-layer header returned by msgbuf.


If no message is received within msec milliseconds, dlpi_recv() returns
DLPI_ETIMEDOUT. If msec is 0, dlpi_recv() does not block. If msec is -1,
dlpi_recv() does block until a data message is received.

RETURN VALUES


Upon success, DLPI_SUCCESS is returned. If DL_SYSERR is returned, errno
contains the specific UNIX system error value. Otherwise, a DLPI error
value defined in <sys/dlpi.h> or an error value listed in the following
section is returned.

ERRORS


DLPI_EBADMSG
Bad DLPI message


DLPI_EINHANDLE
Invalid DLPI handle


DLPI_EINVAL
Invalid argument


DLPI_ETIMEDOUT
DLPI operation timed out


DLPI_EUNAVAILSAP
Unavailable DLPI SAP


DLPI_FAILURE
DLPI operation failed


ATTRIBUTES


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


+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | Committed |
+--------------------+-----------------+
|MT-Level | Safe |
+--------------------+-----------------+

SEE ALSO


dlpi_bind(3DLPI), dlpi_open(3DLPI), libdlpi(3LIB), attributes(5),
dlpi(7P)


August 22, 2007 DLPI_RECV(3DLPI)