cc [ flag... ] file... -ldlpi [ library... ] #include <libdlpi.h> int dlpi_enabnotify(dlpi_handle_t dh, uint_t notes, dlpi_notifyfunc_t *funcp, void *arg, dlpi_notifyid_t *id);
typedef void dlpi_notifyfunc_t(dlpi_handle_t, dlpi_notifyinfo_t *, void *);
The dlpi_enabnotify() function enables a notification callback for the set of events specified in notes, which must be one or more (by a logical OR operation) of the DLPI notifications documented in dlpi(7P). The callback function funcp is registered with the DLPI handle dh and is invoked when dh receives notification for any of the specified event types. Upon success, id contains the identifier associated with the registration.
Multiple event types can be registered for a callback function on the DLPI handle dh. Similarly, the same event type can be registered multiple times on the same handle.
Once a callback has been registered, libdlpi will check for notification events on the DLPI handle dh, when exchanging DLPI messages with the underlying DLPI link instance. The dlpi_recv(3DLPI) function will always check for notification events, but other libdlpi operations may also lead to an event callback being invoked. Although there may be no expected data messages to be received, dlpi_recv() can be called, as shown below, with a null buffer to force a check for pending events on the underlying DLPI link instance.
dlpi_recv(dh, NULL, NULL, NULL, NULL, 0, NULL);
When a notification event of interest occurs, the callback function is invoked with the arguments arg, originally passed to dlpi_disabnotify(3DLPI), and infop, whose members are described below.
Notification event type.
Current speed, in kilobits per second, of the DLPI link. Valid only for DL_NOTE_SPEED.
Current maximum message size, in bytes, that the DLPI link is able to accept for transmission. Valid only for DL_NOTE_SDU_SIZE.
Link-layer physical address length, in bytes. Valid only for DL_NOTE_PHYS_ADDR.
Link-layer physical address of DLPI link. Valid only for DL_NOTE_PHYS_ADDR.
The libdlpi library will allocate and free the dlpi_notifyinfo_t structure and the caller must not allocate the structure or perform any operations that require its size to be known.
The callback is not allowed to block. This precludes calling dlpi_enabnotify() from a callback, but non-blocking libdlpi functions, including dlpi_disabnotify(), can be called.
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.
A DLPI handle is invalid.
An argument is invalid.
The DLPI notification ID is invalid.
The DLPI notification is not supported by the link.
The DLPI operation timed out.
The DLPI operation failed.
See attributes(5) for descriptions of the following attributes: