xref: /titanic_51/usr/src/lib/libdlpi/common/libdlpi.h (revision b127ac411761a3d8d642d9342d9cac2785e1faaa)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5c7e4935fSss150715  * Common Development and Distribution License (the "License").
6c7e4935fSss150715  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217c478bd9Sstevel@tonic-gate /*
22d62bc4baSyz147064  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
237c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
247c478bd9Sstevel@tonic-gate  */
257c478bd9Sstevel@tonic-gate 
267c478bd9Sstevel@tonic-gate #ifndef _LIBDLPI_H
277c478bd9Sstevel@tonic-gate #define	_LIBDLPI_H
287c478bd9Sstevel@tonic-gate 
297c478bd9Sstevel@tonic-gate #include <sys/types.h>
307c478bd9Sstevel@tonic-gate #include <sys/dlpi.h>
317c478bd9Sstevel@tonic-gate 
327c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
337c478bd9Sstevel@tonic-gate extern "C" {
347c478bd9Sstevel@tonic-gate #endif
357c478bd9Sstevel@tonic-gate 
36c7e4935fSss150715 /*
37c7e4935fSss150715  * Maximum Physical (hardware) address length, in bytes.
38c7e4935fSss150715  * Must be as large as MAXMACADDRLEN (see <sys/mac.h>).
39c7e4935fSss150715  */
40c7e4935fSss150715 #define	DLPI_PHYSADDR_MAX	64
417c478bd9Sstevel@tonic-gate 
427c478bd9Sstevel@tonic-gate /*
43c7e4935fSss150715  * Maximum link name length, including terminating NUL, in bytes.
44d62bc4baSyz147064  * Must be no larger than MAXLINKNAMELEN (see <sys/param.h>).
457c478bd9Sstevel@tonic-gate  */
46c7e4935fSss150715 #define	DLPI_LINKNAME_MAX	32
47c7e4935fSss150715 
48c7e4935fSss150715 /*
49c7e4935fSss150715  * Constant used to indicate bind to any SAP value
50c7e4935fSss150715  */
51c7e4935fSss150715 #define	DLPI_ANY_SAP	(uint_t)-1
52c7e4935fSss150715 
53c7e4935fSss150715 /*
54c7e4935fSss150715  * Flag values for dlpi_open(); those not documented in dlpi_open(3DLPI)
55c7e4935fSss150715  * are Consolidation Private and subject to change or removal.
56c7e4935fSss150715  */
57c7e4935fSss150715 #define	DLPI_EXCL	0x0001	/* Exclusive open */
58c7e4935fSss150715 #define	DLPI_PASSIVE	0x0002	/* Open DLPI link in passive mode */
59c7e4935fSss150715 #define	DLPI_RAW	0x0004	/* Open DLPI link in raw mode */
60c7e4935fSss150715 #define	DLPI_SERIAL	0x0008	/* Synchronous serial line interface */
61c7e4935fSss150715 #define	DLPI_NOATTACH	0x0010	/* Do not attach PPA */
62d62bc4baSyz147064 #define	DLPI_NATIVE	0x0020	/* Open DLPI link in native mode */
63d62bc4baSyz147064 #define	DLPI_DEVONLY	0x0040	/* Open DLPI link under /dev only */
64*b127ac41SPhilip Kirk #define	DLPI_DEVIPNET	0x0080	/* Open IP DLPI link under /dev/ipnet */
65*b127ac41SPhilip Kirk #define	DLPI_IPNETINFO	0x0100	/* Request ipnetinfo headers */
66c7e4935fSss150715 /*
67c7e4935fSss150715  * Timeout to be used in DLPI-related operations, in seconds.
68c7e4935fSss150715  */
69c7e4935fSss150715 #define	DLPI_DEF_TIMEOUT  5
70c7e4935fSss150715 
71c7e4935fSss150715 /*
72c7e4935fSss150715  * Since this library returns error codes defined in either <sys/dlpi.h> or
73c7e4935fSss150715  * <libdlpi.h>, libdlpi specific error codes will start at value 10000 to
74c7e4935fSss150715  * avoid overlap. DLPI_SUCCESS cannot be 0 because 0 is already DL_BADSAP in
75c7e4935fSss150715  * <sys/dlpi.h>.
76c7e4935fSss150715  */
77c7e4935fSss150715 enum {
78c7e4935fSss150715 	DLPI_SUCCESS = 10000,	/* DLPI operation succeeded */
79c7e4935fSss150715 	DLPI_EINVAL,		/* invalid argument */
80c7e4935fSss150715 	DLPI_ELINKNAMEINVAL,	/* invalid DLPI linkname */
81c7e4935fSss150715 	DLPI_ENOLINK,		/* DLPI link does not exist */
82c7e4935fSss150715 	DLPI_EBADLINK,		/* bad DLPI link */
83c7e4935fSss150715 	DLPI_EINHANDLE,		/* invalid DLPI handle */
84c7e4935fSss150715 	DLPI_ETIMEDOUT,		/* DLPI operation timed out */
85c7e4935fSss150715 	DLPI_EVERNOTSUP,	/* unsupported DLPI Version */
86c7e4935fSss150715 	DLPI_EMODENOTSUP,	/* unsupported DLPI connection mode */
87c7e4935fSss150715 	DLPI_EUNAVAILSAP,	/* unavailable DLPI SAP */
88c7e4935fSss150715 	DLPI_FAILURE,		/* DLPI operation failed */
89c7e4935fSss150715 	DLPI_ENOTSTYLE2,	/* DLPI style-2 node reports style-1 */
90c7e4935fSss150715 	DLPI_EBADMSG,		/* bad DLPI message */
91c7e4935fSss150715 	DLPI_ERAWNOTSUP,	/* DLPI raw mode not supported */
923ab45760Sss150715 	DLPI_ENOTEINVAL,	/* invalid DLPI notification type */
93d62bc4baSyz147064 	DLPI_ENOTENOTSUP,	/* DLPI notification not supported by link */
943ab45760Sss150715 	DLPI_ENOTEIDINVAL,	/* invalid DLPI notification id */
95*b127ac41SPhilip Kirk 	DLPI_EIPNETINFONOTSUP,	/* DLPI_IPNETINFO not supported */
96c7e4935fSss150715 	DLPI_ERRMAX		/* Highest + 1 libdlpi error code */
97c7e4935fSss150715 };
98c7e4935fSss150715 
99c7e4935fSss150715 /*
100c7e4935fSss150715  * DLPI information; see dlpi_info(3DLPI).
101c7e4935fSss150715  */
102c7e4935fSss150715 typedef struct {
103c7e4935fSss150715 	uint_t			di_opts;
104c7e4935fSss150715 	uint_t			di_max_sdu;
105c7e4935fSss150715 	uint_t			di_min_sdu;
106c7e4935fSss150715 	uint_t			di_state;
107c7e4935fSss150715 	uint_t			di_mactype;
108c7e4935fSss150715 	char			di_linkname[DLPI_LINKNAME_MAX];
109c7e4935fSss150715 	uchar_t			di_physaddr[DLPI_PHYSADDR_MAX];
110c7e4935fSss150715 	uchar_t			di_physaddrlen;
111c7e4935fSss150715 	uchar_t			di_bcastaddr[DLPI_PHYSADDR_MAX];
112c7e4935fSss150715 	uchar_t			di_bcastaddrlen;
113c7e4935fSss150715 	uint_t			di_sap;
114c7e4935fSss150715 	int			di_timeout;
115c7e4935fSss150715 	dl_qos_cl_sel1_t	di_qos_sel;
116c7e4935fSss150715 	dl_qos_cl_range1_t 	di_qos_range;
117c7e4935fSss150715 } dlpi_info_t;
118c7e4935fSss150715 
119c7e4935fSss150715 /*
120c7e4935fSss150715  * DLPI send information; see dlpi_send(3DLPI).
121c7e4935fSss150715  */
122c7e4935fSss150715 typedef struct {
123c7e4935fSss150715 	uint_t 		dsi_sap;
124c7e4935fSss150715 	dl_priority_t	dsi_prio;
125c7e4935fSss150715 } dlpi_sendinfo_t;
126c7e4935fSss150715 
127c7e4935fSss150715 /*
128c7e4935fSss150715  * Destination DLPI address type; see dlpi_recv(3DLPI).
129c7e4935fSss150715  */
130c7e4935fSss150715 typedef enum {
131c7e4935fSss150715 	DLPI_ADDRTYPE_UNICAST,
132c7e4935fSss150715 	DLPI_ADDRTYPE_GROUP
133c7e4935fSss150715 } dlpi_addrtype_t;
134c7e4935fSss150715 
135c7e4935fSss150715 /*
136c7e4935fSss150715  * DLPI receive information; see dlpi_recv(3DLPI).
137c7e4935fSss150715  */
138c7e4935fSss150715 typedef struct {
139c7e4935fSss150715 	uchar_t 	dri_destaddr[DLPI_PHYSADDR_MAX];
140c7e4935fSss150715 	uchar_t 	dri_destaddrlen;
1415494fa53Sss150715 	dlpi_addrtype_t	dri_destaddrtype;
142c7e4935fSss150715 	size_t  	dri_totmsglen;
143c7e4935fSss150715 } dlpi_recvinfo_t;
144c7e4935fSss150715 
1453ab45760Sss150715 /*
1463ab45760Sss150715  * DLPI notification, (DL_NOTIFY_IND) payload information;
1473ab45760Sss150715  * see dlpi_enabnotify(3DLPI).
1483ab45760Sss150715  */
1493ab45760Sss150715 typedef struct {
1503ab45760Sss150715 	uint_t  dni_note;
1513ab45760Sss150715 	union {
1523ab45760Sss150715 		uint_t  dniu_speed;
1533ab45760Sss150715 		uint_t  dniu_size;
1543ab45760Sss150715 		struct {
1553ab45760Sss150715 			uchar_t physaddr[DLPI_PHYSADDR_MAX];
1563ab45760Sss150715 			uchar_t physaddrlen;
1573ab45760Sss150715 		} dniu_addr;
1583ab45760Sss150715 	} dni_data;
1593ab45760Sss150715 } dlpi_notifyinfo_t;
1603ab45760Sss150715 
1613ab45760Sss150715 #define	dni_speed		dni_data.dniu_speed
1623ab45760Sss150715 #define	dni_size		dni_data.dniu_size
1633ab45760Sss150715 #define	dni_physaddr		dni_data.dniu_addr.physaddr
1643ab45760Sss150715 #define	dni_physaddrlen 	dni_data.dniu_addr.physaddrlen
1653ab45760Sss150715 
166c7e4935fSss150715 typedef struct __dlpi_handle *dlpi_handle_t;
167c7e4935fSss150715 
1683ab45760Sss150715 /*
1693ab45760Sss150715  * dlpi_notifyid_t refers to a registered notification. Its value should
1703ab45760Sss150715  * not be interpreted by the interface consumer.
1713ab45760Sss150715  */
1723ab45760Sss150715 typedef struct __dlpi_notifyid *dlpi_notifyid_t;
1733ab45760Sss150715 
1743ab45760Sss150715 /*
1753ab45760Sss150715  * Callback function invoked with arguments; see dlpi_enabnotify(3DLPI).
1763ab45760Sss150715  */
1773ab45760Sss150715 typedef void dlpi_notifyfunc_t(dlpi_handle_t, dlpi_notifyinfo_t *, void *);
1783ab45760Sss150715 
179c7e4935fSss150715 extern const char	*dlpi_mactype(uint_t);
180c7e4935fSss150715 extern const char 	*dlpi_strerror(int);
181c7e4935fSss150715 extern const char 	*dlpi_linkname(dlpi_handle_t);
182c7e4935fSss150715 
183d62bc4baSyz147064 typedef boolean_t dlpi_walkfunc_t(const char *, void *);
184d62bc4baSyz147064 
185d62bc4baSyz147064 extern void dlpi_walk(dlpi_walkfunc_t *, void *, uint_t);
186c7e4935fSss150715 extern int dlpi_open(const char *, dlpi_handle_t *, uint_t);
187c7e4935fSss150715 extern void dlpi_close(dlpi_handle_t);
188c7e4935fSss150715 extern int dlpi_info(dlpi_handle_t, dlpi_info_t *, uint_t);
189c7e4935fSss150715 extern int dlpi_bind(dlpi_handle_t, uint_t, uint_t *);
190c7e4935fSss150715 extern int dlpi_unbind(dlpi_handle_t);
191c7e4935fSss150715 extern int dlpi_enabmulti(dlpi_handle_t, const void *, size_t);
192c7e4935fSss150715 extern int dlpi_disabmulti(dlpi_handle_t, const void *, size_t);
193c7e4935fSss150715 extern int dlpi_promiscon(dlpi_handle_t, uint_t);
194c7e4935fSss150715 extern int dlpi_promiscoff(dlpi_handle_t, uint_t);
195c7e4935fSss150715 extern int dlpi_get_physaddr(dlpi_handle_t, uint_t, void *, size_t *);
196c7e4935fSss150715 extern int dlpi_set_physaddr(dlpi_handle_t, uint_t, const void *, size_t);
197c7e4935fSss150715 extern int dlpi_recv(dlpi_handle_t, void *, size_t *, void *, size_t *,
198c7e4935fSss150715     int, dlpi_recvinfo_t *);
199c7e4935fSss150715 extern int dlpi_send(dlpi_handle_t, const void *, size_t, const void *, size_t,
200c7e4935fSss150715     const dlpi_sendinfo_t *);
2013ab45760Sss150715 extern int dlpi_enabnotify(dlpi_handle_t, uint_t, dlpi_notifyfunc_t *,
2023ab45760Sss150715     void *arg, dlpi_notifyid_t *);
2033ab45760Sss150715 extern int dlpi_disabnotify(dlpi_handle_t, dlpi_notifyid_t, void **);
204c7e4935fSss150715 extern int dlpi_fd(dlpi_handle_t);
205c7e4935fSss150715 extern int dlpi_set_timeout(dlpi_handle_t, int);
206948f2876Sss150715 extern uint_t dlpi_arptype(uint_t);
207948f2876Sss150715 extern uint_t dlpi_iftype(uint_t);
208c7e4935fSss150715 
209c7e4935fSss150715 /*
210c7e4935fSss150715  * These are Consolidation Private interfaces and are subject to change.
211c7e4935fSss150715  */
212c7e4935fSss150715 extern int dlpi_parselink(const char *, char *, uint_t *);
213c7e4935fSss150715 extern int dlpi_makelink(char *, const char *, uint_t);
214c7e4935fSss150715 extern uint_t dlpi_style(dlpi_handle_t);
2157c478bd9Sstevel@tonic-gate 
2167c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
2177c478bd9Sstevel@tonic-gate }
2187c478bd9Sstevel@tonic-gate #endif
2197c478bd9Sstevel@tonic-gate 
2207c478bd9Sstevel@tonic-gate #endif /* _LIBDLPI_H */
221