xref: /titanic_54/usr/src/uts/common/sys/dlpi.h (revision 7c478bd95313f5f23a4c958a745db2134aa03244)
1*7c478bd9Sstevel@tonic-gate /*
2*7c478bd9Sstevel@tonic-gate  * CDDL HEADER START
3*7c478bd9Sstevel@tonic-gate  *
4*7c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*7c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*7c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*7c478bd9Sstevel@tonic-gate  * with the License.
8*7c478bd9Sstevel@tonic-gate  *
9*7c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*7c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*7c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*7c478bd9Sstevel@tonic-gate  * and limitations under the License.
13*7c478bd9Sstevel@tonic-gate  *
14*7c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*7c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*7c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*7c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*7c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*7c478bd9Sstevel@tonic-gate  *
20*7c478bd9Sstevel@tonic-gate  * CDDL HEADER END
21*7c478bd9Sstevel@tonic-gate  */
22*7c478bd9Sstevel@tonic-gate /*
23*7c478bd9Sstevel@tonic-gate  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24*7c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
25*7c478bd9Sstevel@tonic-gate  */
26*7c478bd9Sstevel@tonic-gate 
27*7c478bd9Sstevel@tonic-gate /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
28*7c478bd9Sstevel@tonic-gate /*	  All Rights Reserved	*/
29*7c478bd9Sstevel@tonic-gate 
30*7c478bd9Sstevel@tonic-gate 
31*7c478bd9Sstevel@tonic-gate /*
32*7c478bd9Sstevel@tonic-gate  * Data Link Provider Interface, Version 2.0
33*7c478bd9Sstevel@tonic-gate  * Refer to document: "STREAMS DLPI Spec", 800-6915-01.
34*7c478bd9Sstevel@tonic-gate  */
35*7c478bd9Sstevel@tonic-gate 
36*7c478bd9Sstevel@tonic-gate #ifndef	_SYS_DLPI_H
37*7c478bd9Sstevel@tonic-gate #define	_SYS_DLPI_H
38*7c478bd9Sstevel@tonic-gate 
39*7c478bd9Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.2	*/
40*7c478bd9Sstevel@tonic-gate 
41*7c478bd9Sstevel@tonic-gate #include <sys/types.h>
42*7c478bd9Sstevel@tonic-gate #include <sys/stream.h>
43*7c478bd9Sstevel@tonic-gate 
44*7c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
45*7c478bd9Sstevel@tonic-gate extern "C" {
46*7c478bd9Sstevel@tonic-gate #endif
47*7c478bd9Sstevel@tonic-gate 
48*7c478bd9Sstevel@tonic-gate /*
49*7c478bd9Sstevel@tonic-gate  * Sun additions.
50*7c478bd9Sstevel@tonic-gate  */
51*7c478bd9Sstevel@tonic-gate #define	DLIOC		('D' << 8)
52*7c478bd9Sstevel@tonic-gate #define	DLIOCRAW	(DLIOC|1)	/* M_DATA "raw" mode */
53*7c478bd9Sstevel@tonic-gate #define	DLIOCHDRINFO	(DLIOC|10)	/* IP fast-path */
54*7c478bd9Sstevel@tonic-gate 
55*7c478bd9Sstevel@tonic-gate #define	DL_IOC_HDR_INFO	DLIOCHDRINFO
56*7c478bd9Sstevel@tonic-gate 
57*7c478bd9Sstevel@tonic-gate /*
58*7c478bd9Sstevel@tonic-gate  * DLPI revision definition history
59*7c478bd9Sstevel@tonic-gate  */
60*7c478bd9Sstevel@tonic-gate #define	DL_CURRENT_VERSION	0x02	/* current version of dlpi */
61*7c478bd9Sstevel@tonic-gate #define	DL_VERSION_2		0x02	/* version of dlpi March 12, 1991 */
62*7c478bd9Sstevel@tonic-gate 
63*7c478bd9Sstevel@tonic-gate /*
64*7c478bd9Sstevel@tonic-gate  * Primitives for Local Management Services
65*7c478bd9Sstevel@tonic-gate  */
66*7c478bd9Sstevel@tonic-gate #define	DL_INFO_REQ		0x00	/* Information Req */
67*7c478bd9Sstevel@tonic-gate #define	DL_INFO_ACK		0x03	/* Information Ack */
68*7c478bd9Sstevel@tonic-gate #define	DL_ATTACH_REQ		0x0b	/* Attach a PPA */
69*7c478bd9Sstevel@tonic-gate #define	DL_DETACH_REQ		0x0c	/* Detach a PPA */
70*7c478bd9Sstevel@tonic-gate #define	DL_BIND_REQ		0x01	/* Bind dlsap address */
71*7c478bd9Sstevel@tonic-gate #define	DL_BIND_ACK		0x04	/* Dlsap address bound */
72*7c478bd9Sstevel@tonic-gate #define	DL_UNBIND_REQ		0x02	/* Unbind dlsap address */
73*7c478bd9Sstevel@tonic-gate #define	DL_OK_ACK		0x06	/* Success acknowledgment */
74*7c478bd9Sstevel@tonic-gate #define	DL_ERROR_ACK		0x05	/* Error acknowledgment */
75*7c478bd9Sstevel@tonic-gate #define	DL_SUBS_BIND_REQ	0x1b	/* Bind Subsequent DLSAP address */
76*7c478bd9Sstevel@tonic-gate #define	DL_SUBS_BIND_ACK	0x1c	/* Subsequent DLSAP address bound */
77*7c478bd9Sstevel@tonic-gate #define	DL_SUBS_UNBIND_REQ	0x15	/* Subsequent unbind */
78*7c478bd9Sstevel@tonic-gate #define	DL_ENABMULTI_REQ	0x1d	/* Enable multicast addresses */
79*7c478bd9Sstevel@tonic-gate #define	DL_DISABMULTI_REQ	0x1e	/* Disable multicast addresses */
80*7c478bd9Sstevel@tonic-gate #define	DL_PROMISCON_REQ	0x1f	/* Turn on promiscuous mode */
81*7c478bd9Sstevel@tonic-gate #define	DL_PROMISCOFF_REQ	0x20	/* Turn off promiscuous mode */
82*7c478bd9Sstevel@tonic-gate 
83*7c478bd9Sstevel@tonic-gate /*
84*7c478bd9Sstevel@tonic-gate  * Solaris specific local management
85*7c478bd9Sstevel@tonic-gate  */
86*7c478bd9Sstevel@tonic-gate #define	DL_NOTIFY_REQ		0x100	/* Enable notifications */
87*7c478bd9Sstevel@tonic-gate #define	DL_NOTIFY_ACK		0x101	/* Supported notifications */
88*7c478bd9Sstevel@tonic-gate #define	DL_NOTIFY_IND		0x102	/* Notification from provider */
89*7c478bd9Sstevel@tonic-gate #define	DL_AGGR_REQ		0x103	/* Enable link aggregation */
90*7c478bd9Sstevel@tonic-gate #define	DL_AGGR_IND		0x104	/* Result from link aggregation */
91*7c478bd9Sstevel@tonic-gate #define	DL_UNAGGR_REQ		0x105	/* Disable link aggregation */
92*7c478bd9Sstevel@tonic-gate #define	DL_CAPABILITY_REQ	0x110	/* Capability request */
93*7c478bd9Sstevel@tonic-gate #define	DL_CAPABILITY_ACK	0x111	/* Capability ack */
94*7c478bd9Sstevel@tonic-gate #define	DL_CONTROL_REQ		0x112	/* Device specific control request */
95*7c478bd9Sstevel@tonic-gate #define	DL_CONTROL_ACK		0x113	/* Device specific control ack */
96*7c478bd9Sstevel@tonic-gate #define	DL_PASSIVE_REQ		0x114	/* Allow access to aggregated link */
97*7c478bd9Sstevel@tonic-gate 
98*7c478bd9Sstevel@tonic-gate 
99*7c478bd9Sstevel@tonic-gate /*
100*7c478bd9Sstevel@tonic-gate  * Primitives used for Connectionless Service
101*7c478bd9Sstevel@tonic-gate  */
102*7c478bd9Sstevel@tonic-gate #define	DL_UNITDATA_REQ		0x07	/* datagram send request */
103*7c478bd9Sstevel@tonic-gate #define	DL_UNITDATA_IND		0x08	/* datagram receive indication */
104*7c478bd9Sstevel@tonic-gate #define	DL_UDERROR_IND		0x09	/* datagram error indication */
105*7c478bd9Sstevel@tonic-gate #define	DL_UDQOS_REQ		0x0a	/* set QOS for subsequent datagrams */
106*7c478bd9Sstevel@tonic-gate 
107*7c478bd9Sstevel@tonic-gate /*
108*7c478bd9Sstevel@tonic-gate  * Primitives used for Connection-Oriented Service
109*7c478bd9Sstevel@tonic-gate  */
110*7c478bd9Sstevel@tonic-gate #define	DL_CONNECT_REQ		0x0d	/* Connect request */
111*7c478bd9Sstevel@tonic-gate #define	DL_CONNECT_IND		0x0e	/* Incoming connect indication */
112*7c478bd9Sstevel@tonic-gate #define	DL_CONNECT_RES		0x0f	/* Accept previous connect indication */
113*7c478bd9Sstevel@tonic-gate #define	DL_CONNECT_CON		0x10	/* Connection established */
114*7c478bd9Sstevel@tonic-gate 
115*7c478bd9Sstevel@tonic-gate #define	DL_TOKEN_REQ		0x11	/* Passoff token request */
116*7c478bd9Sstevel@tonic-gate #define	DL_TOKEN_ACK		0x12	/* Passoff token ack */
117*7c478bd9Sstevel@tonic-gate 
118*7c478bd9Sstevel@tonic-gate #define	DL_DISCONNECT_REQ	0x13	/* Disconnect request */
119*7c478bd9Sstevel@tonic-gate #define	DL_DISCONNECT_IND	0x14	/* Disconnect indication */
120*7c478bd9Sstevel@tonic-gate 
121*7c478bd9Sstevel@tonic-gate #define	DL_RESET_REQ		0x17	/* Reset service request */
122*7c478bd9Sstevel@tonic-gate #define	DL_RESET_IND		0x18	/* Incoming reset indication */
123*7c478bd9Sstevel@tonic-gate #define	DL_RESET_RES		0x19	/* Complete reset processing */
124*7c478bd9Sstevel@tonic-gate #define	DL_RESET_CON		0x1a	/* Reset processing complete */
125*7c478bd9Sstevel@tonic-gate 
126*7c478bd9Sstevel@tonic-gate /*
127*7c478bd9Sstevel@tonic-gate  *  Primitives used for Acknowledged Connectionless Service
128*7c478bd9Sstevel@tonic-gate  */
129*7c478bd9Sstevel@tonic-gate 
130*7c478bd9Sstevel@tonic-gate #define	DL_DATA_ACK_REQ		0x21	/* data unit transmission request */
131*7c478bd9Sstevel@tonic-gate #define	DL_DATA_ACK_IND		0x22	/* Arrival of a command PDU */
132*7c478bd9Sstevel@tonic-gate #define	DL_DATA_ACK_STATUS_IND	0x23	/* Status indication of DATA_ACK_REQ */
133*7c478bd9Sstevel@tonic-gate #define	DL_REPLY_REQ		0x24	/* Request a DLSDU from the remote */
134*7c478bd9Sstevel@tonic-gate #define	DL_REPLY_IND		0x25	/* Arrival of a command PDU */
135*7c478bd9Sstevel@tonic-gate #define	DL_REPLY_STATUS_IND	0x26	/* Status indication of REPLY_REQ */
136*7c478bd9Sstevel@tonic-gate #define	DL_REPLY_UPDATE_REQ	0x27	/* Hold a DLSDU for transmission */
137*7c478bd9Sstevel@tonic-gate #define	DL_REPLY_UPDATE_STATUS_IND	0x28 /* Status of REPLY_UPDATE req */
138*7c478bd9Sstevel@tonic-gate 
139*7c478bd9Sstevel@tonic-gate /*
140*7c478bd9Sstevel@tonic-gate  * Primitives used for XID and TEST operations
141*7c478bd9Sstevel@tonic-gate  */
142*7c478bd9Sstevel@tonic-gate 
143*7c478bd9Sstevel@tonic-gate #define	DL_XID_REQ	0x29		/* Request to send an XID PDU */
144*7c478bd9Sstevel@tonic-gate #define	DL_XID_IND	0x2a		/* Arrival of an XID PDU */
145*7c478bd9Sstevel@tonic-gate #define	DL_XID_RES	0x2b		/* request to send a response XID PDU */
146*7c478bd9Sstevel@tonic-gate #define	DL_XID_CON	0x2c		/* Arrival of a response XID PDU */
147*7c478bd9Sstevel@tonic-gate #define	DL_TEST_REQ	0x2d		/* TEST command request */
148*7c478bd9Sstevel@tonic-gate #define	DL_TEST_IND	0x2e		/* TEST response indication */
149*7c478bd9Sstevel@tonic-gate #define	DL_TEST_RES	0x2f		/* TEST response */
150*7c478bd9Sstevel@tonic-gate #define	DL_TEST_CON	0x30		/* TEST Confirmation */
151*7c478bd9Sstevel@tonic-gate 
152*7c478bd9Sstevel@tonic-gate /*
153*7c478bd9Sstevel@tonic-gate  * Primitives to get and set the physical address, and to get
154*7c478bd9Sstevel@tonic-gate  * Statistics
155*7c478bd9Sstevel@tonic-gate  */
156*7c478bd9Sstevel@tonic-gate 
157*7c478bd9Sstevel@tonic-gate #define	DL_PHYS_ADDR_REQ	0x31	/* Request to get physical addr */
158*7c478bd9Sstevel@tonic-gate #define	DL_PHYS_ADDR_ACK	0x32	/* Return physical addr */
159*7c478bd9Sstevel@tonic-gate #define	DL_SET_PHYS_ADDR_REQ	0x33	/* set physical addr */
160*7c478bd9Sstevel@tonic-gate #define	DL_GET_STATISTICS_REQ	0x34	/* Request to get statistics */
161*7c478bd9Sstevel@tonic-gate #define	DL_GET_STATISTICS_ACK	0x35	/* Return statistics */
162*7c478bd9Sstevel@tonic-gate 
163*7c478bd9Sstevel@tonic-gate /*
164*7c478bd9Sstevel@tonic-gate  * Invalid primitive
165*7c478bd9Sstevel@tonic-gate  */
166*7c478bd9Sstevel@tonic-gate 
167*7c478bd9Sstevel@tonic-gate #define	DL_PRIM_INVAL		0xffff	/* Invalid DL primitive value */
168*7c478bd9Sstevel@tonic-gate 
169*7c478bd9Sstevel@tonic-gate /*
170*7c478bd9Sstevel@tonic-gate  * DLPI interface states
171*7c478bd9Sstevel@tonic-gate  */
172*7c478bd9Sstevel@tonic-gate #define	DL_UNATTACHED		0x04	/* PPA not attached */
173*7c478bd9Sstevel@tonic-gate #define	DL_ATTACH_PENDING	0x05	/* Waiting ack of DL_ATTACH_REQ */
174*7c478bd9Sstevel@tonic-gate #define	DL_DETACH_PENDING	0x06	/* Waiting ack of DL_DETACH_REQ */
175*7c478bd9Sstevel@tonic-gate #define	DL_UNBOUND		0x00	/* PPA attached */
176*7c478bd9Sstevel@tonic-gate #define	DL_BIND_PENDING		0x01	/* Waiting ack of DL_BIND_REQ */
177*7c478bd9Sstevel@tonic-gate #define	DL_UNBIND_PENDING	0x02	/* Waiting ack of DL_UNBIND_REQ */
178*7c478bd9Sstevel@tonic-gate #define	DL_IDLE			0x03	/* dlsap bound, awaiting use */
179*7c478bd9Sstevel@tonic-gate #define	DL_UDQOS_PENDING	0x07	/* Waiting ack of DL_UDQOS_REQ */
180*7c478bd9Sstevel@tonic-gate #define	DL_OUTCON_PENDING	0x08	/* awaiting DL_CONN_CON */
181*7c478bd9Sstevel@tonic-gate #define	DL_INCON_PENDING	0x09	/* awaiting DL_CONN_RES */
182*7c478bd9Sstevel@tonic-gate #define	DL_CONN_RES_PENDING	0x0a	/* Waiting ack of DL_CONNECT_RES */
183*7c478bd9Sstevel@tonic-gate #define	DL_DATAXFER		0x0b	/* connection-oriented data transfer */
184*7c478bd9Sstevel@tonic-gate #define	DL_USER_RESET_PENDING	0x0c	/* awaiting DL_RESET_CON */
185*7c478bd9Sstevel@tonic-gate #define	DL_PROV_RESET_PENDING	0x0d	/* awaiting DL_RESET_RES */
186*7c478bd9Sstevel@tonic-gate #define	DL_RESET_RES_PENDING	0x0e	/* Waiting ack of DL_RESET_RES */
187*7c478bd9Sstevel@tonic-gate #define	DL_DISCON8_PENDING	0x0f	/* Waiting ack of DL_DISC_REQ */
188*7c478bd9Sstevel@tonic-gate #define	DL_DISCON9_PENDING	0x10	/* Waiting ack of DL_DISC_REQ */
189*7c478bd9Sstevel@tonic-gate #define	DL_DISCON11_PENDING	0x11	/* Waiting ack of DL_DISC_REQ */
190*7c478bd9Sstevel@tonic-gate #define	DL_DISCON12_PENDING	0x12	/* Waiting ack of DL_DISC_REQ */
191*7c478bd9Sstevel@tonic-gate #define	DL_DISCON13_PENDING	0x13	/* Waiting ack of DL_DISC_REQ */
192*7c478bd9Sstevel@tonic-gate #define	DL_SUBS_BIND_PND	0x14	/* Waiting ack of DL_SUBS_BIND_REQ */
193*7c478bd9Sstevel@tonic-gate #define	DL_SUBS_UNBIND_PND	0x15	/* Waiting ack of DL_SUBS_UNBIND_REQ */
194*7c478bd9Sstevel@tonic-gate 
195*7c478bd9Sstevel@tonic-gate 
196*7c478bd9Sstevel@tonic-gate /*
197*7c478bd9Sstevel@tonic-gate  * DL_ERROR_ACK error return values
198*7c478bd9Sstevel@tonic-gate  */
199*7c478bd9Sstevel@tonic-gate #define	DL_ACCESS	0x02	/* Improper permissions for request */
200*7c478bd9Sstevel@tonic-gate #define	DL_BADADDR	0x01	/* DLSAP addr in improper format or invalid */
201*7c478bd9Sstevel@tonic-gate #define	DL_BADCORR	0x05	/* Seq number not from outstand DL_CONN_IND */
202*7c478bd9Sstevel@tonic-gate #define	DL_BADDATA	0x06	/* User data exceeded provider limit */
203*7c478bd9Sstevel@tonic-gate #define	DL_BADPPA	0x08	/* Specified PPA was invalid */
204*7c478bd9Sstevel@tonic-gate #define	DL_BADPRIM	0x09	/* Primitive received not known by provider */
205*7c478bd9Sstevel@tonic-gate #define	DL_BADQOSPARAM	0x0a	/* QOS parameters contained invalid values */
206*7c478bd9Sstevel@tonic-gate #define	DL_BADQOSTYPE	0x0b	/* QOS structure type is unknown/unsupported */
207*7c478bd9Sstevel@tonic-gate #define	DL_BADSAP	0x00	/* Bad LSAP selector */
208*7c478bd9Sstevel@tonic-gate #define	DL_BADTOKEN	0x0c	/* Token used not an active stream */
209*7c478bd9Sstevel@tonic-gate #define	DL_BOUND	0x0d	/* Attempted second bind with dl_max_conind */
210*7c478bd9Sstevel@tonic-gate #define	DL_INITFAILED	0x0e	/* Physical Link initialization failed */
211*7c478bd9Sstevel@tonic-gate #define	DL_NOADDR	0x0f	/* Provider couldn't allocate alt. address */
212*7c478bd9Sstevel@tonic-gate #define	DL_NOTINIT	0x10	/* Physical Link not initialized */
213*7c478bd9Sstevel@tonic-gate #define	DL_OUTSTATE	0x03	/* Primitive issued in improper state */
214*7c478bd9Sstevel@tonic-gate #define	DL_SYSERR	0x04	/* UNIX system error occurred */
215*7c478bd9Sstevel@tonic-gate #define	DL_UNSUPPORTED	0x07	/* Requested serv. not supplied by provider */
216*7c478bd9Sstevel@tonic-gate #define	DL_UNDELIVERABLE 0x11	/* Previous data unit could not be delivered */
217*7c478bd9Sstevel@tonic-gate #define	DL_NOTSUPPORTED  0x12	/* Primitive is known but not supported */
218*7c478bd9Sstevel@tonic-gate #define	DL_TOOMANY	0x13	/* limit exceeded	*/
219*7c478bd9Sstevel@tonic-gate #define	DL_NOTENAB	0x14	/* Promiscuous mode not enabled */
220*7c478bd9Sstevel@tonic-gate #define	DL_BUSY		0x15	/* Other streams for PPA in post-attached */
221*7c478bd9Sstevel@tonic-gate 
222*7c478bd9Sstevel@tonic-gate #define	DL_NOAUTO	0x16	/* Automatic handling XID&TEST not supported */
223*7c478bd9Sstevel@tonic-gate #define	DL_NOXIDAUTO	0x17    /* Automatic handling of XID not supported */
224*7c478bd9Sstevel@tonic-gate #define	DL_NOTESTAUTO	0x18	/* Automatic handling of TEST not supported */
225*7c478bd9Sstevel@tonic-gate #define	DL_XIDAUTO	0x19	/* Automatic handling of XID response */
226*7c478bd9Sstevel@tonic-gate #define	DL_TESTAUTO	0x1a	/* AUtomatic handling of TEST response */
227*7c478bd9Sstevel@tonic-gate #define	DL_PENDING	0x1b	/* pending outstanding connect indications */
228*7c478bd9Sstevel@tonic-gate 
229*7c478bd9Sstevel@tonic-gate /*
230*7c478bd9Sstevel@tonic-gate  * DLPI media types supported
231*7c478bd9Sstevel@tonic-gate  */
232*7c478bd9Sstevel@tonic-gate #define	DL_CSMACD	0x0	/* IEEE 802.3 CSMA/CD network */
233*7c478bd9Sstevel@tonic-gate #define	DL_TPB		0x1	/* IEEE 802.4 Token Passing Bus */
234*7c478bd9Sstevel@tonic-gate #define	DL_TPR		0x2	/* IEEE 802.5 Token Passing Ring */
235*7c478bd9Sstevel@tonic-gate #define	DL_METRO	0x3	/* IEEE 802.6 Metro Net */
236*7c478bd9Sstevel@tonic-gate #define	DL_ETHER	0x4	/* Ethernet Bus */
237*7c478bd9Sstevel@tonic-gate #define	DL_HDLC		0x05	/* ISO HDLC protocol support */
238*7c478bd9Sstevel@tonic-gate #define	DL_CHAR		0x06	/* Character Synchronous protocol support */
239*7c478bd9Sstevel@tonic-gate #define	DL_CTCA		0x07	/* IBM Channel-to-Channel Adapter */
240*7c478bd9Sstevel@tonic-gate #define	DL_FDDI		0x08	/* Fiber Distributed data interface */
241*7c478bd9Sstevel@tonic-gate #define	DL_FC		0x10	/* Fibre Channel interface */
242*7c478bd9Sstevel@tonic-gate #define	DL_ATM		0x11	/* ATM */
243*7c478bd9Sstevel@tonic-gate #define	DL_IPATM	0x12	/* ATM Classical IP interface */
244*7c478bd9Sstevel@tonic-gate #define	DL_X25		0x13	/* X.25 LAPB interface */
245*7c478bd9Sstevel@tonic-gate #define	DL_ISDN		0x14	/* ISDN interface */
246*7c478bd9Sstevel@tonic-gate #define	DL_HIPPI	0x15	/* HIPPI interface */
247*7c478bd9Sstevel@tonic-gate #define	DL_100VG	0x16	/* 100 Based VG Ethernet */
248*7c478bd9Sstevel@tonic-gate #define	DL_100VGTPR	0x17	/* 100 Based VG Token Ring */
249*7c478bd9Sstevel@tonic-gate #define	DL_ETH_CSMA	0x18	/* ISO 8802/3 and Ethernet */
250*7c478bd9Sstevel@tonic-gate #define	DL_100BT	0x19	/* 100 Base T */
251*7c478bd9Sstevel@tonic-gate #define	DL_IB		0x1a	/* Infiniband */
252*7c478bd9Sstevel@tonic-gate #define	DL_FRAME	0x0a	/* Frame Relay LAPF */
253*7c478bd9Sstevel@tonic-gate #define	DL_MPFRAME	0x0b	/* Multi-protocol over Frame Relay */
254*7c478bd9Sstevel@tonic-gate #define	DL_ASYNC	0x0c	/* Character Asynchronous Protocol */
255*7c478bd9Sstevel@tonic-gate #define	DL_IPX25	0x0d	/* X.25 Classical IP interface */
256*7c478bd9Sstevel@tonic-gate #define	DL_LOOP		0x0e	/* software loopback */
257*7c478bd9Sstevel@tonic-gate #define	DL_OTHER	0x09	/* Any other medium not listed above */
258*7c478bd9Sstevel@tonic-gate /*
259*7c478bd9Sstevel@tonic-gate  * Private media types.  These must be above the value 0x80000000 as
260*7c478bd9Sstevel@tonic-gate  * stated in the DLPI specification.
261*7c478bd9Sstevel@tonic-gate  */
262*7c478bd9Sstevel@tonic-gate #define	DL_IPV4		0x80000001ul	/* IPv4 Tunnel Link */
263*7c478bd9Sstevel@tonic-gate #define	DL_IPV6		0x80000002ul	/* IPv6 Tunnel Link */
264*7c478bd9Sstevel@tonic-gate #define	SUNW_DL_VNI	0x80000003ul	/* Virtual network interface */
265*7c478bd9Sstevel@tonic-gate 
266*7c478bd9Sstevel@tonic-gate /*
267*7c478bd9Sstevel@tonic-gate  * DLPI provider service supported.
268*7c478bd9Sstevel@tonic-gate  * These must be allowed to be bitwise-OR for dl_service_mode in
269*7c478bd9Sstevel@tonic-gate  * DL_INFO_ACK.
270*7c478bd9Sstevel@tonic-gate  */
271*7c478bd9Sstevel@tonic-gate #define	DL_CODLS	0x01	/* support connection-oriented service */
272*7c478bd9Sstevel@tonic-gate #define	DL_CLDLS	0x02	/* support connectionless data link service */
273*7c478bd9Sstevel@tonic-gate #define	DL_ACLDLS	0x04	/* support acknowledged connectionless serv. */
274*7c478bd9Sstevel@tonic-gate 
275*7c478bd9Sstevel@tonic-gate 
276*7c478bd9Sstevel@tonic-gate /*
277*7c478bd9Sstevel@tonic-gate  * DLPI provider style.
278*7c478bd9Sstevel@tonic-gate  * The DLPI provider style which determines whether a provider
279*7c478bd9Sstevel@tonic-gate  * requires a DL_ATTACH_REQ to inform the provider which PPA
280*7c478bd9Sstevel@tonic-gate  * user messages should be sent/received on.
281*7c478bd9Sstevel@tonic-gate  */
282*7c478bd9Sstevel@tonic-gate #define	DL_STYLE1	0x0500	/* PPA is implicitly bound by open(2) */
283*7c478bd9Sstevel@tonic-gate #define	DL_STYLE2	0x0501	/* PPA must be expl. bound via DL_ATTACH_REQ */
284*7c478bd9Sstevel@tonic-gate 
285*7c478bd9Sstevel@tonic-gate 
286*7c478bd9Sstevel@tonic-gate /*
287*7c478bd9Sstevel@tonic-gate  * DLPI Originator for Disconnect and Resets
288*7c478bd9Sstevel@tonic-gate  */
289*7c478bd9Sstevel@tonic-gate #define	DL_PROVIDER	0x0700
290*7c478bd9Sstevel@tonic-gate #define	DL_USER		0x0701
291*7c478bd9Sstevel@tonic-gate 
292*7c478bd9Sstevel@tonic-gate /*
293*7c478bd9Sstevel@tonic-gate  * DLPI Disconnect Reasons
294*7c478bd9Sstevel@tonic-gate  */
295*7c478bd9Sstevel@tonic-gate #define	DL_CONREJ_DEST_UNKNOWN			0x0800
296*7c478bd9Sstevel@tonic-gate #define	DL_CONREJ_DEST_UNREACH_PERMANENT	0x0801
297*7c478bd9Sstevel@tonic-gate #define	DL_CONREJ_DEST_UNREACH_TRANSIENT	0x0802
298*7c478bd9Sstevel@tonic-gate #define	DL_CONREJ_QOS_UNAVAIL_PERMANENT		0x0803
299*7c478bd9Sstevel@tonic-gate #define	DL_CONREJ_QOS_UNAVAIL_TRANSIENT		0x0804
300*7c478bd9Sstevel@tonic-gate #define	DL_CONREJ_PERMANENT_COND		0x0805
301*7c478bd9Sstevel@tonic-gate #define	DL_CONREJ_TRANSIENT_COND		0x0806
302*7c478bd9Sstevel@tonic-gate #define	DL_DISC_ABNORMAL_CONDITION		0x0807
303*7c478bd9Sstevel@tonic-gate #define	DL_DISC_NORMAL_CONDITION		0x0808
304*7c478bd9Sstevel@tonic-gate #define	DL_DISC_PERMANENT_CONDITION		0x0809
305*7c478bd9Sstevel@tonic-gate #define	DL_DISC_TRANSIENT_CONDITION		0x080a
306*7c478bd9Sstevel@tonic-gate #define	DL_DISC_UNSPECIFIED			0x080b
307*7c478bd9Sstevel@tonic-gate 
308*7c478bd9Sstevel@tonic-gate /*
309*7c478bd9Sstevel@tonic-gate  * DLPI Reset Reasons
310*7c478bd9Sstevel@tonic-gate  */
311*7c478bd9Sstevel@tonic-gate #define	DL_RESET_FLOW_CONTROL	0x0900
312*7c478bd9Sstevel@tonic-gate #define	DL_RESET_LINK_ERROR	0x0901
313*7c478bd9Sstevel@tonic-gate #define	DL_RESET_RESYNCH	0x0902
314*7c478bd9Sstevel@tonic-gate 
315*7c478bd9Sstevel@tonic-gate /*
316*7c478bd9Sstevel@tonic-gate  * DLPI status values for acknowledged connectionless data transfer
317*7c478bd9Sstevel@tonic-gate  */
318*7c478bd9Sstevel@tonic-gate #define	DL_CMD_MASK	0x0f	/* mask for command portion of status */
319*7c478bd9Sstevel@tonic-gate #define	DL_CMD_OK	0x00	/* Command Accepted */
320*7c478bd9Sstevel@tonic-gate #define	DL_CMD_RS	0x01	/* Unimplemented or inactivated service */
321*7c478bd9Sstevel@tonic-gate #define	DL_CMD_UE	0x05	/* Data Link User interface error */
322*7c478bd9Sstevel@tonic-gate #define	DL_CMD_PE	0x06	/* Protocol error */
323*7c478bd9Sstevel@tonic-gate #define	DL_CMD_IP	0x07	/* Permanent implementation dependent error */
324*7c478bd9Sstevel@tonic-gate #define	DL_CMD_UN	0x09	/* Resources temporarily unavailable */
325*7c478bd9Sstevel@tonic-gate #define	DL_CMD_IT	0x0f	/* Temporary implementation dependent error */
326*7c478bd9Sstevel@tonic-gate #define	DL_RSP_MASK	0xf0	/* mask for response portion of status */
327*7c478bd9Sstevel@tonic-gate #define	DL_RSP_OK	0x00	/* Response DLSDU present */
328*7c478bd9Sstevel@tonic-gate #define	DL_RSP_RS	0x10	/* Unimplemented or inactivated service */
329*7c478bd9Sstevel@tonic-gate #define	DL_RSP_NE	0x30	/* Response DLSDU never submitted */
330*7c478bd9Sstevel@tonic-gate #define	DL_RSP_NR	0x40	/* Response DLSDU not requested */
331*7c478bd9Sstevel@tonic-gate #define	DL_RSP_UE	0x50	/* Data Link User interface error */
332*7c478bd9Sstevel@tonic-gate #define	DL_RSP_IP	0x70	/* Permanent implementation dependent error */
333*7c478bd9Sstevel@tonic-gate #define	DL_RSP_UN	0x90	/* Resources temporarily unavailable */
334*7c478bd9Sstevel@tonic-gate #define	DL_RSP_IT	0xf0	/* Temporary implementation dependent error */
335*7c478bd9Sstevel@tonic-gate 
336*7c478bd9Sstevel@tonic-gate /*
337*7c478bd9Sstevel@tonic-gate  * Service Class values for acknowledged connectionless data transfer
338*7c478bd9Sstevel@tonic-gate  */
339*7c478bd9Sstevel@tonic-gate #define	DL_RQST_RSP	0x01	/* Use acknowledge capability in MAC sublayer */
340*7c478bd9Sstevel@tonic-gate #define	DL_RQST_NORSP	0x02	/* No acknowledgement service requested */
341*7c478bd9Sstevel@tonic-gate 
342*7c478bd9Sstevel@tonic-gate /*
343*7c478bd9Sstevel@tonic-gate  * DLPI address type definition
344*7c478bd9Sstevel@tonic-gate  */
345*7c478bd9Sstevel@tonic-gate #define	DL_FACT_PHYS_ADDR	0x01	/* factory physical address */
346*7c478bd9Sstevel@tonic-gate #define	DL_CURR_PHYS_ADDR	0x02	/* current physical address */
347*7c478bd9Sstevel@tonic-gate #define	DL_IPV6_TOKEN		0x03	/* IPv6 interface token */
348*7c478bd9Sstevel@tonic-gate #define	DL_IPV6_LINK_LAYER_ADDR	0x04	/* Neighbor Discovery format */
349*7c478bd9Sstevel@tonic-gate 
350*7c478bd9Sstevel@tonic-gate /*
351*7c478bd9Sstevel@tonic-gate  * DLPI flag definitions
352*7c478bd9Sstevel@tonic-gate  */
353*7c478bd9Sstevel@tonic-gate #define	DL_POLL_FINAL	0x01		/* indicates poll/final bit set */
354*7c478bd9Sstevel@tonic-gate 
355*7c478bd9Sstevel@tonic-gate /*
356*7c478bd9Sstevel@tonic-gate  *	XID and TEST responses supported by the provider
357*7c478bd9Sstevel@tonic-gate  */
358*7c478bd9Sstevel@tonic-gate #define	DL_AUTO_XID	0x01		/* provider will respond to XID */
359*7c478bd9Sstevel@tonic-gate #define	DL_AUTO_TEST	0x02		/* provider will respond to TEST */
360*7c478bd9Sstevel@tonic-gate 
361*7c478bd9Sstevel@tonic-gate /*
362*7c478bd9Sstevel@tonic-gate  * Subsequent bind type
363*7c478bd9Sstevel@tonic-gate  */
364*7c478bd9Sstevel@tonic-gate #define	DL_PEER_BIND	0x01		/* subsequent bind on a peer addr */
365*7c478bd9Sstevel@tonic-gate #define	DL_HIERARCHICAL_BIND	0x02	/* subs_bind on a hierarchical addr */
366*7c478bd9Sstevel@tonic-gate 
367*7c478bd9Sstevel@tonic-gate /*
368*7c478bd9Sstevel@tonic-gate  * DLPI promiscuous mode definitions
369*7c478bd9Sstevel@tonic-gate  */
370*7c478bd9Sstevel@tonic-gate #define	DL_PROMISC_PHYS		0x01	/* promiscuous mode at phys level */
371*7c478bd9Sstevel@tonic-gate #define	DL_PROMISC_SAP		0x02	/* promiscous mode at sap level */
372*7c478bd9Sstevel@tonic-gate #define	DL_PROMISC_MULTI	0x03	/* promiscuous mode for multicast */
373*7c478bd9Sstevel@tonic-gate 
374*7c478bd9Sstevel@tonic-gate /*
375*7c478bd9Sstevel@tonic-gate  * DLPI notification codes for DL_NOTIFY primitives.
376*7c478bd9Sstevel@tonic-gate  * Bit-wise distinct since DL_NOTIFY_REQ and DL_NOTIFY_ACK carry multiple
377*7c478bd9Sstevel@tonic-gate  * notification codes.
378*7c478bd9Sstevel@tonic-gate  */
379*7c478bd9Sstevel@tonic-gate #define	DL_NOTE_PHYS_ADDR	0x0001	/* Physical address change */
380*7c478bd9Sstevel@tonic-gate #define	DL_NOTE_PROMISC_ON_PHYS	0x0002	/* DL_PROMISC_PHYS set on ppa */
381*7c478bd9Sstevel@tonic-gate #define	DL_NOTE_PROMISC_OFF_PHYS 0x0004	/* DL_PROMISC_PHYS cleared on ppa */
382*7c478bd9Sstevel@tonic-gate #define	DL_NOTE_LINK_DOWN	0x0008	/* Link down */
383*7c478bd9Sstevel@tonic-gate #define	DL_NOTE_LINK_UP		0x0010	/* Link up */
384*7c478bd9Sstevel@tonic-gate #define	DL_NOTE_AGGR_AVAIL	0x0020	/* Link aggregation is available */
385*7c478bd9Sstevel@tonic-gate #define	DL_NOTE_AGGR_UNAVAIL	0x0040	/* Link aggregation is not available */
386*7c478bd9Sstevel@tonic-gate #define	DL_NOTE_SDU_SIZE	0x0080	/* New SDU size, global or per addr */
387*7c478bd9Sstevel@tonic-gate #define	DL_NOTE_SPEED		0x0100	/* Approximate link speed */
388*7c478bd9Sstevel@tonic-gate #define	DL_NOTE_FASTPATH_FLUSH	0x0200	/* Fast Path info changes */
389*7c478bd9Sstevel@tonic-gate #define	DL_NOTE_CAPAB_RENEG	0x0400	/* Initiate capability renegotiation */
390*7c478bd9Sstevel@tonic-gate 
391*7c478bd9Sstevel@tonic-gate /*
392*7c478bd9Sstevel@tonic-gate  * DLPI Quality Of Service definition for use in QOS structure definitions.
393*7c478bd9Sstevel@tonic-gate  * The QOS structures are used in connection establishment, DL_INFO_ACK,
394*7c478bd9Sstevel@tonic-gate  * and setting connectionless QOS values.
395*7c478bd9Sstevel@tonic-gate  */
396*7c478bd9Sstevel@tonic-gate 
397*7c478bd9Sstevel@tonic-gate /*
398*7c478bd9Sstevel@tonic-gate  * Throughput
399*7c478bd9Sstevel@tonic-gate  *
400*7c478bd9Sstevel@tonic-gate  * This parameter is specified for both directions.
401*7c478bd9Sstevel@tonic-gate  */
402*7c478bd9Sstevel@tonic-gate typedef struct {
403*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_target_value;	/* bits/second desired */
404*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_accept_value;	/* min. ok bits/second */
405*7c478bd9Sstevel@tonic-gate } dl_through_t;
406*7c478bd9Sstevel@tonic-gate 
407*7c478bd9Sstevel@tonic-gate /*
408*7c478bd9Sstevel@tonic-gate  * transit delay specification
409*7c478bd9Sstevel@tonic-gate  *
410*7c478bd9Sstevel@tonic-gate  * This parameter is specified for both directions.
411*7c478bd9Sstevel@tonic-gate  * expressed in milliseconds assuming a DLSDU size of 128 octets.
412*7c478bd9Sstevel@tonic-gate  * The scaling of the value to the current DLSDU size is provider dependent.
413*7c478bd9Sstevel@tonic-gate  */
414*7c478bd9Sstevel@tonic-gate typedef struct {
415*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_target_value;	/* desired value of service */
416*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_accept_value;	/* min. ok value of service */
417*7c478bd9Sstevel@tonic-gate } dl_transdelay_t;
418*7c478bd9Sstevel@tonic-gate 
419*7c478bd9Sstevel@tonic-gate /*
420*7c478bd9Sstevel@tonic-gate  * priority specification
421*7c478bd9Sstevel@tonic-gate  * priority range is 0-100, with 0 being highest value.
422*7c478bd9Sstevel@tonic-gate  */
423*7c478bd9Sstevel@tonic-gate typedef struct {
424*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_min;
425*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_max;
426*7c478bd9Sstevel@tonic-gate } dl_priority_t;
427*7c478bd9Sstevel@tonic-gate 
428*7c478bd9Sstevel@tonic-gate 
429*7c478bd9Sstevel@tonic-gate /*
430*7c478bd9Sstevel@tonic-gate  * protection specification
431*7c478bd9Sstevel@tonic-gate  *
432*7c478bd9Sstevel@tonic-gate  */
433*7c478bd9Sstevel@tonic-gate #define	DL_NONE			0x0B01	/* no protection supplied */
434*7c478bd9Sstevel@tonic-gate #define	DL_MONITOR		0x0B02	/* prot. from passive monit. */
435*7c478bd9Sstevel@tonic-gate #define	DL_MAXIMUM		0x0B03	/* prot. from modification, replay, */
436*7c478bd9Sstevel@tonic-gate 					/* addition, or deletion */
437*7c478bd9Sstevel@tonic-gate 
438*7c478bd9Sstevel@tonic-gate typedef struct {
439*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_min;
440*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_max;
441*7c478bd9Sstevel@tonic-gate } dl_protect_t;
442*7c478bd9Sstevel@tonic-gate 
443*7c478bd9Sstevel@tonic-gate 
444*7c478bd9Sstevel@tonic-gate /*
445*7c478bd9Sstevel@tonic-gate  * Resilience specification
446*7c478bd9Sstevel@tonic-gate  * probabilities are scaled by a factor of 10,000 with a time interval
447*7c478bd9Sstevel@tonic-gate  * of 10,000 seconds.
448*7c478bd9Sstevel@tonic-gate  */
449*7c478bd9Sstevel@tonic-gate typedef struct {
450*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_disc_prob;	/* prob. of provider init DISC */
451*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_reset_prob;	/* prob. of provider init RESET */
452*7c478bd9Sstevel@tonic-gate } dl_resilience_t;
453*7c478bd9Sstevel@tonic-gate 
454*7c478bd9Sstevel@tonic-gate 
455*7c478bd9Sstevel@tonic-gate /*
456*7c478bd9Sstevel@tonic-gate  * QOS type definition to be used for negotiation with the
457*7c478bd9Sstevel@tonic-gate  * remote end of a connection, or a connectionless unitdata request.
458*7c478bd9Sstevel@tonic-gate  * There are two type definitions to handle the negotiation
459*7c478bd9Sstevel@tonic-gate  * process at connection establishment. The typedef dl_qos_range_t
460*7c478bd9Sstevel@tonic-gate  * is used to present a range for parameters. This is used
461*7c478bd9Sstevel@tonic-gate  * in the DL_CONNECT_REQ and DL_CONNECT_IND messages. The typedef
462*7c478bd9Sstevel@tonic-gate  * dl_qos_sel_t is used to select a specific value for the QOS
463*7c478bd9Sstevel@tonic-gate  * parameters. This is used in the DL_CONNECT_RES, DL_CONNECT_CON,
464*7c478bd9Sstevel@tonic-gate  * and DL_INFO_ACK messages to define the selected QOS parameters
465*7c478bd9Sstevel@tonic-gate  * for a connection.
466*7c478bd9Sstevel@tonic-gate  *
467*7c478bd9Sstevel@tonic-gate  * NOTE
468*7c478bd9Sstevel@tonic-gate  *	A DataLink provider which has unknown values for any of the fields
469*7c478bd9Sstevel@tonic-gate  *	will use a value of DL_UNKNOWN for all values in the fields.
470*7c478bd9Sstevel@tonic-gate  *
471*7c478bd9Sstevel@tonic-gate  * NOTE
472*7c478bd9Sstevel@tonic-gate  *	A QOS parameter value of DL_QOS_DONT_CARE informs the DLS
473*7c478bd9Sstevel@tonic-gate  *	provider the user requesting this value doesn't care
474*7c478bd9Sstevel@tonic-gate  *	what the QOS parameter is set to. This value becomes the
475*7c478bd9Sstevel@tonic-gate  *	least possible value in the range of QOS parameters.
476*7c478bd9Sstevel@tonic-gate  *	The order of the QOS parameter range is then:
477*7c478bd9Sstevel@tonic-gate  *
478*7c478bd9Sstevel@tonic-gate  *		DL_QOS_DONT_CARE < 0 < MAXIMUM QOS VALUE
479*7c478bd9Sstevel@tonic-gate  */
480*7c478bd9Sstevel@tonic-gate #define	DL_UNKNOWN		-1
481*7c478bd9Sstevel@tonic-gate #define	DL_QOS_DONT_CARE	-2
482*7c478bd9Sstevel@tonic-gate 
483*7c478bd9Sstevel@tonic-gate /*
484*7c478bd9Sstevel@tonic-gate  * Every QOS structure has the first 4 bytes containing a type
485*7c478bd9Sstevel@tonic-gate  * field, denoting the definition of the rest of the structure.
486*7c478bd9Sstevel@tonic-gate  * This is used in the same manner has the dl_primitive variable
487*7c478bd9Sstevel@tonic-gate  * is in messages.
488*7c478bd9Sstevel@tonic-gate  *
489*7c478bd9Sstevel@tonic-gate  * The following list is the defined QOS structure type values and structures.
490*7c478bd9Sstevel@tonic-gate  */
491*7c478bd9Sstevel@tonic-gate #define	DL_QOS_CO_RANGE1	0x0101	/* CO QOS range struct. */
492*7c478bd9Sstevel@tonic-gate #define	DL_QOS_CO_SEL1		0x0102	/* CO QOS selection structure */
493*7c478bd9Sstevel@tonic-gate #define	DL_QOS_CL_RANGE1	0x0103	/* CL QOS range struct. */
494*7c478bd9Sstevel@tonic-gate #define	DL_QOS_CL_SEL1		0x0104	/* CL QOS selection */
495*7c478bd9Sstevel@tonic-gate 
496*7c478bd9Sstevel@tonic-gate typedef struct {
497*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_type;
498*7c478bd9Sstevel@tonic-gate 	dl_through_t	dl_rcv_throughput;	/* desired and accep. */
499*7c478bd9Sstevel@tonic-gate 	dl_transdelay_t	dl_rcv_trans_delay;	/* desired and accep. */
500*7c478bd9Sstevel@tonic-gate 	dl_through_t	dl_xmt_throughput;
501*7c478bd9Sstevel@tonic-gate 	dl_transdelay_t	dl_xmt_trans_delay;
502*7c478bd9Sstevel@tonic-gate 	dl_priority_t	dl_priority;		/* min and max values */
503*7c478bd9Sstevel@tonic-gate 	dl_protect_t	dl_protection;		/* min and max values */
504*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_residual_error;
505*7c478bd9Sstevel@tonic-gate 	dl_resilience_t	dl_resilience;
506*7c478bd9Sstevel@tonic-gate }	dl_qos_co_range1_t;
507*7c478bd9Sstevel@tonic-gate 
508*7c478bd9Sstevel@tonic-gate typedef struct {
509*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_type;
510*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_rcv_throughput;
511*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_rcv_trans_delay;
512*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_xmt_throughput;
513*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_xmt_trans_delay;
514*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_priority;
515*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_protection;
516*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_residual_error;
517*7c478bd9Sstevel@tonic-gate 	dl_resilience_t	dl_resilience;
518*7c478bd9Sstevel@tonic-gate }	dl_qos_co_sel1_t;
519*7c478bd9Sstevel@tonic-gate 
520*7c478bd9Sstevel@tonic-gate typedef struct {
521*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_type;
522*7c478bd9Sstevel@tonic-gate 	dl_transdelay_t	dl_trans_delay;
523*7c478bd9Sstevel@tonic-gate 	dl_priority_t	dl_priority;
524*7c478bd9Sstevel@tonic-gate 	dl_protect_t	dl_protection;
525*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_residual_error;
526*7c478bd9Sstevel@tonic-gate }	dl_qos_cl_range1_t;
527*7c478bd9Sstevel@tonic-gate 
528*7c478bd9Sstevel@tonic-gate typedef struct {
529*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_type;
530*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_trans_delay;
531*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_priority;
532*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_protection;
533*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_residual_error;
534*7c478bd9Sstevel@tonic-gate }	dl_qos_cl_sel1_t;
535*7c478bd9Sstevel@tonic-gate 
536*7c478bd9Sstevel@tonic-gate union	DL_qos_types {
537*7c478bd9Sstevel@tonic-gate 	t_uscalar_t		dl_qos_type;
538*7c478bd9Sstevel@tonic-gate 	dl_qos_co_range1_t	qos_co_range1;
539*7c478bd9Sstevel@tonic-gate 	dl_qos_co_sel1_t	qos_co_sel1;
540*7c478bd9Sstevel@tonic-gate 	dl_qos_cl_range1_t	qos_cl_range1;
541*7c478bd9Sstevel@tonic-gate 	dl_qos_cl_sel1_t	qos_cl_sel1;
542*7c478bd9Sstevel@tonic-gate };
543*7c478bd9Sstevel@tonic-gate 
544*7c478bd9Sstevel@tonic-gate /*
545*7c478bd9Sstevel@tonic-gate  *    Solaris specific structures and definitions.
546*7c478bd9Sstevel@tonic-gate  */
547*7c478bd9Sstevel@tonic-gate 
548*7c478bd9Sstevel@tonic-gate /*
549*7c478bd9Sstevel@tonic-gate  * The following are the capability types and structures used by the
550*7c478bd9Sstevel@tonic-gate  * the DL_CAPABILITY_REQ and DL_CAPABILITY_ACK primitives.
551*7c478bd9Sstevel@tonic-gate  *
552*7c478bd9Sstevel@tonic-gate  * These primitives are used both to determine the set of capabilities in
553*7c478bd9Sstevel@tonic-gate  * the DLS provider and also to turn on and off specific capabilities.
554*7c478bd9Sstevel@tonic-gate  * The response is a DL_CAPABILITY_ACK or DL_ERROR_ACK.
555*7c478bd9Sstevel@tonic-gate  *
556*7c478bd9Sstevel@tonic-gate  * DL_CAPABILITY_REQ can either be empty (i.e. dl_sub_length is zero) which
557*7c478bd9Sstevel@tonic-gate  * is a request for the driver to return all capabilities. Otherwise, the
558*7c478bd9Sstevel@tonic-gate  * DL_CAPABILITY_REQ contains the capabilities the DLS user wants to use and
559*7c478bd9Sstevel@tonic-gate  * their settings.
560*7c478bd9Sstevel@tonic-gate  *
561*7c478bd9Sstevel@tonic-gate  * DL_CAPABILITY_ACK contains the capabilities that the DLS provider can
562*7c478bd9Sstevel@tonic-gate  * support modified based on what was listed in the request. If a
563*7c478bd9Sstevel@tonic-gate  * capability was included in the request then the information returned
564*7c478bd9Sstevel@tonic-gate  * in the ack might be modified based on the information in the request.
565*7c478bd9Sstevel@tonic-gate  */
566*7c478bd9Sstevel@tonic-gate 
567*7c478bd9Sstevel@tonic-gate #define	DL_CAPAB_ID_WRAPPER	0x00	/* Module ID wrapper structure */
568*7c478bd9Sstevel@tonic-gate 					/* dl_data is dl_capab_id_t */
569*7c478bd9Sstevel@tonic-gate #define	DL_CAPAB_HCKSUM		0x01	/* Checksum offload */
570*7c478bd9Sstevel@tonic-gate 					/* dl_data is dl_capab_hcksum_t */
571*7c478bd9Sstevel@tonic-gate #define	DL_CAPAB_IPSEC_AH	0x02	/* IPsec AH acceleration */
572*7c478bd9Sstevel@tonic-gate 					/* dl_data is dl_capab_ipsec_t */
573*7c478bd9Sstevel@tonic-gate #define	DL_CAPAB_IPSEC_ESP	0x03	/* IPsec ESP acceleration */
574*7c478bd9Sstevel@tonic-gate 					/* dl_data is dl_capab_ipsec_t */
575*7c478bd9Sstevel@tonic-gate #define	DL_CAPAB_MDT		0x04	/* Multidata Transmit capability */
576*7c478bd9Sstevel@tonic-gate 					/* dl_data is dl_capab_mdt_t */
577*7c478bd9Sstevel@tonic-gate #define	DL_CAPAB_ZEROCOPY	0x05	/* Zero-copy capability */
578*7c478bd9Sstevel@tonic-gate 					/* dl_data is dl_capab_zerocopy_t */
579*7c478bd9Sstevel@tonic-gate #define	DL_CAPAB_POLL		0x06	/* Polling capability */
580*7c478bd9Sstevel@tonic-gate 					/* dl_data is dl_capab_poll_t */
581*7c478bd9Sstevel@tonic-gate 
582*7c478bd9Sstevel@tonic-gate typedef struct {
583*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_cap;		/* capability type */
584*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_length;	/* length of data following */
585*7c478bd9Sstevel@tonic-gate 	/* Followed by zero or more bytes of dl_data */
586*7c478bd9Sstevel@tonic-gate } dl_capability_sub_t;
587*7c478bd9Sstevel@tonic-gate 
588*7c478bd9Sstevel@tonic-gate /*
589*7c478bd9Sstevel@tonic-gate  * Definitions and structures needed for DL_CONTROL_REQ and DL_CONTROL_ACK
590*7c478bd9Sstevel@tonic-gate  * primitives.
591*7c478bd9Sstevel@tonic-gate  * Extensible message to send down control information to the DLS provider.
592*7c478bd9Sstevel@tonic-gate  * The response is a DL_CONTROL_ACK or DL_ERROR_ACK.
593*7c478bd9Sstevel@tonic-gate  *
594*7c478bd9Sstevel@tonic-gate  * Different types of control operations will define different format for the
595*7c478bd9Sstevel@tonic-gate  * key and data fields. ADD requires key and data fields; if the <type, key>
596*7c478bd9Sstevel@tonic-gate  * matches an already existing entry a DL_ERROR_ACK will be returned. DELETE
597*7c478bd9Sstevel@tonic-gate  * requires a key field; if the <type, key> does not exist, a DL_ERROR_ACK
598*7c478bd9Sstevel@tonic-gate  * will be returned. FLUSH requires neither a key nor data; it
599*7c478bd9Sstevel@tonic-gate  * unconditionally removes all entries for the specified type. GET requires a
600*7c478bd9Sstevel@tonic-gate  * key field; the get operation returns the data for the <type, key>. If
601*7c478bd9Sstevel@tonic-gate  * <type, key> doesn't exist a DL_ERROR_ACK is returned. UPDATE requires key
602*7c478bd9Sstevel@tonic-gate  * and data fields; if <type, key> doesn't exist a DL_ERROR_ACK is returned.
603*7c478bd9Sstevel@tonic-gate  */
604*7c478bd9Sstevel@tonic-gate 
605*7c478bd9Sstevel@tonic-gate /*
606*7c478bd9Sstevel@tonic-gate  * Control operations
607*7c478bd9Sstevel@tonic-gate  */
608*7c478bd9Sstevel@tonic-gate #define	DL_CO_ADD	0x01	/* Add new entry matching for <type,key> */
609*7c478bd9Sstevel@tonic-gate #define	DL_CO_DELETE	0x02	/* Delete the entry matching <type,key> */
610*7c478bd9Sstevel@tonic-gate #define	DL_CO_FLUSH	0x03	/* Purge all entries of <type> */
611*7c478bd9Sstevel@tonic-gate #define	DL_CO_GET	0x04	/* Get the data for the <type,key> */
612*7c478bd9Sstevel@tonic-gate #define	DL_CO_UPDATE	0x05	/* Update the data for <type,key> */
613*7c478bd9Sstevel@tonic-gate #define	DL_CO_SET	0x06	/* Add or update as appropriate */
614*7c478bd9Sstevel@tonic-gate 
615*7c478bd9Sstevel@tonic-gate /*
616*7c478bd9Sstevel@tonic-gate  * Control types (dl_type field of dl_control_req_t and dl_control_ack_t)
617*7c478bd9Sstevel@tonic-gate  */
618*7c478bd9Sstevel@tonic-gate #define	DL_CT_IPSEC_AH	0x01	/* AH; key=spi,dest_addr; */
619*7c478bd9Sstevel@tonic-gate 				/* data=keying material */
620*7c478bd9Sstevel@tonic-gate #define	DL_CT_IPSEC_ESP	0x02	/* ESP; key=spi,des_taddr; */
621*7c478bd9Sstevel@tonic-gate 				/* data=keying material */
622*7c478bd9Sstevel@tonic-gate 
623*7c478bd9Sstevel@tonic-gate /*
624*7c478bd9Sstevel@tonic-gate  * Module ID token to be included in new sub-capability structures.
625*7c478bd9Sstevel@tonic-gate  * Existing sub-capabilities lacking an identification token, e.g. IPSEC
626*7c478bd9Sstevel@tonic-gate  * hardware acceleration, need to be encapsulated within the ID sub-
627*7c478bd9Sstevel@tonic-gate  * capability.  Access to this structure must be done through
628*7c478bd9Sstevel@tonic-gate  * dlcapab{set,check}qid().
629*7c478bd9Sstevel@tonic-gate  */
630*7c478bd9Sstevel@tonic-gate typedef struct {
631*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	mid[4];		/* private fields */
632*7c478bd9Sstevel@tonic-gate } dl_mid_t;
633*7c478bd9Sstevel@tonic-gate 
634*7c478bd9Sstevel@tonic-gate /*
635*7c478bd9Sstevel@tonic-gate  * Module ID wrapper (follows dl_capability_sub_t)
636*7c478bd9Sstevel@tonic-gate  */
637*7c478bd9Sstevel@tonic-gate typedef struct {
638*7c478bd9Sstevel@tonic-gate 	dl_mid_t		id_mid;		/* module ID token */
639*7c478bd9Sstevel@tonic-gate 	dl_capability_sub_t	id_subcap;	/* sub-capability */
640*7c478bd9Sstevel@tonic-gate } dl_capab_id_t;
641*7c478bd9Sstevel@tonic-gate 
642*7c478bd9Sstevel@tonic-gate /*
643*7c478bd9Sstevel@tonic-gate  * Multidata Transmit sub-capability (follows dl_capability_sub_t)
644*7c478bd9Sstevel@tonic-gate  */
645*7c478bd9Sstevel@tonic-gate typedef struct {
646*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	mdt_version;	/* interface version */
647*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	mdt_flags;	/* flags */
648*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	mdt_hdr_head;	/* minimum leading header space */
649*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	mdt_hdr_tail;	/* minimum trailing header space */
650*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	mdt_max_pld;	/* maximum doable payload buffers */
651*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	mdt_span_limit;	/* scatter-gather descriptor limit */
652*7c478bd9Sstevel@tonic-gate 	dl_mid_t	mdt_mid;	/* module ID token */
653*7c478bd9Sstevel@tonic-gate } dl_capab_mdt_t;
654*7c478bd9Sstevel@tonic-gate 
655*7c478bd9Sstevel@tonic-gate /*
656*7c478bd9Sstevel@tonic-gate  * Multidata Transmit revision definition history
657*7c478bd9Sstevel@tonic-gate  */
658*7c478bd9Sstevel@tonic-gate #define	MDT_CURRENT_VERSION	0x02
659*7c478bd9Sstevel@tonic-gate #define	MDT_VERSION_2		0x02
660*7c478bd9Sstevel@tonic-gate 
661*7c478bd9Sstevel@tonic-gate /*
662*7c478bd9Sstevel@tonic-gate  * mdt_flags values
663*7c478bd9Sstevel@tonic-gate  */
664*7c478bd9Sstevel@tonic-gate #define	DL_CAPAB_MDT_ENABLE	0x01	/* enable Multidata Transmit */
665*7c478bd9Sstevel@tonic-gate 
666*7c478bd9Sstevel@tonic-gate /*
667*7c478bd9Sstevel@tonic-gate  * DL_CAPAB_HCKSUM
668*7c478bd9Sstevel@tonic-gate  * Used for negotiating different flavors of checksum offload
669*7c478bd9Sstevel@tonic-gate  * capabilities.
670*7c478bd9Sstevel@tonic-gate  */
671*7c478bd9Sstevel@tonic-gate typedef struct {
672*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	hcksum_version;	/* version of data following */
673*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	hcksum_txflags;	/* capabilities on transmit */
674*7c478bd9Sstevel@tonic-gate 	dl_mid_t	hcksum_mid;		/* module ID */
675*7c478bd9Sstevel@tonic-gate } dl_capab_hcksum_t;
676*7c478bd9Sstevel@tonic-gate 
677*7c478bd9Sstevel@tonic-gate /*
678*7c478bd9Sstevel@tonic-gate  * DL_CAPAB_HCKSUM  revision definition history
679*7c478bd9Sstevel@tonic-gate  */
680*7c478bd9Sstevel@tonic-gate #define	HCKSUM_CURRENT_VERSION	0x01
681*7c478bd9Sstevel@tonic-gate #define	HCKSUM_VERSION_1	0x01
682*7c478bd9Sstevel@tonic-gate 
683*7c478bd9Sstevel@tonic-gate /*
684*7c478bd9Sstevel@tonic-gate  * Values for dl_txflags
685*7c478bd9Sstevel@tonic-gate  */
686*7c478bd9Sstevel@tonic-gate #define	HCKSUM_ENABLE		0x01	/* Set to enable hardware checksum */
687*7c478bd9Sstevel@tonic-gate 					/* capability */
688*7c478bd9Sstevel@tonic-gate #define	HCKSUM_INET_PARTIAL	0x02	/* Partial 1's complement checksum */
689*7c478bd9Sstevel@tonic-gate 					/* ability */
690*7c478bd9Sstevel@tonic-gate #define	HCKSUM_INET_FULL_V4	0x04	/* Full 1's complement checksum */
691*7c478bd9Sstevel@tonic-gate 					/* ability for IPv4 packets. */
692*7c478bd9Sstevel@tonic-gate #define	HCKSUM_IPHDRCKSUM	0x10	/* IPv4 Header checksum offload */
693*7c478bd9Sstevel@tonic-gate 					/* capability */
694*7c478bd9Sstevel@tonic-gate #ifdef _KERNEL
695*7c478bd9Sstevel@tonic-gate 
696*7c478bd9Sstevel@tonic-gate typedef struct dl_capab_poll_s {
697*7c478bd9Sstevel@tonic-gate 	t_uscalar_t		poll_version;
698*7c478bd9Sstevel@tonic-gate 	t_uscalar_t		poll_flags;
699*7c478bd9Sstevel@tonic-gate 
700*7c478bd9Sstevel@tonic-gate 	/* NIC provided information */
701*7c478bd9Sstevel@tonic-gate 	uintptr_t		poll_tx_handle;
702*7c478bd9Sstevel@tonic-gate 	uintptr_t		poll_tx;
703*7c478bd9Sstevel@tonic-gate 
704*7c478bd9Sstevel@tonic-gate 	/* IP provided information */
705*7c478bd9Sstevel@tonic-gate 	uintptr_t		poll_rx_handle;
706*7c478bd9Sstevel@tonic-gate 	uintptr_t		poll_rx;
707*7c478bd9Sstevel@tonic-gate 	uintptr_t		poll_ring_add;
708*7c478bd9Sstevel@tonic-gate 
709*7c478bd9Sstevel@tonic-gate 	dl_mid_t		poll_mid;		/* module ID */
710*7c478bd9Sstevel@tonic-gate } dl_capab_poll_t;
711*7c478bd9Sstevel@tonic-gate 
712*7c478bd9Sstevel@tonic-gate #define	POLL_CURRENT_VERSION	0x01
713*7c478bd9Sstevel@tonic-gate #define	POLL_VERSION_1		0x01
714*7c478bd9Sstevel@tonic-gate 
715*7c478bd9Sstevel@tonic-gate /*
716*7c478bd9Sstevel@tonic-gate  * Values for poll_flags
717*7c478bd9Sstevel@tonic-gate  */
718*7c478bd9Sstevel@tonic-gate #define	POLL_ENABLE		0x01	/* Set to enable polling */
719*7c478bd9Sstevel@tonic-gate 					/* capability */
720*7c478bd9Sstevel@tonic-gate #define	POLL_CAPABLE		0x02	/* Polling ability exists */
721*7c478bd9Sstevel@tonic-gate #define	POLL_DISABLE		0x04	/* Disable Polling */
722*7c478bd9Sstevel@tonic-gate 
723*7c478bd9Sstevel@tonic-gate #endif /* _KERNEL */
724*7c478bd9Sstevel@tonic-gate 
725*7c478bd9Sstevel@tonic-gate /*
726*7c478bd9Sstevel@tonic-gate  * Zero-copy sub-capability (follows dl_capability_sub_t)
727*7c478bd9Sstevel@tonic-gate  */
728*7c478bd9Sstevel@tonic-gate typedef struct {
729*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	zerocopy_version;	/* interface version */
730*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	zerocopy_flags;		/* capability flags */
731*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	reserved[9];		/* reserved fields */
732*7c478bd9Sstevel@tonic-gate 	dl_mid_t	zerocopy_mid;		/* module ID */
733*7c478bd9Sstevel@tonic-gate } dl_capab_zerocopy_t;
734*7c478bd9Sstevel@tonic-gate 
735*7c478bd9Sstevel@tonic-gate /*
736*7c478bd9Sstevel@tonic-gate  * Zero-copy revision definition history
737*7c478bd9Sstevel@tonic-gate  */
738*7c478bd9Sstevel@tonic-gate #define	ZEROCOPY_CURRENT_VERSION	0x01
739*7c478bd9Sstevel@tonic-gate #define	ZEROCOPY_VERSION_1		0x01
740*7c478bd9Sstevel@tonic-gate 
741*7c478bd9Sstevel@tonic-gate /*
742*7c478bd9Sstevel@tonic-gate  * Currently supported values of zerocopy_flags
743*7c478bd9Sstevel@tonic-gate  */
744*7c478bd9Sstevel@tonic-gate #define	DL_CAPAB_VMSAFE_MEM		0x01	/* Driver is zero-copy safe */
745*7c478bd9Sstevel@tonic-gate 						/* wrt VM named buffers on */
746*7c478bd9Sstevel@tonic-gate 						/* transmit */
747*7c478bd9Sstevel@tonic-gate /*
748*7c478bd9Sstevel@tonic-gate  * DLPI interface primitive definitions.
749*7c478bd9Sstevel@tonic-gate  *
750*7c478bd9Sstevel@tonic-gate  * Each primitive is sent as a stream message.  It is possible that
751*7c478bd9Sstevel@tonic-gate  * the messages may be viewed as a sequence of bytes that have the
752*7c478bd9Sstevel@tonic-gate  * following form without any padding. The structure definition
753*7c478bd9Sstevel@tonic-gate  * of the following messages may have to change depending on the
754*7c478bd9Sstevel@tonic-gate  * underlying hardware architecture and crossing of a hardware
755*7c478bd9Sstevel@tonic-gate  * boundary with a different hardware architecture.
756*7c478bd9Sstevel@tonic-gate  *
757*7c478bd9Sstevel@tonic-gate  * Fields in the primitives having a name of the form
758*7c478bd9Sstevel@tonic-gate  * dl_reserved cannot be used and have the value of
759*7c478bd9Sstevel@tonic-gate  * binary zero, no bits turned on.
760*7c478bd9Sstevel@tonic-gate  *
761*7c478bd9Sstevel@tonic-gate  * Each message has the name defined followed by the
762*7c478bd9Sstevel@tonic-gate  * stream message type (M_PROTO, M_PCPROTO, M_DATA)
763*7c478bd9Sstevel@tonic-gate  */
764*7c478bd9Sstevel@tonic-gate 
765*7c478bd9Sstevel@tonic-gate /*
766*7c478bd9Sstevel@tonic-gate  *	LOCAL MANAGEMENT SERVICE PRIMITIVES
767*7c478bd9Sstevel@tonic-gate  */
768*7c478bd9Sstevel@tonic-gate 
769*7c478bd9Sstevel@tonic-gate /*
770*7c478bd9Sstevel@tonic-gate  * DL_INFO_REQ, M_PCPROTO type
771*7c478bd9Sstevel@tonic-gate  */
772*7c478bd9Sstevel@tonic-gate typedef struct {
773*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;			/* set to DL_INFO_REQ */
774*7c478bd9Sstevel@tonic-gate } dl_info_req_t;
775*7c478bd9Sstevel@tonic-gate 
776*7c478bd9Sstevel@tonic-gate /*
777*7c478bd9Sstevel@tonic-gate  * DL_INFO_ACK, M_PCPROTO type
778*7c478bd9Sstevel@tonic-gate  */
779*7c478bd9Sstevel@tonic-gate typedef struct {
780*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* set to DL_INFO_ACK */
781*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_max_sdu;		/* Max bytes in a DLSDU */
782*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_min_sdu;		/* Min bytes in a DLSDU */
783*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;		/* length of DLSAP address */
784*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_mac_type;		/* type of medium supported */
785*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_reserved;		/* value set to zero */
786*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_current_state;	/* state of DLPI interface */
787*7c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_sap_length;		/* length of dlsap SAP part */
788*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_service_mode;	/* CO, CL or ACL */
789*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_length;		/* length of qos values */
790*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_offset;		/* offset from start of block */
791*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_range_length;	/* available range of qos */
792*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_range_offset;	/* offset from start of block */
793*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_provider_style;	/* style1 or style2 */
794*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;		/* offset of the dlsap addr */
795*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_version;		/* version number */
796*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_brdcst_addr_length;	/* length of broadcast addr */
797*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_brdcst_addr_offset;	/* offset from start of block */
798*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_growth;		/* set to zero */
799*7c478bd9Sstevel@tonic-gate } dl_info_ack_t;
800*7c478bd9Sstevel@tonic-gate 
801*7c478bd9Sstevel@tonic-gate /*
802*7c478bd9Sstevel@tonic-gate  * DL_ATTACH_REQ, M_PROTO type
803*7c478bd9Sstevel@tonic-gate  */
804*7c478bd9Sstevel@tonic-gate typedef struct {
805*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* set to DL_ATTACH_REQ */
806*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_ppa;			/* id of the PPA */
807*7c478bd9Sstevel@tonic-gate } dl_attach_req_t;
808*7c478bd9Sstevel@tonic-gate 
809*7c478bd9Sstevel@tonic-gate /*
810*7c478bd9Sstevel@tonic-gate  * DL_DETACH_REQ, M_PROTO type
811*7c478bd9Sstevel@tonic-gate  */
812*7c478bd9Sstevel@tonic-gate typedef struct {
813*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* set to DL_DETACH_REQ */
814*7c478bd9Sstevel@tonic-gate } dl_detach_req_t;
815*7c478bd9Sstevel@tonic-gate 
816*7c478bd9Sstevel@tonic-gate /*
817*7c478bd9Sstevel@tonic-gate  * DL_BIND_REQ, M_PROTO type
818*7c478bd9Sstevel@tonic-gate  */
819*7c478bd9Sstevel@tonic-gate typedef struct {
820*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* set to DL_BIND_REQ */
821*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_sap;		/* info to identify dlsap addr */
822*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_max_conind;	/* max # of outstanding con_ind */
823*7c478bd9Sstevel@tonic-gate 	uint16_t	dl_service_mode;	/* CO, CL or ACL */
824*7c478bd9Sstevel@tonic-gate 	uint16_t	dl_conn_mgmt;	/* if non-zero, is con-mgmt stream */
825*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_xidtest_flg;	/* auto init. of test and xid */
826*7c478bd9Sstevel@tonic-gate } dl_bind_req_t;
827*7c478bd9Sstevel@tonic-gate 
828*7c478bd9Sstevel@tonic-gate /*
829*7c478bd9Sstevel@tonic-gate  * DL_BIND_ACK, M_PCPROTO type
830*7c478bd9Sstevel@tonic-gate  */
831*7c478bd9Sstevel@tonic-gate typedef struct {
832*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_BIND_ACK */
833*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_sap;		/* DLSAP addr info */
834*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of complete DLSAP addr */
835*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of M_PCPROTO */
836*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_max_conind;	/* allowed max. # of con-ind */
837*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_xidtest_flg;	/* responses supported by provider */
838*7c478bd9Sstevel@tonic-gate } dl_bind_ack_t;
839*7c478bd9Sstevel@tonic-gate 
840*7c478bd9Sstevel@tonic-gate /*
841*7c478bd9Sstevel@tonic-gate  * DL_SUBS_BIND_REQ, M_PROTO type
842*7c478bd9Sstevel@tonic-gate  */
843*7c478bd9Sstevel@tonic-gate typedef struct {
844*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_SUBS_BIND_REQ */
845*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_subs_sap_offset;	/* offset of subs_sap */
846*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_subs_sap_length;	/* length of subs_sap */
847*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_subs_bind_class;	/* peer or hierarchical */
848*7c478bd9Sstevel@tonic-gate } dl_subs_bind_req_t;
849*7c478bd9Sstevel@tonic-gate 
850*7c478bd9Sstevel@tonic-gate /*
851*7c478bd9Sstevel@tonic-gate  * DL_SUBS_BIND_ACK, M_PCPROTO type
852*7c478bd9Sstevel@tonic-gate  */
853*7c478bd9Sstevel@tonic-gate typedef struct {
854*7c478bd9Sstevel@tonic-gate 	t_uscalar_t dl_primitive;	/* DL_SUBS_BIND_ACK */
855*7c478bd9Sstevel@tonic-gate 	t_uscalar_t dl_subs_sap_offset;	/* offset of subs_sap */
856*7c478bd9Sstevel@tonic-gate 	t_uscalar_t dl_subs_sap_length;	/* length of subs_sap */
857*7c478bd9Sstevel@tonic-gate } dl_subs_bind_ack_t;
858*7c478bd9Sstevel@tonic-gate 
859*7c478bd9Sstevel@tonic-gate /*
860*7c478bd9Sstevel@tonic-gate  * DL_UNBIND_REQ, M_PROTO type
861*7c478bd9Sstevel@tonic-gate  */
862*7c478bd9Sstevel@tonic-gate typedef struct {
863*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_UNBIND_REQ */
864*7c478bd9Sstevel@tonic-gate } dl_unbind_req_t;
865*7c478bd9Sstevel@tonic-gate 
866*7c478bd9Sstevel@tonic-gate /*
867*7c478bd9Sstevel@tonic-gate  * DL_SUBS_UNBIND_REQ, M_PROTO type
868*7c478bd9Sstevel@tonic-gate  */
869*7c478bd9Sstevel@tonic-gate typedef struct {
870*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_SUBS_UNBIND_REQ */
871*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_subs_sap_offset;	/* offset of subs_sap */
872*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_subs_sap_length;	/* length of subs_sap */
873*7c478bd9Sstevel@tonic-gate } dl_subs_unbind_req_t;
874*7c478bd9Sstevel@tonic-gate 
875*7c478bd9Sstevel@tonic-gate /*
876*7c478bd9Sstevel@tonic-gate  * DL_OK_ACK, M_PCPROTO type
877*7c478bd9Sstevel@tonic-gate  */
878*7c478bd9Sstevel@tonic-gate typedef struct {
879*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_OK_ACK */
880*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correct_primitive;	/* primitive acknowledged */
881*7c478bd9Sstevel@tonic-gate } dl_ok_ack_t;
882*7c478bd9Sstevel@tonic-gate 
883*7c478bd9Sstevel@tonic-gate /*
884*7c478bd9Sstevel@tonic-gate  * DL_ERROR_ACK, M_PCPROTO type
885*7c478bd9Sstevel@tonic-gate  */
886*7c478bd9Sstevel@tonic-gate typedef struct {
887*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_ERROR_ACK */
888*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_error_primitive;	/* primitive in error */
889*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_errno;		/* DLPI error code */
890*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_unix_errno;		/* UNIX system error code */
891*7c478bd9Sstevel@tonic-gate } dl_error_ack_t;
892*7c478bd9Sstevel@tonic-gate 
893*7c478bd9Sstevel@tonic-gate /*
894*7c478bd9Sstevel@tonic-gate  * DL_ENABMULTI_REQ, M_PROTO type
895*7c478bd9Sstevel@tonic-gate  */
896*7c478bd9Sstevel@tonic-gate typedef struct {
897*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_ENABMULTI_REQ */
898*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of multicast address */
899*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of M_PROTO block */
900*7c478bd9Sstevel@tonic-gate } dl_enabmulti_req_t;
901*7c478bd9Sstevel@tonic-gate 
902*7c478bd9Sstevel@tonic-gate /*
903*7c478bd9Sstevel@tonic-gate  * DL_DISABMULTI_REQ, M_PROTO type
904*7c478bd9Sstevel@tonic-gate  */
905*7c478bd9Sstevel@tonic-gate 
906*7c478bd9Sstevel@tonic-gate typedef struct {
907*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_DISABMULTI_REQ */
908*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of multicast address */
909*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of M_PROTO block */
910*7c478bd9Sstevel@tonic-gate } dl_disabmulti_req_t;
911*7c478bd9Sstevel@tonic-gate 
912*7c478bd9Sstevel@tonic-gate /*
913*7c478bd9Sstevel@tonic-gate  * DL_PROMISCON_REQ, M_PROTO type
914*7c478bd9Sstevel@tonic-gate  */
915*7c478bd9Sstevel@tonic-gate 
916*7c478bd9Sstevel@tonic-gate typedef struct {
917*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_PROMISCON_REQ */
918*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_level;	/* physical,SAP, or ALL multicast */
919*7c478bd9Sstevel@tonic-gate } dl_promiscon_req_t;
920*7c478bd9Sstevel@tonic-gate 
921*7c478bd9Sstevel@tonic-gate /*
922*7c478bd9Sstevel@tonic-gate  * DL_PROMISCOFF_REQ, M_PROTO type
923*7c478bd9Sstevel@tonic-gate  */
924*7c478bd9Sstevel@tonic-gate 
925*7c478bd9Sstevel@tonic-gate typedef struct {
926*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_PROMISCOFF_REQ */
927*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_level;	/* Physical,SAP, or ALL multicast */
928*7c478bd9Sstevel@tonic-gate } dl_promiscoff_req_t;
929*7c478bd9Sstevel@tonic-gate 
930*7c478bd9Sstevel@tonic-gate /*
931*7c478bd9Sstevel@tonic-gate  *	Primitives to get and set the Physical address
932*7c478bd9Sstevel@tonic-gate  */
933*7c478bd9Sstevel@tonic-gate 
934*7c478bd9Sstevel@tonic-gate /*
935*7c478bd9Sstevel@tonic-gate  * DL_PHYS_ADDR_REQ, M_PROTO type
936*7c478bd9Sstevel@tonic-gate  */
937*7c478bd9Sstevel@tonic-gate typedef	struct {
938*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_PHYS_ADDR_REQ */
939*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_type;	/* factory or current physical addr */
940*7c478bd9Sstevel@tonic-gate } dl_phys_addr_req_t;
941*7c478bd9Sstevel@tonic-gate 
942*7c478bd9Sstevel@tonic-gate /*
943*7c478bd9Sstevel@tonic-gate  * DL_PHYS_ADDR_ACK, M_PCPROTO type
944*7c478bd9Sstevel@tonic-gate  */
945*7c478bd9Sstevel@tonic-gate typedef struct {
946*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_PHYS_ADDR_ACK */
947*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of the physical addr */
948*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of block */
949*7c478bd9Sstevel@tonic-gate } dl_phys_addr_ack_t;
950*7c478bd9Sstevel@tonic-gate 
951*7c478bd9Sstevel@tonic-gate /*
952*7c478bd9Sstevel@tonic-gate  * DL_SET_PHYS_ADDR_REQ, M_PROTO type
953*7c478bd9Sstevel@tonic-gate  */
954*7c478bd9Sstevel@tonic-gate typedef struct {
955*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_SET_PHYS_ADDR_REQ */
956*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of physical addr */
957*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of block */
958*7c478bd9Sstevel@tonic-gate } dl_set_phys_addr_req_t;
959*7c478bd9Sstevel@tonic-gate 
960*7c478bd9Sstevel@tonic-gate /*
961*7c478bd9Sstevel@tonic-gate  *	Primitives to get statistics
962*7c478bd9Sstevel@tonic-gate  */
963*7c478bd9Sstevel@tonic-gate 
964*7c478bd9Sstevel@tonic-gate /*
965*7c478bd9Sstevel@tonic-gate  * DL_GET_STATISTICS_REQ, M_PROTO type
966*7c478bd9Sstevel@tonic-gate  */
967*7c478bd9Sstevel@tonic-gate typedef struct {
968*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_GET_STATISTICS_REQ */
969*7c478bd9Sstevel@tonic-gate } dl_get_statistics_req_t;
970*7c478bd9Sstevel@tonic-gate 
971*7c478bd9Sstevel@tonic-gate /*
972*7c478bd9Sstevel@tonic-gate  * DL_GET_STATISTICS_ACK, M_PCPROTO type
973*7c478bd9Sstevel@tonic-gate  */
974*7c478bd9Sstevel@tonic-gate typedef struct {
975*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_GET_STATISTICS_ACK */
976*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_stat_length;	/* length of statistics structure */
977*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_stat_offset;	/* offset from start of block */
978*7c478bd9Sstevel@tonic-gate } dl_get_statistics_ack_t;
979*7c478bd9Sstevel@tonic-gate 
980*7c478bd9Sstevel@tonic-gate /*
981*7c478bd9Sstevel@tonic-gate  *	Solaris specific local management service primitives
982*7c478bd9Sstevel@tonic-gate  */
983*7c478bd9Sstevel@tonic-gate 
984*7c478bd9Sstevel@tonic-gate /*
985*7c478bd9Sstevel@tonic-gate  * DL_NOTIFY_REQ, M_PROTO type
986*7c478bd9Sstevel@tonic-gate  */
987*7c478bd9Sstevel@tonic-gate typedef struct {
988*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* set to DL_NOTIFY_REQ */
989*7c478bd9Sstevel@tonic-gate 	uint32_t	dl_notifications; /* Requested set of notifications */
990*7c478bd9Sstevel@tonic-gate 	uint32_t	dl_timelimit;	/* In milliseconds */
991*7c478bd9Sstevel@tonic-gate } dl_notify_req_t;
992*7c478bd9Sstevel@tonic-gate 
993*7c478bd9Sstevel@tonic-gate /*
994*7c478bd9Sstevel@tonic-gate  * DL_NOTIFY_ACK, M_PROTO type
995*7c478bd9Sstevel@tonic-gate  */
996*7c478bd9Sstevel@tonic-gate typedef struct {
997*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* set to DL_NOTIFY_ACK */
998*7c478bd9Sstevel@tonic-gate 	uint32_t	dl_notifications; /* Supported set of notifications */
999*7c478bd9Sstevel@tonic-gate } dl_notify_ack_t;
1000*7c478bd9Sstevel@tonic-gate 
1001*7c478bd9Sstevel@tonic-gate /*
1002*7c478bd9Sstevel@tonic-gate  * DL_NOTIFY_IND, M_PROTO type
1003*7c478bd9Sstevel@tonic-gate  */
1004*7c478bd9Sstevel@tonic-gate typedef struct {
1005*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* set to DL_NOTIFY_IND */
1006*7c478bd9Sstevel@tonic-gate 	uint32_t	dl_notification; /* Which notification? */
1007*7c478bd9Sstevel@tonic-gate 	uint32_t	dl_data;	/* notification specific */
1008*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of complete DLSAP addr */
1009*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of M_PROTO */
1010*7c478bd9Sstevel@tonic-gate } dl_notify_ind_t;
1011*7c478bd9Sstevel@tonic-gate 
1012*7c478bd9Sstevel@tonic-gate /*
1013*7c478bd9Sstevel@tonic-gate  * DL_AGGR_REQ, M_PROTO type
1014*7c478bd9Sstevel@tonic-gate  */
1015*7c478bd9Sstevel@tonic-gate typedef struct {
1016*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* set to DL_AGGR_REQ */
1017*7c478bd9Sstevel@tonic-gate 	uint32_t	dl_key;		/* Key identifying the group */
1018*7c478bd9Sstevel@tonic-gate 	uint32_t	dl_port;	/* Identifying the NIC */
1019*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of PHYS addr addr */
1020*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of M_PROTO */
1021*7c478bd9Sstevel@tonic-gate } dl_aggr_req_t;
1022*7c478bd9Sstevel@tonic-gate 
1023*7c478bd9Sstevel@tonic-gate /*
1024*7c478bd9Sstevel@tonic-gate  * DL_AGGR_IND, M_PROTO type
1025*7c478bd9Sstevel@tonic-gate  */
1026*7c478bd9Sstevel@tonic-gate typedef struct {
1027*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* set to DL_AGGR_IND */
1028*7c478bd9Sstevel@tonic-gate 	uint32_t	dl_key;		/* Key identifying the group */
1029*7c478bd9Sstevel@tonic-gate 	uint32_t	dl_port;	/* Identifying the NIC */
1030*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of PHYS addr */
1031*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of M_PROTO */
1032*7c478bd9Sstevel@tonic-gate } dl_aggr_ind_t;
1033*7c478bd9Sstevel@tonic-gate 
1034*7c478bd9Sstevel@tonic-gate /*
1035*7c478bd9Sstevel@tonic-gate  * DL_UNAGGR_REQ, M_PROTO type
1036*7c478bd9Sstevel@tonic-gate  */
1037*7c478bd9Sstevel@tonic-gate typedef struct {
1038*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* set to DL_UNAGGR_REQ */
1039*7c478bd9Sstevel@tonic-gate 	uint32_t	dl_key;		/* Key identifying the group */
1040*7c478bd9Sstevel@tonic-gate 	uint32_t	dl_port;	/* Identifying the NIC */
1041*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of PHYS addr */
1042*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of M_PROTO */
1043*7c478bd9Sstevel@tonic-gate } dl_unaggr_req_t;
1044*7c478bd9Sstevel@tonic-gate 
1045*7c478bd9Sstevel@tonic-gate /*
1046*7c478bd9Sstevel@tonic-gate  * DL_CAPABILITY_REQ, M_PROTO type
1047*7c478bd9Sstevel@tonic-gate  */
1048*7c478bd9Sstevel@tonic-gate typedef struct {
1049*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_CAPABILITY_REQ */
1050*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_sub_offset;	/* options offset */
1051*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_sub_length;	/* options length */
1052*7c478bd9Sstevel@tonic-gate 	/* Followed by a list of zero or more dl_capability_sub_t */
1053*7c478bd9Sstevel@tonic-gate } dl_capability_req_t;
1054*7c478bd9Sstevel@tonic-gate 
1055*7c478bd9Sstevel@tonic-gate /*
1056*7c478bd9Sstevel@tonic-gate  * DL_CAPABILITY_ACK, M_PROTO type
1057*7c478bd9Sstevel@tonic-gate  */
1058*7c478bd9Sstevel@tonic-gate typedef struct {
1059*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_CAPABILITY_ACK */
1060*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_sub_offset;	/* options offset */
1061*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_sub_length;	/* options length */
1062*7c478bd9Sstevel@tonic-gate 	/* Followed by a list of zero or more dl_capability_sub_t */
1063*7c478bd9Sstevel@tonic-gate } dl_capability_ack_t;
1064*7c478bd9Sstevel@tonic-gate 
1065*7c478bd9Sstevel@tonic-gate /*
1066*7c478bd9Sstevel@tonic-gate  * DL_CONTROL_REQ, M_PROTO type
1067*7c478bd9Sstevel@tonic-gate  */
1068*7c478bd9Sstevel@tonic-gate typedef struct {
1069*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_CONTROL_REQ */
1070*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_operation;	/* add/delete/purge */
1071*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_type;	/* e.g. AH/ESP/ ... */
1072*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_key_offset;	/* offset of key */
1073*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_key_length;	/* length of key */
1074*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_data_offset;	/* offset of data */
1075*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_data_length;	/* length of data */
1076*7c478bd9Sstevel@tonic-gate } dl_control_req_t;
1077*7c478bd9Sstevel@tonic-gate 
1078*7c478bd9Sstevel@tonic-gate /*
1079*7c478bd9Sstevel@tonic-gate  * DL_CONTROL_ACK, M_PROTO type
1080*7c478bd9Sstevel@tonic-gate  */
1081*7c478bd9Sstevel@tonic-gate typedef struct {
1082*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_CONTROL_ACK */
1083*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_operation;	/* add/delete/purge */
1084*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_type;	/* e.g. AH/ESP/ ... */
1085*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_key_offset;	/* offset of key */
1086*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_key_length;	/* length of key */
1087*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_data_offset;	/* offset of data */
1088*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_data_length;	/* length of data */
1089*7c478bd9Sstevel@tonic-gate } dl_control_ack_t;
1090*7c478bd9Sstevel@tonic-gate 
1091*7c478bd9Sstevel@tonic-gate /*
1092*7c478bd9Sstevel@tonic-gate  * DL_PASSIVE_REQ, M_PROTO type
1093*7c478bd9Sstevel@tonic-gate  */
1094*7c478bd9Sstevel@tonic-gate typedef struct {
1095*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;
1096*7c478bd9Sstevel@tonic-gate } dl_passive_req_t;
1097*7c478bd9Sstevel@tonic-gate 
1098*7c478bd9Sstevel@tonic-gate /*
1099*7c478bd9Sstevel@tonic-gate  *	CONNECTION-ORIENTED SERVICE PRIMITIVES
1100*7c478bd9Sstevel@tonic-gate  */
1101*7c478bd9Sstevel@tonic-gate 
1102*7c478bd9Sstevel@tonic-gate /*
1103*7c478bd9Sstevel@tonic-gate  * DL_CONNECT_REQ, M_PROTO type
1104*7c478bd9Sstevel@tonic-gate  */
1105*7c478bd9Sstevel@tonic-gate typedef struct {
1106*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_CONNECT_REQ */
1107*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* len. of dlsap addr */
1108*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset */
1109*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_length;		/* len. of QOS parm val */
1110*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_offset;		/* offset */
1111*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_growth;		/* set to zero */
1112*7c478bd9Sstevel@tonic-gate } dl_connect_req_t;
1113*7c478bd9Sstevel@tonic-gate 
1114*7c478bd9Sstevel@tonic-gate /*
1115*7c478bd9Sstevel@tonic-gate  * DL_CONNECT_IND, M_PROTO type
1116*7c478bd9Sstevel@tonic-gate  */
1117*7c478bd9Sstevel@tonic-gate typedef struct {
1118*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_CONNECT_IND */
1119*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation;		/* provider's correl. token */
1120*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_called_addr_length;  /* length of called address */
1121*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_called_addr_offset;	/* offset from start of block */
1122*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_calling_addr_length;	/* length of calling address */
1123*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_calling_addr_offset;	/* offset from start of block */
1124*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_length;		/* length of qos structure */
1125*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_offset;		/* offset from start of block */
1126*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_growth;		/* set to zero */
1127*7c478bd9Sstevel@tonic-gate } dl_connect_ind_t;
1128*7c478bd9Sstevel@tonic-gate 
1129*7c478bd9Sstevel@tonic-gate /*
1130*7c478bd9Sstevel@tonic-gate  * DL_CONNECT_RES, M_PROTO type
1131*7c478bd9Sstevel@tonic-gate  */
1132*7c478bd9Sstevel@tonic-gate typedef struct {
1133*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_CONNECT_RES */
1134*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation; /* provider's correlation token */
1135*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_resp_token;	/* token of responding stream */
1136*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_length;  /* length of qos structure */
1137*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_offset;	/* offset from start of block */
1138*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_growth;	/* set to zero */
1139*7c478bd9Sstevel@tonic-gate } dl_connect_res_t;
1140*7c478bd9Sstevel@tonic-gate 
1141*7c478bd9Sstevel@tonic-gate /*
1142*7c478bd9Sstevel@tonic-gate  * DL_CONNECT_CON, M_PROTO type
1143*7c478bd9Sstevel@tonic-gate  */
1144*7c478bd9Sstevel@tonic-gate typedef struct {
1145*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_CONNECT_CON */
1146*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_resp_addr_length;	/* responder's address len */
1147*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_resp_addr_offset;	/* offset from start of block */
1148*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_length;		/* length of qos structure */
1149*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_offset;		/* offset from start of block */
1150*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_growth;		/* set to zero */
1151*7c478bd9Sstevel@tonic-gate } dl_connect_con_t;
1152*7c478bd9Sstevel@tonic-gate 
1153*7c478bd9Sstevel@tonic-gate /*
1154*7c478bd9Sstevel@tonic-gate  * DL_TOKEN_REQ, M_PCPROTO type
1155*7c478bd9Sstevel@tonic-gate  */
1156*7c478bd9Sstevel@tonic-gate typedef struct {
1157*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_TOKEN_REQ */
1158*7c478bd9Sstevel@tonic-gate } dl_token_req_t;
1159*7c478bd9Sstevel@tonic-gate 
1160*7c478bd9Sstevel@tonic-gate /*
1161*7c478bd9Sstevel@tonic-gate  * DL_TOKEN_ACK, M_PCPROTO type
1162*7c478bd9Sstevel@tonic-gate  */
1163*7c478bd9Sstevel@tonic-gate typedef struct {
1164*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_TOKEN_ACK */
1165*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_token;	/* Connection response token */
1166*7c478bd9Sstevel@tonic-gate }dl_token_ack_t;
1167*7c478bd9Sstevel@tonic-gate 
1168*7c478bd9Sstevel@tonic-gate /*
1169*7c478bd9Sstevel@tonic-gate  * DL_DISCONNECT_REQ, M_PROTO type
1170*7c478bd9Sstevel@tonic-gate  */
1171*7c478bd9Sstevel@tonic-gate typedef struct {
1172*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_DISCONNECT_REQ */
1173*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_reason;	/* norm., abnorm., perm. or trans. */
1174*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation; /* association with connect_ind */
1175*7c478bd9Sstevel@tonic-gate } dl_disconnect_req_t;
1176*7c478bd9Sstevel@tonic-gate 
1177*7c478bd9Sstevel@tonic-gate /*
1178*7c478bd9Sstevel@tonic-gate  * DL_DISCONNECT_IND, M_PROTO type
1179*7c478bd9Sstevel@tonic-gate  */
1180*7c478bd9Sstevel@tonic-gate typedef struct {
1181*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_DISCONNECT_IND */
1182*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_originator;	/* USER or PROVIDER */
1183*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_reason;	/* permanent or transient */
1184*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation;	/* association with connect_ind */
1185*7c478bd9Sstevel@tonic-gate } dl_disconnect_ind_t;
1186*7c478bd9Sstevel@tonic-gate 
1187*7c478bd9Sstevel@tonic-gate /*
1188*7c478bd9Sstevel@tonic-gate  * DL_RESET_REQ, M_PROTO type
1189*7c478bd9Sstevel@tonic-gate  */
1190*7c478bd9Sstevel@tonic-gate typedef struct {
1191*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_RESET_REQ */
1192*7c478bd9Sstevel@tonic-gate } dl_reset_req_t;
1193*7c478bd9Sstevel@tonic-gate 
1194*7c478bd9Sstevel@tonic-gate /*
1195*7c478bd9Sstevel@tonic-gate  * DL_RESET_IND, M_PROTO type
1196*7c478bd9Sstevel@tonic-gate  */
1197*7c478bd9Sstevel@tonic-gate typedef struct {
1198*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_RESET_IND */
1199*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_originator;	/* Provider or User */
1200*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_reason;	/* flow control, link error, resync */
1201*7c478bd9Sstevel@tonic-gate } dl_reset_ind_t;
1202*7c478bd9Sstevel@tonic-gate 
1203*7c478bd9Sstevel@tonic-gate /*
1204*7c478bd9Sstevel@tonic-gate  * DL_RESET_RES, M_PROTO type
1205*7c478bd9Sstevel@tonic-gate  */
1206*7c478bd9Sstevel@tonic-gate typedef struct {
1207*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_RESET_RES */
1208*7c478bd9Sstevel@tonic-gate } dl_reset_res_t;
1209*7c478bd9Sstevel@tonic-gate 
1210*7c478bd9Sstevel@tonic-gate /*
1211*7c478bd9Sstevel@tonic-gate  * DL_RESET_CON, M_PROTO type
1212*7c478bd9Sstevel@tonic-gate  */
1213*7c478bd9Sstevel@tonic-gate typedef struct {
1214*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_RESET_CON */
1215*7c478bd9Sstevel@tonic-gate } dl_reset_con_t;
1216*7c478bd9Sstevel@tonic-gate 
1217*7c478bd9Sstevel@tonic-gate 
1218*7c478bd9Sstevel@tonic-gate /*
1219*7c478bd9Sstevel@tonic-gate  *	CONNECTIONLESS SERVICE PRIMITIVES
1220*7c478bd9Sstevel@tonic-gate  */
1221*7c478bd9Sstevel@tonic-gate 
1222*7c478bd9Sstevel@tonic-gate /*
1223*7c478bd9Sstevel@tonic-gate  * DL_UNITDATA_REQ, M_PROTO type, with M_DATA block(s)
1224*7c478bd9Sstevel@tonic-gate  */
1225*7c478bd9Sstevel@tonic-gate typedef struct {
1226*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_UNITDATA_REQ */
1227*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* DLSAP length of dest. user */
1228*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
1229*7c478bd9Sstevel@tonic-gate 	dl_priority_t	dl_priority;	/* priority value */
1230*7c478bd9Sstevel@tonic-gate } dl_unitdata_req_t;
1231*7c478bd9Sstevel@tonic-gate 
1232*7c478bd9Sstevel@tonic-gate /*
1233*7c478bd9Sstevel@tonic-gate  * DL_UNITDATA_IND, M_PROTO type, with M_DATA block(s)
1234*7c478bd9Sstevel@tonic-gate  */
1235*7c478bd9Sstevel@tonic-gate typedef struct {
1236*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_UNITDATA_IND */
1237*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* DLSAP length of dest. user */
1238*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
1239*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* DLSAP addr length sender */
1240*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
1241*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_group_address;	/* one if multicast/broadcast */
1242*7c478bd9Sstevel@tonic-gate } dl_unitdata_ind_t;
1243*7c478bd9Sstevel@tonic-gate 
1244*7c478bd9Sstevel@tonic-gate /*
1245*7c478bd9Sstevel@tonic-gate  * DL_UDERROR_IND, M_PROTO type
1246*7c478bd9Sstevel@tonic-gate  *	(or M_PCPROTO type if LLI-based provider)
1247*7c478bd9Sstevel@tonic-gate  */
1248*7c478bd9Sstevel@tonic-gate typedef struct {
1249*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_UDERROR_IND */
1250*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* Destination DLSAP */
1251*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* Offset from start of block */
1252*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_unix_errno;		/* unix system error code */
1253*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_errno;		/* DLPI error code */
1254*7c478bd9Sstevel@tonic-gate } dl_uderror_ind_t;
1255*7c478bd9Sstevel@tonic-gate 
1256*7c478bd9Sstevel@tonic-gate /*
1257*7c478bd9Sstevel@tonic-gate  * DL_UDQOS_REQ, M_PROTO type
1258*7c478bd9Sstevel@tonic-gate  */
1259*7c478bd9Sstevel@tonic-gate typedef struct {
1260*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_UDQOS_REQ */
1261*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_length;	/* requested qos byte length */
1262*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_offset;	/* offset from start of block */
1263*7c478bd9Sstevel@tonic-gate } dl_udqos_req_t;
1264*7c478bd9Sstevel@tonic-gate 
1265*7c478bd9Sstevel@tonic-gate /*
1266*7c478bd9Sstevel@tonic-gate  *	Primitives to handle XID and TEST operations
1267*7c478bd9Sstevel@tonic-gate  */
1268*7c478bd9Sstevel@tonic-gate 
1269*7c478bd9Sstevel@tonic-gate /*
1270*7c478bd9Sstevel@tonic-gate  * DL_TEST_REQ, M_PROTO type
1271*7c478bd9Sstevel@tonic-gate  */
1272*7c478bd9Sstevel@tonic-gate typedef struct {
1273*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_TEST_REQ */
1274*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_flag;		/* poll/final */
1275*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* DLSAP length of dest. user */
1276*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
1277*7c478bd9Sstevel@tonic-gate } dl_test_req_t;
1278*7c478bd9Sstevel@tonic-gate 
1279*7c478bd9Sstevel@tonic-gate /*
1280*7c478bd9Sstevel@tonic-gate  * DL_TEST_IND, M_PROTO type
1281*7c478bd9Sstevel@tonic-gate  */
1282*7c478bd9Sstevel@tonic-gate typedef struct {
1283*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_TEST_IND */
1284*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_flag;		/* poll/final */
1285*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* dlsap length of dest. user */
1286*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
1287*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* dlsap length of source */
1288*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
1289*7c478bd9Sstevel@tonic-gate } dl_test_ind_t;
1290*7c478bd9Sstevel@tonic-gate 
1291*7c478bd9Sstevel@tonic-gate /*
1292*7c478bd9Sstevel@tonic-gate  *	DL_TEST_RES, M_PROTO type
1293*7c478bd9Sstevel@tonic-gate  */
1294*7c478bd9Sstevel@tonic-gate typedef struct {
1295*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_TEST_RES */
1296*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_flag;		/* poll/final */
1297*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* DLSAP length of dest. user */
1298*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
1299*7c478bd9Sstevel@tonic-gate } dl_test_res_t;
1300*7c478bd9Sstevel@tonic-gate 
1301*7c478bd9Sstevel@tonic-gate /*
1302*7c478bd9Sstevel@tonic-gate  *	DL_TEST_CON, M_PROTO type
1303*7c478bd9Sstevel@tonic-gate  */
1304*7c478bd9Sstevel@tonic-gate typedef struct {
1305*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_TEST_CON */
1306*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_flag;		/* poll/final */
1307*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* dlsap length of dest. user */
1308*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
1309*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* dlsap length of source */
1310*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
1311*7c478bd9Sstevel@tonic-gate } dl_test_con_t;
1312*7c478bd9Sstevel@tonic-gate 
1313*7c478bd9Sstevel@tonic-gate /*
1314*7c478bd9Sstevel@tonic-gate  * DL_XID_REQ, M_PROTO type
1315*7c478bd9Sstevel@tonic-gate  */
1316*7c478bd9Sstevel@tonic-gate typedef struct {
1317*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_XID_REQ */
1318*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_flag;		/* poll/final */
1319*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* dlsap length of dest. user */
1320*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
1321*7c478bd9Sstevel@tonic-gate } dl_xid_req_t;
1322*7c478bd9Sstevel@tonic-gate 
1323*7c478bd9Sstevel@tonic-gate /*
1324*7c478bd9Sstevel@tonic-gate  * DL_XID_IND, M_PROTO type
1325*7c478bd9Sstevel@tonic-gate  */
1326*7c478bd9Sstevel@tonic-gate typedef struct {
1327*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_XID_IND */
1328*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_flag;		/* poll/final */
1329*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* dlsap length of dest. user */
1330*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
1331*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* dlsap length of source */
1332*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
1333*7c478bd9Sstevel@tonic-gate } dl_xid_ind_t;
1334*7c478bd9Sstevel@tonic-gate 
1335*7c478bd9Sstevel@tonic-gate /*
1336*7c478bd9Sstevel@tonic-gate  *	DL_XID_RES, M_PROTO type
1337*7c478bd9Sstevel@tonic-gate  */
1338*7c478bd9Sstevel@tonic-gate typedef struct {
1339*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_XID_RES */
1340*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_flag;		/* poll/final */
1341*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* DLSAP length of dest. user */
1342*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
1343*7c478bd9Sstevel@tonic-gate } dl_xid_res_t;
1344*7c478bd9Sstevel@tonic-gate 
1345*7c478bd9Sstevel@tonic-gate /*
1346*7c478bd9Sstevel@tonic-gate  *	DL_XID_CON, M_PROTO type
1347*7c478bd9Sstevel@tonic-gate  */
1348*7c478bd9Sstevel@tonic-gate typedef struct {
1349*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_XID_CON */
1350*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_flag;		/* poll/final */
1351*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* dlsap length of dest. user */
1352*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
1353*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* dlsap length of source */
1354*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
1355*7c478bd9Sstevel@tonic-gate } dl_xid_con_t;
1356*7c478bd9Sstevel@tonic-gate 
1357*7c478bd9Sstevel@tonic-gate /*
1358*7c478bd9Sstevel@tonic-gate  *	ACKNOWLEDGED CONNECTIONLESS SERVICE PRIMITIVES
1359*7c478bd9Sstevel@tonic-gate  */
1360*7c478bd9Sstevel@tonic-gate 
1361*7c478bd9Sstevel@tonic-gate /*
1362*7c478bd9Sstevel@tonic-gate  * DL_DATA_ACK_REQ, M_PROTO type
1363*7c478bd9Sstevel@tonic-gate  */
1364*7c478bd9Sstevel@tonic-gate typedef struct {
1365*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_DATA_ACK_REQ */
1366*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation;		/* User's correlation token */
1367*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* length of destination addr */
1368*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
1369*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* length of source address */
1370*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
1371*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_priority;		/* priority */
1372*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_service_class;	/* DL_RQST_RSP|DL_RQST_NORSP */
1373*7c478bd9Sstevel@tonic-gate } dl_data_ack_req_t;
1374*7c478bd9Sstevel@tonic-gate 
1375*7c478bd9Sstevel@tonic-gate /*
1376*7c478bd9Sstevel@tonic-gate  * DL_DATA_ACK_IND, M_PROTO type
1377*7c478bd9Sstevel@tonic-gate  */
1378*7c478bd9Sstevel@tonic-gate typedef struct {
1379*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_DATA_ACK_IND */
1380*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* length of destination addr */
1381*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
1382*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* length of source address */
1383*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
1384*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_priority;		/* pri. for data unit transm. */
1385*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_service_class;	/* DL_RQST_RSP|DL_RQST_NORSP */
1386*7c478bd9Sstevel@tonic-gate } dl_data_ack_ind_t;
1387*7c478bd9Sstevel@tonic-gate 
1388*7c478bd9Sstevel@tonic-gate /*
1389*7c478bd9Sstevel@tonic-gate  * DL_DATA_ACK_STATUS_IND, M_PROTO type
1390*7c478bd9Sstevel@tonic-gate  */
1391*7c478bd9Sstevel@tonic-gate typedef struct {
1392*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_DATA_ACK_STATUS_IND */
1393*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation;	/* User's correlation token */
1394*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_status;	/* success or failure of previous req */
1395*7c478bd9Sstevel@tonic-gate } dl_data_ack_status_ind_t;
1396*7c478bd9Sstevel@tonic-gate 
1397*7c478bd9Sstevel@tonic-gate /*
1398*7c478bd9Sstevel@tonic-gate  * DL_REPLY_REQ, M_PROTO type
1399*7c478bd9Sstevel@tonic-gate  */
1400*7c478bd9Sstevel@tonic-gate typedef struct {
1401*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_REPLY_REQ */
1402*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation;		/* User's correlation token */
1403*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* destination address length */
1404*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
1405*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* source address length */
1406*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
1407*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_priority;		/* pri for data unit trans. */
1408*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_service_class;
1409*7c478bd9Sstevel@tonic-gate } dl_reply_req_t;
1410*7c478bd9Sstevel@tonic-gate 
1411*7c478bd9Sstevel@tonic-gate /*
1412*7c478bd9Sstevel@tonic-gate  * DL_REPLY_IND, M_PROTO type
1413*7c478bd9Sstevel@tonic-gate  */
1414*7c478bd9Sstevel@tonic-gate typedef struct {
1415*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_REPLY_IND */
1416*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* destination address length */
1417*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
1418*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* length of source address */
1419*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
1420*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_priority;		/* pri for data unit trans. */
1421*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_service_class;	/* DL_RQST_RSP|DL_RQST_NORSP */
1422*7c478bd9Sstevel@tonic-gate } dl_reply_ind_t;
1423*7c478bd9Sstevel@tonic-gate 
1424*7c478bd9Sstevel@tonic-gate /*
1425*7c478bd9Sstevel@tonic-gate  * DL_REPLY_STATUS_IND, M_PROTO type
1426*7c478bd9Sstevel@tonic-gate  */
1427*7c478bd9Sstevel@tonic-gate typedef struct {
1428*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_REPLY_STATUS_IND */
1429*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation;	/* User's correlation token */
1430*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_status;	/* success or failure of previous req */
1431*7c478bd9Sstevel@tonic-gate } dl_reply_status_ind_t;
1432*7c478bd9Sstevel@tonic-gate 
1433*7c478bd9Sstevel@tonic-gate /*
1434*7c478bd9Sstevel@tonic-gate  * DL_REPLY_UPDATE_REQ, M_PROTO type
1435*7c478bd9Sstevel@tonic-gate  */
1436*7c478bd9Sstevel@tonic-gate typedef struct {
1437*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_REPLY_UPDATE_REQ */
1438*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation;		/* user's correlation token */
1439*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* length of source address */
1440*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
1441*7c478bd9Sstevel@tonic-gate } dl_reply_update_req_t;
1442*7c478bd9Sstevel@tonic-gate 
1443*7c478bd9Sstevel@tonic-gate /*
1444*7c478bd9Sstevel@tonic-gate  * DL_REPLY_UPDATE_STATUS_IND, M_PROTO type
1445*7c478bd9Sstevel@tonic-gate  */
1446*7c478bd9Sstevel@tonic-gate typedef struct {
1447*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_REPLY_UPDATE_STATUS_IND */
1448*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation;	/* User's correlation token */
1449*7c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_status;	/* success or failure of previous req */
1450*7c478bd9Sstevel@tonic-gate } dl_reply_update_status_ind_t;
1451*7c478bd9Sstevel@tonic-gate 
1452*7c478bd9Sstevel@tonic-gate union DL_primitives {
1453*7c478bd9Sstevel@tonic-gate 	t_uscalar_t		dl_primitive;
1454*7c478bd9Sstevel@tonic-gate 	dl_info_req_t		info_req;
1455*7c478bd9Sstevel@tonic-gate 	dl_info_ack_t		info_ack;
1456*7c478bd9Sstevel@tonic-gate 	dl_attach_req_t		attach_req;
1457*7c478bd9Sstevel@tonic-gate 	dl_detach_req_t		detach_req;
1458*7c478bd9Sstevel@tonic-gate 	dl_bind_req_t		bind_req;
1459*7c478bd9Sstevel@tonic-gate 	dl_bind_ack_t		bind_ack;
1460*7c478bd9Sstevel@tonic-gate 	dl_unbind_req_t		unbind_req;
1461*7c478bd9Sstevel@tonic-gate 	dl_subs_bind_req_t	subs_bind_req;
1462*7c478bd9Sstevel@tonic-gate 	dl_subs_bind_ack_t	subs_bind_ack;
1463*7c478bd9Sstevel@tonic-gate 	dl_subs_unbind_req_t	subs_unbind_req;
1464*7c478bd9Sstevel@tonic-gate 	dl_ok_ack_t		ok_ack;
1465*7c478bd9Sstevel@tonic-gate 	dl_error_ack_t		error_ack;
1466*7c478bd9Sstevel@tonic-gate 	dl_connect_req_t	connect_req;
1467*7c478bd9Sstevel@tonic-gate 	dl_connect_ind_t	connect_ind;
1468*7c478bd9Sstevel@tonic-gate 	dl_connect_res_t	connect_res;
1469*7c478bd9Sstevel@tonic-gate 	dl_connect_con_t	connect_con;
1470*7c478bd9Sstevel@tonic-gate 	dl_token_req_t		token_req;
1471*7c478bd9Sstevel@tonic-gate 	dl_token_ack_t		token_ack;
1472*7c478bd9Sstevel@tonic-gate 	dl_disconnect_req_t	disconnect_req;
1473*7c478bd9Sstevel@tonic-gate 	dl_disconnect_ind_t	disconnect_ind;
1474*7c478bd9Sstevel@tonic-gate 	dl_reset_req_t		reset_req;
1475*7c478bd9Sstevel@tonic-gate 	dl_reset_ind_t		reset_ind;
1476*7c478bd9Sstevel@tonic-gate 	dl_reset_res_t		reset_res;
1477*7c478bd9Sstevel@tonic-gate 	dl_reset_con_t		reset_con;
1478*7c478bd9Sstevel@tonic-gate 	dl_unitdata_req_t	unitdata_req;
1479*7c478bd9Sstevel@tonic-gate 	dl_unitdata_ind_t	unitdata_ind;
1480*7c478bd9Sstevel@tonic-gate 	dl_uderror_ind_t	uderror_ind;
1481*7c478bd9Sstevel@tonic-gate 	dl_udqos_req_t		udqos_req;
1482*7c478bd9Sstevel@tonic-gate 	dl_enabmulti_req_t	enabmulti_req;
1483*7c478bd9Sstevel@tonic-gate 	dl_disabmulti_req_t	disabmulti_req;
1484*7c478bd9Sstevel@tonic-gate 	dl_promiscon_req_t	promiscon_req;
1485*7c478bd9Sstevel@tonic-gate 	dl_promiscoff_req_t	promiscoff_req;
1486*7c478bd9Sstevel@tonic-gate 	dl_phys_addr_req_t	physaddr_req;
1487*7c478bd9Sstevel@tonic-gate 	dl_phys_addr_ack_t	physaddr_ack;
1488*7c478bd9Sstevel@tonic-gate 	dl_set_phys_addr_req_t	set_physaddr_req;
1489*7c478bd9Sstevel@tonic-gate 	dl_get_statistics_req_t	get_statistics_req;
1490*7c478bd9Sstevel@tonic-gate 	dl_get_statistics_ack_t	get_statistics_ack;
1491*7c478bd9Sstevel@tonic-gate 	dl_notify_req_t		notify_req;
1492*7c478bd9Sstevel@tonic-gate 	dl_notify_ack_t		notify_ack;
1493*7c478bd9Sstevel@tonic-gate 	dl_notify_ind_t		notify_ind;
1494*7c478bd9Sstevel@tonic-gate 	dl_aggr_req_t		aggr_req;
1495*7c478bd9Sstevel@tonic-gate 	dl_aggr_ind_t		aggr_ind;
1496*7c478bd9Sstevel@tonic-gate 	dl_unaggr_req_t		unaggr_req;
1497*7c478bd9Sstevel@tonic-gate 	dl_test_req_t		test_req;
1498*7c478bd9Sstevel@tonic-gate 	dl_test_ind_t		test_ind;
1499*7c478bd9Sstevel@tonic-gate 	dl_test_res_t		test_res;
1500*7c478bd9Sstevel@tonic-gate 	dl_test_con_t		test_con;
1501*7c478bd9Sstevel@tonic-gate 	dl_xid_req_t		xid_req;
1502*7c478bd9Sstevel@tonic-gate 	dl_xid_ind_t		xid_ind;
1503*7c478bd9Sstevel@tonic-gate 	dl_xid_res_t		xid_res;
1504*7c478bd9Sstevel@tonic-gate 	dl_xid_con_t		xid_con;
1505*7c478bd9Sstevel@tonic-gate 	dl_data_ack_req_t	data_ack_req;
1506*7c478bd9Sstevel@tonic-gate 	dl_data_ack_ind_t	data_ack_ind;
1507*7c478bd9Sstevel@tonic-gate 	dl_data_ack_status_ind_t	data_ack_status_ind;
1508*7c478bd9Sstevel@tonic-gate 	dl_reply_req_t		reply_req;
1509*7c478bd9Sstevel@tonic-gate 	dl_reply_ind_t		reply_ind;
1510*7c478bd9Sstevel@tonic-gate 	dl_reply_status_ind_t	reply_status_ind;
1511*7c478bd9Sstevel@tonic-gate 	dl_reply_update_req_t	reply_update_req;
1512*7c478bd9Sstevel@tonic-gate 	dl_reply_update_status_ind_t	reply_update_status_ind;
1513*7c478bd9Sstevel@tonic-gate 	dl_capability_req_t	capability_req;
1514*7c478bd9Sstevel@tonic-gate 	dl_capability_ack_t	capability_ack;
1515*7c478bd9Sstevel@tonic-gate 	dl_control_req_t	control_req;
1516*7c478bd9Sstevel@tonic-gate 	dl_control_ack_t	control_ack;
1517*7c478bd9Sstevel@tonic-gate 	dl_passive_req_t	passive_req;
1518*7c478bd9Sstevel@tonic-gate };
1519*7c478bd9Sstevel@tonic-gate 
1520*7c478bd9Sstevel@tonic-gate #define	DL_INFO_REQ_SIZE	sizeof (dl_info_req_t)
1521*7c478bd9Sstevel@tonic-gate #define	DL_INFO_ACK_SIZE	sizeof (dl_info_ack_t)
1522*7c478bd9Sstevel@tonic-gate #define	DL_ATTACH_REQ_SIZE	sizeof (dl_attach_req_t)
1523*7c478bd9Sstevel@tonic-gate #define	DL_DETACH_REQ_SIZE	sizeof (dl_detach_req_t)
1524*7c478bd9Sstevel@tonic-gate #define	DL_BIND_REQ_SIZE	sizeof (dl_bind_req_t)
1525*7c478bd9Sstevel@tonic-gate #define	DL_BIND_ACK_SIZE	sizeof (dl_bind_ack_t)
1526*7c478bd9Sstevel@tonic-gate #define	DL_UNBIND_REQ_SIZE	sizeof (dl_unbind_req_t)
1527*7c478bd9Sstevel@tonic-gate #define	DL_SUBS_BIND_REQ_SIZE	sizeof (dl_subs_bind_req_t)
1528*7c478bd9Sstevel@tonic-gate #define	DL_SUBS_BIND_ACK_SIZE	sizeof (dl_subs_bind_ack_t)
1529*7c478bd9Sstevel@tonic-gate #define	DL_SUBS_UNBIND_REQ_SIZE	sizeof (dl_subs_unbind_req_t)
1530*7c478bd9Sstevel@tonic-gate #define	DL_OK_ACK_SIZE		sizeof (dl_ok_ack_t)
1531*7c478bd9Sstevel@tonic-gate #define	DL_ERROR_ACK_SIZE	sizeof (dl_error_ack_t)
1532*7c478bd9Sstevel@tonic-gate #define	DL_CONNECT_REQ_SIZE	sizeof (dl_connect_req_t)
1533*7c478bd9Sstevel@tonic-gate #define	DL_CONNECT_IND_SIZE	sizeof (dl_connect_ind_t)
1534*7c478bd9Sstevel@tonic-gate #define	DL_CONNECT_RES_SIZE	sizeof (dl_connect_res_t)
1535*7c478bd9Sstevel@tonic-gate #define	DL_CONNECT_CON_SIZE	sizeof (dl_connect_con_t)
1536*7c478bd9Sstevel@tonic-gate #define	DL_TOKEN_REQ_SIZE	sizeof (dl_token_req_t)
1537*7c478bd9Sstevel@tonic-gate #define	DL_TOKEN_ACK_SIZE	sizeof (dl_token_ack_t)
1538*7c478bd9Sstevel@tonic-gate #define	DL_DISCONNECT_REQ_SIZE	sizeof (dl_disconnect_req_t)
1539*7c478bd9Sstevel@tonic-gate #define	DL_DISCONNECT_IND_SIZE	sizeof (dl_disconnect_ind_t)
1540*7c478bd9Sstevel@tonic-gate #define	DL_RESET_REQ_SIZE	sizeof (dl_reset_req_t)
1541*7c478bd9Sstevel@tonic-gate #define	DL_RESET_IND_SIZE	sizeof (dl_reset_ind_t)
1542*7c478bd9Sstevel@tonic-gate #define	DL_RESET_RES_SIZE	sizeof (dl_reset_res_t)
1543*7c478bd9Sstevel@tonic-gate #define	DL_RESET_CON_SIZE	sizeof (dl_reset_con_t)
1544*7c478bd9Sstevel@tonic-gate #define	DL_UNITDATA_REQ_SIZE	sizeof (dl_unitdata_req_t)
1545*7c478bd9Sstevel@tonic-gate #define	DL_UNITDATA_IND_SIZE	sizeof (dl_unitdata_ind_t)
1546*7c478bd9Sstevel@tonic-gate #define	DL_UDERROR_IND_SIZE	sizeof (dl_uderror_ind_t)
1547*7c478bd9Sstevel@tonic-gate #define	DL_UDQOS_REQ_SIZE	sizeof (dl_udqos_req_t)
1548*7c478bd9Sstevel@tonic-gate #define	DL_ENABMULTI_REQ_SIZE	sizeof (dl_enabmulti_req_t)
1549*7c478bd9Sstevel@tonic-gate #define	DL_DISABMULTI_REQ_SIZE	sizeof (dl_disabmulti_req_t)
1550*7c478bd9Sstevel@tonic-gate #define	DL_PROMISCON_REQ_SIZE	sizeof (dl_promiscon_req_t)
1551*7c478bd9Sstevel@tonic-gate #define	DL_PROMISCOFF_REQ_SIZE	sizeof (dl_promiscoff_req_t)
1552*7c478bd9Sstevel@tonic-gate #define	DL_PHYS_ADDR_REQ_SIZE	sizeof (dl_phys_addr_req_t)
1553*7c478bd9Sstevel@tonic-gate #define	DL_PHYS_ADDR_ACK_SIZE	sizeof (dl_phys_addr_ack_t)
1554*7c478bd9Sstevel@tonic-gate #define	DL_SET_PHYS_ADDR_REQ_SIZE	sizeof (dl_set_phys_addr_req_t)
1555*7c478bd9Sstevel@tonic-gate #define	DL_GET_STATISTICS_REQ_SIZE	sizeof (dl_get_statistics_req_t)
1556*7c478bd9Sstevel@tonic-gate #define	DL_GET_STATISTICS_ACK_SIZE	sizeof (dl_get_statistics_ack_t)
1557*7c478bd9Sstevel@tonic-gate #define	DL_NOTIFY_REQ_SIZE	sizeof (dl_notify_req_t)
1558*7c478bd9Sstevel@tonic-gate #define	DL_NOTIFY_ACK_SIZE	sizeof (dl_notify_ack_t)
1559*7c478bd9Sstevel@tonic-gate #define	DL_NOTIFY_IND_SIZE	sizeof (dl_notify_ind_t)
1560*7c478bd9Sstevel@tonic-gate #define	DL_AGGR_REQ_SIZE	sizeof (dl_aggr_req_t)
1561*7c478bd9Sstevel@tonic-gate #define	DL_AGGR_IND_SIZE	sizeof (dl_aggr_ind_t)
1562*7c478bd9Sstevel@tonic-gate #define	DL_UNAGGR_REQ_SIZE	sizeof (dl_unaggr_req_t)
1563*7c478bd9Sstevel@tonic-gate #define	DL_XID_REQ_SIZE		sizeof (dl_xid_req_t)
1564*7c478bd9Sstevel@tonic-gate #define	DL_XID_IND_SIZE		sizeof (dl_xid_ind_t)
1565*7c478bd9Sstevel@tonic-gate #define	DL_XID_RES_SIZE		sizeof (dl_xid_res_t)
1566*7c478bd9Sstevel@tonic-gate #define	DL_XID_CON_SIZE		sizeof (dl_xid_con_t)
1567*7c478bd9Sstevel@tonic-gate #define	DL_TEST_REQ_SIZE	sizeof (dl_test_req_t)
1568*7c478bd9Sstevel@tonic-gate #define	DL_TEST_IND_SIZE	sizeof (dl_test_ind_t)
1569*7c478bd9Sstevel@tonic-gate #define	DL_TEST_RES_SIZE	sizeof (dl_test_res_t)
1570*7c478bd9Sstevel@tonic-gate #define	DL_TEST_CON_SIZE	sizeof (dl_test_con_t)
1571*7c478bd9Sstevel@tonic-gate #define	DL_DATA_ACK_REQ_SIZE	sizeof (dl_data_ack_req_t)
1572*7c478bd9Sstevel@tonic-gate #define	DL_DATA_ACK_IND_SIZE	sizeof (dl_data_ack_ind_t)
1573*7c478bd9Sstevel@tonic-gate #define	DL_DATA_ACK_STATUS_IND_SIZE	sizeof (dl_data_ack_status_ind_t)
1574*7c478bd9Sstevel@tonic-gate #define	DL_REPLY_REQ_SIZE	sizeof (dl_reply_req_t)
1575*7c478bd9Sstevel@tonic-gate #define	DL_REPLY_IND_SIZE	sizeof (dl_reply_ind_t)
1576*7c478bd9Sstevel@tonic-gate #define	DL_REPLY_STATUS_IND_SIZE	sizeof (dl_reply_status_ind_t)
1577*7c478bd9Sstevel@tonic-gate #define	DL_REPLY_UPDATE_REQ_SIZE	sizeof (dl_reply_update_req_t)
1578*7c478bd9Sstevel@tonic-gate #define	DL_REPLY_UPDATE_STATUS_IND_SIZE	sizeof (dl_reply_update_status_ind_t)
1579*7c478bd9Sstevel@tonic-gate #define	DL_CAPABILITY_REQ_SIZE	sizeof (dl_capability_req_t)
1580*7c478bd9Sstevel@tonic-gate #define	DL_CAPABILITY_ACK_SIZE	sizeof (dl_capability_ack_t)
1581*7c478bd9Sstevel@tonic-gate #define	DL_CONTROL_REQ_SIZE	sizeof (dl_control_req_t)
1582*7c478bd9Sstevel@tonic-gate #define	DL_CONTROL_ACK_SIZE	sizeof (dl_control_ack_t)
1583*7c478bd9Sstevel@tonic-gate #define	DL_PASSIVE_REQ_SIZE	sizeof (dl_passive_req_t)
1584*7c478bd9Sstevel@tonic-gate 
1585*7c478bd9Sstevel@tonic-gate #ifdef	_KERNEL
1586*7c478bd9Sstevel@tonic-gate /*
1587*7c478bd9Sstevel@tonic-gate  * The following are unstable, internal DLPI utility routines.
1588*7c478bd9Sstevel@tonic-gate  */
1589*7c478bd9Sstevel@tonic-gate extern void	dlbindack(queue_t *, mblk_t *, t_scalar_t, void *, t_uscalar_t,
1590*7c478bd9Sstevel@tonic-gate 		    t_uscalar_t, t_uscalar_t);
1591*7c478bd9Sstevel@tonic-gate extern void	dlokack(queue_t *, mblk_t *, t_uscalar_t);
1592*7c478bd9Sstevel@tonic-gate extern void	dlerrorack(queue_t *, mblk_t *, t_uscalar_t, t_uscalar_t,
1593*7c478bd9Sstevel@tonic-gate 		    t_uscalar_t);
1594*7c478bd9Sstevel@tonic-gate extern void	dluderrorind(queue_t *, mblk_t *, void *, t_uscalar_t,
1595*7c478bd9Sstevel@tonic-gate 		    t_uscalar_t, t_uscalar_t);
1596*7c478bd9Sstevel@tonic-gate extern void	dlphysaddrack(queue_t *, mblk_t *, void *, t_uscalar_t);
1597*7c478bd9Sstevel@tonic-gate extern void	dlcapabsetqid(dl_mid_t *, const queue_t *);
1598*7c478bd9Sstevel@tonic-gate extern boolean_t dlcapabcheckqid(const dl_mid_t *, const queue_t *);
1599*7c478bd9Sstevel@tonic-gate extern void	dlnotifyack(queue_t *, mblk_t *, uint32_t);
1600*7c478bd9Sstevel@tonic-gate #endif	/* _KERNEL */
1601*7c478bd9Sstevel@tonic-gate 
1602*7c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
1603*7c478bd9Sstevel@tonic-gate }
1604*7c478bd9Sstevel@tonic-gate #endif
1605*7c478bd9Sstevel@tonic-gate 
1606*7c478bd9Sstevel@tonic-gate #endif /* _SYS_DLPI_H */
1607