Copyright (c) 2007, Sun Microsystems, Inc. All Rights Reserved
The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License.
You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License.
When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
cc [ flag ... ] file ... -ldlpi [ library ... ] #include <libdlpi.h> int dlpi_info(dlpi_handle_t dh, dlpi_info_t *infop, uint_t opt);
The dlpi_info() function provides DLPI information about the open DLPI link instance associated with DLPI handle dh. DLPI information can be retrieved in any state of dh, but some of the information might not be available if dh is in the DL_UNBOUND DLPI state. The DLPI information received is copied into infop, which must point to a dlpi_info_t allocated by the caller. The opt argument is reserved for future use and must be set to 0.
The dlpi_info_t is a structure defined in <libdlpi.h> as follows:
typedef struct { uint_t di_opts; uint_t di_max_sdu; uint_t di_min_sdu; uint_t di_state; uchar_t di_mactype; char di_linkname[DLPI_LINKNAME_MAX]; uchar_t di_physaddr[DLPI_PHYSADDR_MAX]; uchar_t di_physaddrlen; uchar_t di_bcastaddr[DLPI_PHYSADDR_MAX]; uchar_t di_bcastaddrlen; uint_t di_sap; int di_timeout; dl_qos_cl_sel1_t di_qos_sel; dl_qos_cl_range1_t di_qos_range; } dlpi_info_t;di_opts
Reserved for future dlpi_info_t expansion.
Maximum message size, in bytes, that the DLPI link is able to accept for transmission. The value is guaranteed to be greater than or equal to di_min_sdu.
Minimum message size, in bytes, that the DLPI link is able to accept for transmission. The value is guaranteed to be greater than or equal to one.
Current DLPI state of dh; either DL_UNBOUND or DL_IDLE.
MAC type supported by the DLPI link associated with dh. See <sys/dlpi.h> for the list of possible MAC types.
Link name associated with DLPI handle dh.
Link-layer physical address of bound dh. If dh is in the DL_UNBOUND DLPI state, the contents of di_physaddr are unspecified.
Physical address length, in bytes. If dh is in the DL_UNBOUND DLPI state, di_physaddrlen is set to zero.
Link-layer broadcast address. If the di_mactype of the DLPI link does not support broadcast, the contents of di_bcastaddr are unspecified.
Link-layer broadcast address length, in bytes. If the di_mactype of the DLPI link does not support broadcast, di_bcastaddrlen is set to zero.
SAP currently bound to handle. If dh is in the DL_UNBOUND DLPI state, di_sap is set to zero.
Current timeout value, in seconds, set on the dlpi handle.
Current QOS parameters supported by the DLPI link instance associated with dh. Unsupported QOS parameters are set to DL_UNKNOWN.
Available range of QOS parameters supported by a DLPI link instance associated with the DLPI handle dh. Unsupported QOS range values are set to DL_UNKNOWN.
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.
Bad DLPI message
Invalid DLPI handle
Invalid argument
Unsupported DLPI connection mode
DLPI operation timed out
Unsupported DLPI Version
DLPI operation failed
Example 1 Get link-layer broadcast address
The following example shows how dlpi_info() can be used.
#include <libdlpi.h> uchar_t * get_bcastaddr(const char *linkname, uchar_t *baddrlenp) { dlpi_handle_t dh; dlpi_info_t dlinfo; uchar_t *baddr; if (dlpi_open(linkname, &dh, 0) != DLPI_SUCCESS) return (NULL); if (dlpi_info(dh, &dlinfo, 0) != DLPI_SUCCESS) { dlpi_close(dh); return (NULL); } dlpi_close(dh); *baddrlenp = dlinfo.di_bcastaddrlen; if ((baddr = malloc(*baddrlenp)) == NULL) return (NULL); return (memcpy(baddr, dlinfo.di_bcastaddr, *baddrlenp)); }
See attributes(5) for description of the following attributes:
ATTRIBUTE TYPE ATTRIBUTE VALUE |
Interface Stability Committed |
MT-Level Safe |
dlpi_bind(3DLPI), libdlpi(3LIB), attributes(5)