xref: /titanic_53/usr/src/uts/common/sys/dlpi.h (revision b127ac411761a3d8d642d9342d9cac2785e1faaa)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
58347601bSyl150051  * Common Development and Distribution License (the "License").
68347601bSyl150051  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217c478bd9Sstevel@tonic-gate /*
22d62bc4baSyz147064  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
237c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
247c478bd9Sstevel@tonic-gate  */
257c478bd9Sstevel@tonic-gate 
267c478bd9Sstevel@tonic-gate /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
277c478bd9Sstevel@tonic-gate /*	  All Rights Reserved	*/
287c478bd9Sstevel@tonic-gate 
297c478bd9Sstevel@tonic-gate 
307c478bd9Sstevel@tonic-gate /*
317c478bd9Sstevel@tonic-gate  * Data Link Provider Interface, Version 2.0
327c478bd9Sstevel@tonic-gate  * Refer to document: "STREAMS DLPI Spec", 800-6915-01.
337c478bd9Sstevel@tonic-gate  */
347c478bd9Sstevel@tonic-gate 
357c478bd9Sstevel@tonic-gate #ifndef	_SYS_DLPI_H
367c478bd9Sstevel@tonic-gate #define	_SYS_DLPI_H
377c478bd9Sstevel@tonic-gate 
387c478bd9Sstevel@tonic-gate #include <sys/types.h>
397c478bd9Sstevel@tonic-gate #include <sys/stream.h>
407c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
417c478bd9Sstevel@tonic-gate extern "C" {
427c478bd9Sstevel@tonic-gate #endif
437c478bd9Sstevel@tonic-gate 
447c478bd9Sstevel@tonic-gate /*
457c478bd9Sstevel@tonic-gate  * Sun additions.
467c478bd9Sstevel@tonic-gate  */
477c478bd9Sstevel@tonic-gate #define	DLIOC		('D' << 8)
487c478bd9Sstevel@tonic-gate #define	DLIOCRAW	(DLIOC|1)	/* M_DATA "raw" mode */
490ba2cbe9Sxc151355 #define	DLIOCNATIVE	(DLIOC|2)	/* Native traffic mode */
50d62bc4baSyz147064 #define	DLIOCMARGININFO	(DLIOC|3)	/* margin size info */
51*b127ac41SPhilip Kirk #define	DLIOCIPNETINFO	(DLIOC|4)	/* ipnet header */
527c478bd9Sstevel@tonic-gate #define	DLIOCHDRINFO	(DLIOC|10)	/* IP fast-path */
537c478bd9Sstevel@tonic-gate #define	DL_IOC_HDR_INFO	DLIOCHDRINFO
547c478bd9Sstevel@tonic-gate 
55*b127ac41SPhilip Kirk #define	DL_IPNETINFO_VERSION	0x1
56*b127ac41SPhilip Kirk 
57*b127ac41SPhilip Kirk typedef struct dl_ipnetinfo {
58*b127ac41SPhilip Kirk 	uint8_t		dli_version;	/* DL_IPNETINFO_* version */
59*b127ac41SPhilip Kirk 	uint8_t		dli_ipver;	/* packet IP header version */
60*b127ac41SPhilip Kirk 	uint16_t	dli_len;	/* length of dl_ipnetinfo_t */
61*b127ac41SPhilip Kirk 	uint32_t	dli_pad;	/* alignment pad */
62*b127ac41SPhilip Kirk 	uint64_t	dli_srczone; 	/* packet source zone ID (if any) */
63*b127ac41SPhilip Kirk 	uint64_t	dli_dstzone;	/* packet dest zone ID (if any) */
64*b127ac41SPhilip Kirk } dl_ipnetinfo_t;
65*b127ac41SPhilip Kirk 
667c478bd9Sstevel@tonic-gate /*
677c478bd9Sstevel@tonic-gate  * DLPI revision definition history
687c478bd9Sstevel@tonic-gate  */
697c478bd9Sstevel@tonic-gate #define	DL_CURRENT_VERSION	0x02	/* current version of dlpi */
707c478bd9Sstevel@tonic-gate #define	DL_VERSION_2		0x02	/* version of dlpi March 12, 1991 */
717c478bd9Sstevel@tonic-gate 
727c478bd9Sstevel@tonic-gate /*
737c478bd9Sstevel@tonic-gate  * Primitives for Local Management Services
747c478bd9Sstevel@tonic-gate  */
757c478bd9Sstevel@tonic-gate #define	DL_INFO_REQ		0x00	/* Information Req */
767c478bd9Sstevel@tonic-gate #define	DL_INFO_ACK		0x03	/* Information Ack */
777c478bd9Sstevel@tonic-gate #define	DL_ATTACH_REQ		0x0b	/* Attach a PPA */
787c478bd9Sstevel@tonic-gate #define	DL_DETACH_REQ		0x0c	/* Detach a PPA */
797c478bd9Sstevel@tonic-gate #define	DL_BIND_REQ		0x01	/* Bind dlsap address */
807c478bd9Sstevel@tonic-gate #define	DL_BIND_ACK		0x04	/* Dlsap address bound */
817c478bd9Sstevel@tonic-gate #define	DL_UNBIND_REQ		0x02	/* Unbind dlsap address */
827c478bd9Sstevel@tonic-gate #define	DL_OK_ACK		0x06	/* Success acknowledgment */
837c478bd9Sstevel@tonic-gate #define	DL_ERROR_ACK		0x05	/* Error acknowledgment */
847c478bd9Sstevel@tonic-gate #define	DL_SUBS_BIND_REQ	0x1b	/* Bind Subsequent DLSAP address */
857c478bd9Sstevel@tonic-gate #define	DL_SUBS_BIND_ACK	0x1c	/* Subsequent DLSAP address bound */
867c478bd9Sstevel@tonic-gate #define	DL_SUBS_UNBIND_REQ	0x15	/* Subsequent unbind */
877c478bd9Sstevel@tonic-gate #define	DL_ENABMULTI_REQ	0x1d	/* Enable multicast addresses */
887c478bd9Sstevel@tonic-gate #define	DL_DISABMULTI_REQ	0x1e	/* Disable multicast addresses */
897c478bd9Sstevel@tonic-gate #define	DL_PROMISCON_REQ	0x1f	/* Turn on promiscuous mode */
907c478bd9Sstevel@tonic-gate #define	DL_PROMISCOFF_REQ	0x20	/* Turn off promiscuous mode */
917c478bd9Sstevel@tonic-gate 
927c478bd9Sstevel@tonic-gate /*
937c478bd9Sstevel@tonic-gate  * Solaris specific local management
947c478bd9Sstevel@tonic-gate  */
957c478bd9Sstevel@tonic-gate #define	DL_NOTIFY_REQ		0x100	/* Enable notifications */
967c478bd9Sstevel@tonic-gate #define	DL_NOTIFY_ACK		0x101	/* Supported notifications */
977c478bd9Sstevel@tonic-gate #define	DL_NOTIFY_IND		0x102	/* Notification from provider */
987c478bd9Sstevel@tonic-gate #define	DL_AGGR_REQ		0x103	/* Enable link aggregation */
997c478bd9Sstevel@tonic-gate #define	DL_AGGR_IND		0x104	/* Result from link aggregation */
1007c478bd9Sstevel@tonic-gate #define	DL_UNAGGR_REQ		0x105	/* Disable link aggregation */
1017c478bd9Sstevel@tonic-gate #define	DL_CAPABILITY_REQ	0x110	/* Capability request */
1027c478bd9Sstevel@tonic-gate #define	DL_CAPABILITY_ACK	0x111	/* Capability ack */
1037c478bd9Sstevel@tonic-gate #define	DL_CONTROL_REQ		0x112	/* Device specific control request */
1047c478bd9Sstevel@tonic-gate #define	DL_CONTROL_ACK		0x113	/* Device specific control ack */
1057c478bd9Sstevel@tonic-gate #define	DL_PASSIVE_REQ		0x114	/* Allow access to aggregated link */
106023dbbefSjoycey #define	DL_INTR_MODE_REQ	0x115	/* Request Rx processing in INTR mode */
1077c478bd9Sstevel@tonic-gate 
1087c478bd9Sstevel@tonic-gate /*
1097c478bd9Sstevel@tonic-gate  * Primitives used for Connectionless Service
1107c478bd9Sstevel@tonic-gate  */
1117c478bd9Sstevel@tonic-gate #define	DL_UNITDATA_REQ		0x07	/* datagram send request */
1127c478bd9Sstevel@tonic-gate #define	DL_UNITDATA_IND		0x08	/* datagram receive indication */
1137c478bd9Sstevel@tonic-gate #define	DL_UDERROR_IND		0x09	/* datagram error indication */
1147c478bd9Sstevel@tonic-gate #define	DL_UDQOS_REQ		0x0a	/* set QOS for subsequent datagrams */
1157c478bd9Sstevel@tonic-gate 
1167c478bd9Sstevel@tonic-gate /*
1177c478bd9Sstevel@tonic-gate  * Primitives used for Connection-Oriented Service
1187c478bd9Sstevel@tonic-gate  */
1197c478bd9Sstevel@tonic-gate #define	DL_CONNECT_REQ		0x0d	/* Connect request */
1207c478bd9Sstevel@tonic-gate #define	DL_CONNECT_IND		0x0e	/* Incoming connect indication */
1217c478bd9Sstevel@tonic-gate #define	DL_CONNECT_RES		0x0f	/* Accept previous connect indication */
1227c478bd9Sstevel@tonic-gate #define	DL_CONNECT_CON		0x10	/* Connection established */
1237c478bd9Sstevel@tonic-gate 
1247c478bd9Sstevel@tonic-gate #define	DL_TOKEN_REQ		0x11	/* Passoff token request */
1257c478bd9Sstevel@tonic-gate #define	DL_TOKEN_ACK		0x12	/* Passoff token ack */
1267c478bd9Sstevel@tonic-gate 
1277c478bd9Sstevel@tonic-gate #define	DL_DISCONNECT_REQ	0x13	/* Disconnect request */
1287c478bd9Sstevel@tonic-gate #define	DL_DISCONNECT_IND	0x14	/* Disconnect indication */
1297c478bd9Sstevel@tonic-gate 
1307c478bd9Sstevel@tonic-gate #define	DL_RESET_REQ		0x17	/* Reset service request */
1317c478bd9Sstevel@tonic-gate #define	DL_RESET_IND		0x18	/* Incoming reset indication */
1327c478bd9Sstevel@tonic-gate #define	DL_RESET_RES		0x19	/* Complete reset processing */
1337c478bd9Sstevel@tonic-gate #define	DL_RESET_CON		0x1a	/* Reset processing complete */
1347c478bd9Sstevel@tonic-gate 
1357c478bd9Sstevel@tonic-gate /*
1367c478bd9Sstevel@tonic-gate  *  Primitives used for Acknowledged Connectionless Service
1377c478bd9Sstevel@tonic-gate  */
1387c478bd9Sstevel@tonic-gate 
1397c478bd9Sstevel@tonic-gate #define	DL_DATA_ACK_REQ		0x21	/* data unit transmission request */
1407c478bd9Sstevel@tonic-gate #define	DL_DATA_ACK_IND		0x22	/* Arrival of a command PDU */
1417c478bd9Sstevel@tonic-gate #define	DL_DATA_ACK_STATUS_IND	0x23	/* Status indication of DATA_ACK_REQ */
1427c478bd9Sstevel@tonic-gate #define	DL_REPLY_REQ		0x24	/* Request a DLSDU from the remote */
1437c478bd9Sstevel@tonic-gate #define	DL_REPLY_IND		0x25	/* Arrival of a command PDU */
1447c478bd9Sstevel@tonic-gate #define	DL_REPLY_STATUS_IND	0x26	/* Status indication of REPLY_REQ */
1457c478bd9Sstevel@tonic-gate #define	DL_REPLY_UPDATE_REQ	0x27	/* Hold a DLSDU for transmission */
1467c478bd9Sstevel@tonic-gate #define	DL_REPLY_UPDATE_STATUS_IND	0x28 /* Status of REPLY_UPDATE req */
1477c478bd9Sstevel@tonic-gate 
1487c478bd9Sstevel@tonic-gate /*
1497c478bd9Sstevel@tonic-gate  * Primitives used for XID and TEST operations
1507c478bd9Sstevel@tonic-gate  */
1517c478bd9Sstevel@tonic-gate 
1527c478bd9Sstevel@tonic-gate #define	DL_XID_REQ	0x29		/* Request to send an XID PDU */
1537c478bd9Sstevel@tonic-gate #define	DL_XID_IND	0x2a		/* Arrival of an XID PDU */
1547c478bd9Sstevel@tonic-gate #define	DL_XID_RES	0x2b		/* request to send a response XID PDU */
1557c478bd9Sstevel@tonic-gate #define	DL_XID_CON	0x2c		/* Arrival of a response XID PDU */
1567c478bd9Sstevel@tonic-gate #define	DL_TEST_REQ	0x2d		/* TEST command request */
1577c478bd9Sstevel@tonic-gate #define	DL_TEST_IND	0x2e		/* TEST response indication */
1587c478bd9Sstevel@tonic-gate #define	DL_TEST_RES	0x2f		/* TEST response */
1597c478bd9Sstevel@tonic-gate #define	DL_TEST_CON	0x30		/* TEST Confirmation */
1607c478bd9Sstevel@tonic-gate 
1617c478bd9Sstevel@tonic-gate /*
1627c478bd9Sstevel@tonic-gate  * Primitives to get and set the physical address, and to get
1637c478bd9Sstevel@tonic-gate  * Statistics
1647c478bd9Sstevel@tonic-gate  */
1657c478bd9Sstevel@tonic-gate 
1667c478bd9Sstevel@tonic-gate #define	DL_PHYS_ADDR_REQ	0x31	/* Request to get physical addr */
1677c478bd9Sstevel@tonic-gate #define	DL_PHYS_ADDR_ACK	0x32	/* Return physical addr */
1687c478bd9Sstevel@tonic-gate #define	DL_SET_PHYS_ADDR_REQ	0x33	/* set physical addr */
1697c478bd9Sstevel@tonic-gate #define	DL_GET_STATISTICS_REQ	0x34	/* Request to get statistics */
1707c478bd9Sstevel@tonic-gate #define	DL_GET_STATISTICS_ACK	0x35	/* Return statistics */
1717c478bd9Sstevel@tonic-gate 
1727c478bd9Sstevel@tonic-gate /*
1737c478bd9Sstevel@tonic-gate  * Invalid primitive
1747c478bd9Sstevel@tonic-gate  */
1757c478bd9Sstevel@tonic-gate 
1767c478bd9Sstevel@tonic-gate #define	DL_PRIM_INVAL		0xffff	/* Invalid DL primitive value */
1777c478bd9Sstevel@tonic-gate 
1787c478bd9Sstevel@tonic-gate /*
1797c478bd9Sstevel@tonic-gate  * DLPI interface states
1807c478bd9Sstevel@tonic-gate  */
1817c478bd9Sstevel@tonic-gate #define	DL_UNATTACHED		0x04	/* PPA not attached */
1827c478bd9Sstevel@tonic-gate #define	DL_ATTACH_PENDING	0x05	/* Waiting ack of DL_ATTACH_REQ */
1837c478bd9Sstevel@tonic-gate #define	DL_DETACH_PENDING	0x06	/* Waiting ack of DL_DETACH_REQ */
1847c478bd9Sstevel@tonic-gate #define	DL_UNBOUND		0x00	/* PPA attached */
1857c478bd9Sstevel@tonic-gate #define	DL_BIND_PENDING		0x01	/* Waiting ack of DL_BIND_REQ */
1867c478bd9Sstevel@tonic-gate #define	DL_UNBIND_PENDING	0x02	/* Waiting ack of DL_UNBIND_REQ */
1877c478bd9Sstevel@tonic-gate #define	DL_IDLE			0x03	/* dlsap bound, awaiting use */
1887c478bd9Sstevel@tonic-gate #define	DL_UDQOS_PENDING	0x07	/* Waiting ack of DL_UDQOS_REQ */
1897c478bd9Sstevel@tonic-gate #define	DL_OUTCON_PENDING	0x08	/* awaiting DL_CONN_CON */
1907c478bd9Sstevel@tonic-gate #define	DL_INCON_PENDING	0x09	/* awaiting DL_CONN_RES */
1917c478bd9Sstevel@tonic-gate #define	DL_CONN_RES_PENDING	0x0a	/* Waiting ack of DL_CONNECT_RES */
1927c478bd9Sstevel@tonic-gate #define	DL_DATAXFER		0x0b	/* connection-oriented data transfer */
1937c478bd9Sstevel@tonic-gate #define	DL_USER_RESET_PENDING	0x0c	/* awaiting DL_RESET_CON */
1947c478bd9Sstevel@tonic-gate #define	DL_PROV_RESET_PENDING	0x0d	/* awaiting DL_RESET_RES */
1957c478bd9Sstevel@tonic-gate #define	DL_RESET_RES_PENDING	0x0e	/* Waiting ack of DL_RESET_RES */
1967c478bd9Sstevel@tonic-gate #define	DL_DISCON8_PENDING	0x0f	/* Waiting ack of DL_DISC_REQ */
1977c478bd9Sstevel@tonic-gate #define	DL_DISCON9_PENDING	0x10	/* Waiting ack of DL_DISC_REQ */
1987c478bd9Sstevel@tonic-gate #define	DL_DISCON11_PENDING	0x11	/* Waiting ack of DL_DISC_REQ */
1997c478bd9Sstevel@tonic-gate #define	DL_DISCON12_PENDING	0x12	/* Waiting ack of DL_DISC_REQ */
2007c478bd9Sstevel@tonic-gate #define	DL_DISCON13_PENDING	0x13	/* Waiting ack of DL_DISC_REQ */
2017c478bd9Sstevel@tonic-gate #define	DL_SUBS_BIND_PND	0x14	/* Waiting ack of DL_SUBS_BIND_REQ */
2027c478bd9Sstevel@tonic-gate #define	DL_SUBS_UNBIND_PND	0x15	/* Waiting ack of DL_SUBS_UNBIND_REQ */
2037c478bd9Sstevel@tonic-gate 
2047c478bd9Sstevel@tonic-gate 
2057c478bd9Sstevel@tonic-gate /*
2067c478bd9Sstevel@tonic-gate  * DL_ERROR_ACK error return values
2077c478bd9Sstevel@tonic-gate  */
2087c478bd9Sstevel@tonic-gate #define	DL_ACCESS	0x02	/* Improper permissions for request */
2097c478bd9Sstevel@tonic-gate #define	DL_BADADDR	0x01	/* DLSAP addr in improper format or invalid */
2107c478bd9Sstevel@tonic-gate #define	DL_BADCORR	0x05	/* Seq number not from outstand DL_CONN_IND */
2117c478bd9Sstevel@tonic-gate #define	DL_BADDATA	0x06	/* User data exceeded provider limit */
2127c478bd9Sstevel@tonic-gate #define	DL_BADPPA	0x08	/* Specified PPA was invalid */
2137c478bd9Sstevel@tonic-gate #define	DL_BADPRIM	0x09	/* Primitive received not known by provider */
2147c478bd9Sstevel@tonic-gate #define	DL_BADQOSPARAM	0x0a	/* QOS parameters contained invalid values */
2157c478bd9Sstevel@tonic-gate #define	DL_BADQOSTYPE	0x0b	/* QOS structure type is unknown/unsupported */
2167c478bd9Sstevel@tonic-gate #define	DL_BADSAP	0x00	/* Bad LSAP selector */
2177c478bd9Sstevel@tonic-gate #define	DL_BADTOKEN	0x0c	/* Token used not an active stream */
2187c478bd9Sstevel@tonic-gate #define	DL_BOUND	0x0d	/* Attempted second bind with dl_max_conind */
2197c478bd9Sstevel@tonic-gate #define	DL_INITFAILED	0x0e	/* Physical Link initialization failed */
2207c478bd9Sstevel@tonic-gate #define	DL_NOADDR	0x0f	/* Provider couldn't allocate alt. address */
2217c478bd9Sstevel@tonic-gate #define	DL_NOTINIT	0x10	/* Physical Link not initialized */
2227c478bd9Sstevel@tonic-gate #define	DL_OUTSTATE	0x03	/* Primitive issued in improper state */
2237c478bd9Sstevel@tonic-gate #define	DL_SYSERR	0x04	/* UNIX system error occurred */
2247c478bd9Sstevel@tonic-gate #define	DL_UNSUPPORTED	0x07	/* Requested serv. not supplied by provider */
2257c478bd9Sstevel@tonic-gate #define	DL_UNDELIVERABLE 0x11	/* Previous data unit could not be delivered */
2267c478bd9Sstevel@tonic-gate #define	DL_NOTSUPPORTED  0x12	/* Primitive is known but not supported */
2277c478bd9Sstevel@tonic-gate #define	DL_TOOMANY	0x13	/* limit exceeded	*/
2287c478bd9Sstevel@tonic-gate #define	DL_NOTENAB	0x14	/* Promiscuous mode not enabled */
2297c478bd9Sstevel@tonic-gate #define	DL_BUSY		0x15	/* Other streams for PPA in post-attached */
2307c478bd9Sstevel@tonic-gate 
2317c478bd9Sstevel@tonic-gate #define	DL_NOAUTO	0x16	/* Automatic handling XID&TEST not supported */
2327c478bd9Sstevel@tonic-gate #define	DL_NOXIDAUTO	0x17    /* Automatic handling of XID not supported */
2337c478bd9Sstevel@tonic-gate #define	DL_NOTESTAUTO	0x18	/* Automatic handling of TEST not supported */
2347c478bd9Sstevel@tonic-gate #define	DL_XIDAUTO	0x19	/* Automatic handling of XID response */
2357c478bd9Sstevel@tonic-gate #define	DL_TESTAUTO	0x1a	/* AUtomatic handling of TEST response */
2367c478bd9Sstevel@tonic-gate #define	DL_PENDING	0x1b	/* pending outstanding connect indications */
2377c478bd9Sstevel@tonic-gate 
2387c478bd9Sstevel@tonic-gate /*
2397c478bd9Sstevel@tonic-gate  * DLPI media types supported
2407c478bd9Sstevel@tonic-gate  */
2417c478bd9Sstevel@tonic-gate #define	DL_CSMACD	0x0	/* IEEE 802.3 CSMA/CD network */
2427c478bd9Sstevel@tonic-gate #define	DL_TPB		0x1	/* IEEE 802.4 Token Passing Bus */
2437c478bd9Sstevel@tonic-gate #define	DL_TPR		0x2	/* IEEE 802.5 Token Passing Ring */
2447c478bd9Sstevel@tonic-gate #define	DL_METRO	0x3	/* IEEE 802.6 Metro Net */
2457c478bd9Sstevel@tonic-gate #define	DL_ETHER	0x4	/* Ethernet Bus */
2467c478bd9Sstevel@tonic-gate #define	DL_HDLC		0x05	/* ISO HDLC protocol support */
2477c478bd9Sstevel@tonic-gate #define	DL_CHAR		0x06	/* Character Synchronous protocol support */
2487c478bd9Sstevel@tonic-gate #define	DL_CTCA		0x07	/* IBM Channel-to-Channel Adapter */
2497c478bd9Sstevel@tonic-gate #define	DL_FDDI		0x08	/* Fiber Distributed data interface */
2507c478bd9Sstevel@tonic-gate #define	DL_FC		0x10	/* Fibre Channel interface */
2517c478bd9Sstevel@tonic-gate #define	DL_ATM		0x11	/* ATM */
2527c478bd9Sstevel@tonic-gate #define	DL_IPATM	0x12	/* ATM Classical IP interface */
2537c478bd9Sstevel@tonic-gate #define	DL_X25		0x13	/* X.25 LAPB interface */
2547c478bd9Sstevel@tonic-gate #define	DL_ISDN		0x14	/* ISDN interface */
2557c478bd9Sstevel@tonic-gate #define	DL_HIPPI	0x15	/* HIPPI interface */
2567c478bd9Sstevel@tonic-gate #define	DL_100VG	0x16	/* 100 Based VG Ethernet */
2577c478bd9Sstevel@tonic-gate #define	DL_100VGTPR	0x17	/* 100 Based VG Token Ring */
2587c478bd9Sstevel@tonic-gate #define	DL_ETH_CSMA	0x18	/* ISO 8802/3 and Ethernet */
2597c478bd9Sstevel@tonic-gate #define	DL_100BT	0x19	/* 100 Base T */
2607c478bd9Sstevel@tonic-gate #define	DL_IB		0x1a	/* Infiniband */
2617c478bd9Sstevel@tonic-gate #define	DL_FRAME	0x0a	/* Frame Relay LAPF */
2627c478bd9Sstevel@tonic-gate #define	DL_MPFRAME	0x0b	/* Multi-protocol over Frame Relay */
2637c478bd9Sstevel@tonic-gate #define	DL_ASYNC	0x0c	/* Character Asynchronous Protocol */
2647c478bd9Sstevel@tonic-gate #define	DL_IPX25	0x0d	/* X.25 Classical IP interface */
2657c478bd9Sstevel@tonic-gate #define	DL_LOOP		0x0e	/* software loopback */
2667c478bd9Sstevel@tonic-gate #define	DL_OTHER	0x09	/* Any other medium not listed above */
2677c478bd9Sstevel@tonic-gate /*
2687c478bd9Sstevel@tonic-gate  * Private media types.  These must be above the value 0x80000000 as
2697c478bd9Sstevel@tonic-gate  * stated in the DLPI specification.
2707c478bd9Sstevel@tonic-gate  */
2717c478bd9Sstevel@tonic-gate #define	DL_IPV4		0x80000001ul	/* IPv4 Tunnel Link */
2727c478bd9Sstevel@tonic-gate #define	DL_IPV6		0x80000002ul	/* IPv6 Tunnel Link */
2737c478bd9Sstevel@tonic-gate #define	SUNW_DL_VNI	0x80000003ul	/* Virtual network interface */
2740ba2cbe9Sxc151355 #define	DL_WIFI		0x80000004ul	/* IEEE 802.11 */
275*b127ac41SPhilip Kirk #define	DL_IPNET	0x80000005ul	/* ipnet(7D) link */
2767c478bd9Sstevel@tonic-gate /*
2777c478bd9Sstevel@tonic-gate  * DLPI provider service supported.
2787c478bd9Sstevel@tonic-gate  * These must be allowed to be bitwise-OR for dl_service_mode in
2797c478bd9Sstevel@tonic-gate  * DL_INFO_ACK.
2807c478bd9Sstevel@tonic-gate  */
2817c478bd9Sstevel@tonic-gate #define	DL_CODLS	0x01	/* support connection-oriented service */
2827c478bd9Sstevel@tonic-gate #define	DL_CLDLS	0x02	/* support connectionless data link service */
2837c478bd9Sstevel@tonic-gate #define	DL_ACLDLS	0x04	/* support acknowledged connectionless serv. */
2847c478bd9Sstevel@tonic-gate 
2857c478bd9Sstevel@tonic-gate 
2867c478bd9Sstevel@tonic-gate /*
2877c478bd9Sstevel@tonic-gate  * DLPI provider style.
2887c478bd9Sstevel@tonic-gate  * The DLPI provider style which determines whether a provider
2897c478bd9Sstevel@tonic-gate  * requires a DL_ATTACH_REQ to inform the provider which PPA
2907c478bd9Sstevel@tonic-gate  * user messages should be sent/received on.
2917c478bd9Sstevel@tonic-gate  */
2927c478bd9Sstevel@tonic-gate #define	DL_STYLE1	0x0500	/* PPA is implicitly bound by open(2) */
2937c478bd9Sstevel@tonic-gate #define	DL_STYLE2	0x0501	/* PPA must be expl. bound via DL_ATTACH_REQ */
2947c478bd9Sstevel@tonic-gate 
2957c478bd9Sstevel@tonic-gate 
2967c478bd9Sstevel@tonic-gate /*
2977c478bd9Sstevel@tonic-gate  * DLPI Originator for Disconnect and Resets
2987c478bd9Sstevel@tonic-gate  */
2997c478bd9Sstevel@tonic-gate #define	DL_PROVIDER	0x0700
3007c478bd9Sstevel@tonic-gate #define	DL_USER		0x0701
3017c478bd9Sstevel@tonic-gate 
3027c478bd9Sstevel@tonic-gate /*
3037c478bd9Sstevel@tonic-gate  * DLPI Disconnect Reasons
3047c478bd9Sstevel@tonic-gate  */
3057c478bd9Sstevel@tonic-gate #define	DL_CONREJ_DEST_UNKNOWN			0x0800
3067c478bd9Sstevel@tonic-gate #define	DL_CONREJ_DEST_UNREACH_PERMANENT	0x0801
3077c478bd9Sstevel@tonic-gate #define	DL_CONREJ_DEST_UNREACH_TRANSIENT	0x0802
3087c478bd9Sstevel@tonic-gate #define	DL_CONREJ_QOS_UNAVAIL_PERMANENT		0x0803
3097c478bd9Sstevel@tonic-gate #define	DL_CONREJ_QOS_UNAVAIL_TRANSIENT		0x0804
3107c478bd9Sstevel@tonic-gate #define	DL_CONREJ_PERMANENT_COND		0x0805
3117c478bd9Sstevel@tonic-gate #define	DL_CONREJ_TRANSIENT_COND		0x0806
3127c478bd9Sstevel@tonic-gate #define	DL_DISC_ABNORMAL_CONDITION		0x0807
3137c478bd9Sstevel@tonic-gate #define	DL_DISC_NORMAL_CONDITION		0x0808
3147c478bd9Sstevel@tonic-gate #define	DL_DISC_PERMANENT_CONDITION		0x0809
3157c478bd9Sstevel@tonic-gate #define	DL_DISC_TRANSIENT_CONDITION		0x080a
3167c478bd9Sstevel@tonic-gate #define	DL_DISC_UNSPECIFIED			0x080b
3177c478bd9Sstevel@tonic-gate 
3187c478bd9Sstevel@tonic-gate /*
3197c478bd9Sstevel@tonic-gate  * DLPI Reset Reasons
3207c478bd9Sstevel@tonic-gate  */
3217c478bd9Sstevel@tonic-gate #define	DL_RESET_FLOW_CONTROL	0x0900
3227c478bd9Sstevel@tonic-gate #define	DL_RESET_LINK_ERROR	0x0901
3237c478bd9Sstevel@tonic-gate #define	DL_RESET_RESYNCH	0x0902
3247c478bd9Sstevel@tonic-gate 
3257c478bd9Sstevel@tonic-gate /*
3267c478bd9Sstevel@tonic-gate  * DLPI status values for acknowledged connectionless data transfer
3277c478bd9Sstevel@tonic-gate  */
3287c478bd9Sstevel@tonic-gate #define	DL_CMD_MASK	0x0f	/* mask for command portion of status */
3297c478bd9Sstevel@tonic-gate #define	DL_CMD_OK	0x00	/* Command Accepted */
3307c478bd9Sstevel@tonic-gate #define	DL_CMD_RS	0x01	/* Unimplemented or inactivated service */
3317c478bd9Sstevel@tonic-gate #define	DL_CMD_UE	0x05	/* Data Link User interface error */
3327c478bd9Sstevel@tonic-gate #define	DL_CMD_PE	0x06	/* Protocol error */
3337c478bd9Sstevel@tonic-gate #define	DL_CMD_IP	0x07	/* Permanent implementation dependent error */
3347c478bd9Sstevel@tonic-gate #define	DL_CMD_UN	0x09	/* Resources temporarily unavailable */
3357c478bd9Sstevel@tonic-gate #define	DL_CMD_IT	0x0f	/* Temporary implementation dependent error */
3367c478bd9Sstevel@tonic-gate #define	DL_RSP_MASK	0xf0	/* mask for response portion of status */
3377c478bd9Sstevel@tonic-gate #define	DL_RSP_OK	0x00	/* Response DLSDU present */
3387c478bd9Sstevel@tonic-gate #define	DL_RSP_RS	0x10	/* Unimplemented or inactivated service */
3397c478bd9Sstevel@tonic-gate #define	DL_RSP_NE	0x30	/* Response DLSDU never submitted */
3407c478bd9Sstevel@tonic-gate #define	DL_RSP_NR	0x40	/* Response DLSDU not requested */
3417c478bd9Sstevel@tonic-gate #define	DL_RSP_UE	0x50	/* Data Link User interface error */
3427c478bd9Sstevel@tonic-gate #define	DL_RSP_IP	0x70	/* Permanent implementation dependent error */
3437c478bd9Sstevel@tonic-gate #define	DL_RSP_UN	0x90	/* Resources temporarily unavailable */
3447c478bd9Sstevel@tonic-gate #define	DL_RSP_IT	0xf0	/* Temporary implementation dependent error */
3457c478bd9Sstevel@tonic-gate 
3467c478bd9Sstevel@tonic-gate /*
3477c478bd9Sstevel@tonic-gate  * Service Class values for acknowledged connectionless data transfer
3487c478bd9Sstevel@tonic-gate  */
3497c478bd9Sstevel@tonic-gate #define	DL_RQST_RSP	0x01	/* Use acknowledge capability in MAC sublayer */
3507c478bd9Sstevel@tonic-gate #define	DL_RQST_NORSP	0x02	/* No acknowledgement service requested */
3517c478bd9Sstevel@tonic-gate 
3527c478bd9Sstevel@tonic-gate /*
3537c478bd9Sstevel@tonic-gate  * DLPI address type definition
3547c478bd9Sstevel@tonic-gate  */
3557c478bd9Sstevel@tonic-gate #define	DL_FACT_PHYS_ADDR	0x01	/* factory physical address */
3567c478bd9Sstevel@tonic-gate #define	DL_CURR_PHYS_ADDR	0x02	/* current physical address */
3577c478bd9Sstevel@tonic-gate #define	DL_IPV6_TOKEN		0x03	/* IPv6 interface token */
3587c478bd9Sstevel@tonic-gate #define	DL_IPV6_LINK_LAYER_ADDR	0x04	/* Neighbor Discovery format */
3597c478bd9Sstevel@tonic-gate 
3607c478bd9Sstevel@tonic-gate /*
3617c478bd9Sstevel@tonic-gate  * DLPI flag definitions
3627c478bd9Sstevel@tonic-gate  */
3637c478bd9Sstevel@tonic-gate #define	DL_POLL_FINAL	0x01		/* indicates poll/final bit set */
3647c478bd9Sstevel@tonic-gate 
3657c478bd9Sstevel@tonic-gate /*
3667c478bd9Sstevel@tonic-gate  *	XID and TEST responses supported by the provider
3677c478bd9Sstevel@tonic-gate  */
3687c478bd9Sstevel@tonic-gate #define	DL_AUTO_XID	0x01		/* provider will respond to XID */
3697c478bd9Sstevel@tonic-gate #define	DL_AUTO_TEST	0x02		/* provider will respond to TEST */
3707c478bd9Sstevel@tonic-gate 
3717c478bd9Sstevel@tonic-gate /*
3727c478bd9Sstevel@tonic-gate  * Subsequent bind type
3737c478bd9Sstevel@tonic-gate  */
3747c478bd9Sstevel@tonic-gate #define	DL_PEER_BIND	0x01		/* subsequent bind on a peer addr */
3757c478bd9Sstevel@tonic-gate #define	DL_HIERARCHICAL_BIND	0x02	/* subs_bind on a hierarchical addr */
3767c478bd9Sstevel@tonic-gate 
3777c478bd9Sstevel@tonic-gate /*
3787c478bd9Sstevel@tonic-gate  * DLPI promiscuous mode definitions
3797c478bd9Sstevel@tonic-gate  */
3807c478bd9Sstevel@tonic-gate #define	DL_PROMISC_PHYS		0x01	/* promiscuous mode at phys level */
3817c478bd9Sstevel@tonic-gate #define	DL_PROMISC_SAP		0x02	/* promiscous mode at sap level */
3827c478bd9Sstevel@tonic-gate #define	DL_PROMISC_MULTI	0x03	/* promiscuous mode for multicast */
3837c478bd9Sstevel@tonic-gate 
3847c478bd9Sstevel@tonic-gate /*
3857c478bd9Sstevel@tonic-gate  * DLPI notification codes for DL_NOTIFY primitives.
3867c478bd9Sstevel@tonic-gate  * Bit-wise distinct since DL_NOTIFY_REQ and DL_NOTIFY_ACK carry multiple
3877c478bd9Sstevel@tonic-gate  * notification codes.
3887c478bd9Sstevel@tonic-gate  */
3897c478bd9Sstevel@tonic-gate #define	DL_NOTE_PHYS_ADDR	0x0001	/* Physical address change */
3907c478bd9Sstevel@tonic-gate #define	DL_NOTE_PROMISC_ON_PHYS	0x0002	/* DL_PROMISC_PHYS set on ppa */
3917c478bd9Sstevel@tonic-gate #define	DL_NOTE_PROMISC_OFF_PHYS 0x0004	/* DL_PROMISC_PHYS cleared on ppa */
3927c478bd9Sstevel@tonic-gate #define	DL_NOTE_LINK_DOWN	0x0008	/* Link down */
3937c478bd9Sstevel@tonic-gate #define	DL_NOTE_LINK_UP		0x0010	/* Link up */
3947c478bd9Sstevel@tonic-gate #define	DL_NOTE_AGGR_AVAIL	0x0020	/* Link aggregation is available */
3957c478bd9Sstevel@tonic-gate #define	DL_NOTE_AGGR_UNAVAIL	0x0040	/* Link aggregation is not available */
3967c478bd9Sstevel@tonic-gate #define	DL_NOTE_SDU_SIZE	0x0080	/* New SDU size, global or per addr */
3977c478bd9Sstevel@tonic-gate #define	DL_NOTE_SPEED		0x0100	/* Approximate link speed */
3987c478bd9Sstevel@tonic-gate #define	DL_NOTE_FASTPATH_FLUSH	0x0200	/* Fast Path info changes */
3997c478bd9Sstevel@tonic-gate #define	DL_NOTE_CAPAB_RENEG	0x0400	/* Initiate capability renegotiation */
4007c478bd9Sstevel@tonic-gate 
4017c478bd9Sstevel@tonic-gate /*
4027c478bd9Sstevel@tonic-gate  * DLPI Quality Of Service definition for use in QOS structure definitions.
4037c478bd9Sstevel@tonic-gate  * The QOS structures are used in connection establishment, DL_INFO_ACK,
4047c478bd9Sstevel@tonic-gate  * and setting connectionless QOS values.
4057c478bd9Sstevel@tonic-gate  */
4067c478bd9Sstevel@tonic-gate 
4077c478bd9Sstevel@tonic-gate /*
4087c478bd9Sstevel@tonic-gate  * Throughput
4097c478bd9Sstevel@tonic-gate  *
4107c478bd9Sstevel@tonic-gate  * This parameter is specified for both directions.
4117c478bd9Sstevel@tonic-gate  */
4127c478bd9Sstevel@tonic-gate typedef struct {
4137c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_target_value;	/* bits/second desired */
4147c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_accept_value;	/* min. ok bits/second */
4157c478bd9Sstevel@tonic-gate } dl_through_t;
4167c478bd9Sstevel@tonic-gate 
4177c478bd9Sstevel@tonic-gate /*
4187c478bd9Sstevel@tonic-gate  * transit delay specification
4197c478bd9Sstevel@tonic-gate  *
4207c478bd9Sstevel@tonic-gate  * This parameter is specified for both directions.
4217c478bd9Sstevel@tonic-gate  * expressed in milliseconds assuming a DLSDU size of 128 octets.
4227c478bd9Sstevel@tonic-gate  * The scaling of the value to the current DLSDU size is provider dependent.
4237c478bd9Sstevel@tonic-gate  */
4247c478bd9Sstevel@tonic-gate typedef struct {
4257c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_target_value;	/* desired value of service */
4267c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_accept_value;	/* min. ok value of service */
4277c478bd9Sstevel@tonic-gate } dl_transdelay_t;
4287c478bd9Sstevel@tonic-gate 
4297c478bd9Sstevel@tonic-gate /*
4307c478bd9Sstevel@tonic-gate  * priority specification
4317c478bd9Sstevel@tonic-gate  * priority range is 0-100, with 0 being highest value.
4327c478bd9Sstevel@tonic-gate  */
4337c478bd9Sstevel@tonic-gate typedef struct {
4347c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_min;
4357c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_max;
4367c478bd9Sstevel@tonic-gate } dl_priority_t;
4377c478bd9Sstevel@tonic-gate 
4387c478bd9Sstevel@tonic-gate 
4397c478bd9Sstevel@tonic-gate /*
4407c478bd9Sstevel@tonic-gate  * protection specification
4417c478bd9Sstevel@tonic-gate  *
4427c478bd9Sstevel@tonic-gate  */
4437c478bd9Sstevel@tonic-gate #define	DL_NONE			0x0B01	/* no protection supplied */
4447c478bd9Sstevel@tonic-gate #define	DL_MONITOR		0x0B02	/* prot. from passive monit. */
4457c478bd9Sstevel@tonic-gate #define	DL_MAXIMUM		0x0B03	/* prot. from modification, replay, */
4467c478bd9Sstevel@tonic-gate 					/* addition, or deletion */
4477c478bd9Sstevel@tonic-gate 
4487c478bd9Sstevel@tonic-gate typedef struct {
4497c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_min;
4507c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_max;
4517c478bd9Sstevel@tonic-gate } dl_protect_t;
4527c478bd9Sstevel@tonic-gate 
4537c478bd9Sstevel@tonic-gate 
4547c478bd9Sstevel@tonic-gate /*
4557c478bd9Sstevel@tonic-gate  * Resilience specification
4567c478bd9Sstevel@tonic-gate  * probabilities are scaled by a factor of 10,000 with a time interval
4577c478bd9Sstevel@tonic-gate  * of 10,000 seconds.
4587c478bd9Sstevel@tonic-gate  */
4597c478bd9Sstevel@tonic-gate typedef struct {
4607c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_disc_prob;	/* prob. of provider init DISC */
4617c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_reset_prob;	/* prob. of provider init RESET */
4627c478bd9Sstevel@tonic-gate } dl_resilience_t;
4637c478bd9Sstevel@tonic-gate 
4647c478bd9Sstevel@tonic-gate 
4657c478bd9Sstevel@tonic-gate /*
4667c478bd9Sstevel@tonic-gate  * QOS type definition to be used for negotiation with the
4677c478bd9Sstevel@tonic-gate  * remote end of a connection, or a connectionless unitdata request.
4687c478bd9Sstevel@tonic-gate  * There are two type definitions to handle the negotiation
4697c478bd9Sstevel@tonic-gate  * process at connection establishment. The typedef dl_qos_range_t
4707c478bd9Sstevel@tonic-gate  * is used to present a range for parameters. This is used
4717c478bd9Sstevel@tonic-gate  * in the DL_CONNECT_REQ and DL_CONNECT_IND messages. The typedef
4727c478bd9Sstevel@tonic-gate  * dl_qos_sel_t is used to select a specific value for the QOS
4737c478bd9Sstevel@tonic-gate  * parameters. This is used in the DL_CONNECT_RES, DL_CONNECT_CON,
4747c478bd9Sstevel@tonic-gate  * and DL_INFO_ACK messages to define the selected QOS parameters
4757c478bd9Sstevel@tonic-gate  * for a connection.
4767c478bd9Sstevel@tonic-gate  *
4777c478bd9Sstevel@tonic-gate  * NOTE
4787c478bd9Sstevel@tonic-gate  *	A DataLink provider which has unknown values for any of the fields
4797c478bd9Sstevel@tonic-gate  *	will use a value of DL_UNKNOWN for all values in the fields.
4807c478bd9Sstevel@tonic-gate  *
4817c478bd9Sstevel@tonic-gate  * NOTE
4827c478bd9Sstevel@tonic-gate  *	A QOS parameter value of DL_QOS_DONT_CARE informs the DLS
4837c478bd9Sstevel@tonic-gate  *	provider the user requesting this value doesn't care
4847c478bd9Sstevel@tonic-gate  *	what the QOS parameter is set to. This value becomes the
4857c478bd9Sstevel@tonic-gate  *	least possible value in the range of QOS parameters.
4867c478bd9Sstevel@tonic-gate  *	The order of the QOS parameter range is then:
4877c478bd9Sstevel@tonic-gate  *
4887c478bd9Sstevel@tonic-gate  *		DL_QOS_DONT_CARE < 0 < MAXIMUM QOS VALUE
4897c478bd9Sstevel@tonic-gate  */
4907c478bd9Sstevel@tonic-gate #define	DL_UNKNOWN		-1
4917c478bd9Sstevel@tonic-gate #define	DL_QOS_DONT_CARE	-2
4927c478bd9Sstevel@tonic-gate 
4937c478bd9Sstevel@tonic-gate /*
4947c478bd9Sstevel@tonic-gate  * Every QOS structure has the first 4 bytes containing a type
4957c478bd9Sstevel@tonic-gate  * field, denoting the definition of the rest of the structure.
4967c478bd9Sstevel@tonic-gate  * This is used in the same manner has the dl_primitive variable
4977c478bd9Sstevel@tonic-gate  * is in messages.
4987c478bd9Sstevel@tonic-gate  *
4997c478bd9Sstevel@tonic-gate  * The following list is the defined QOS structure type values and structures.
5007c478bd9Sstevel@tonic-gate  */
5017c478bd9Sstevel@tonic-gate #define	DL_QOS_CO_RANGE1	0x0101	/* CO QOS range struct. */
5027c478bd9Sstevel@tonic-gate #define	DL_QOS_CO_SEL1		0x0102	/* CO QOS selection structure */
5037c478bd9Sstevel@tonic-gate #define	DL_QOS_CL_RANGE1	0x0103	/* CL QOS range struct. */
5047c478bd9Sstevel@tonic-gate #define	DL_QOS_CL_SEL1		0x0104	/* CL QOS selection */
5057c478bd9Sstevel@tonic-gate 
5067c478bd9Sstevel@tonic-gate typedef struct {
5077c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_type;
5087c478bd9Sstevel@tonic-gate 	dl_through_t	dl_rcv_throughput;	/* desired and accep. */
5097c478bd9Sstevel@tonic-gate 	dl_transdelay_t	dl_rcv_trans_delay;	/* desired and accep. */
5107c478bd9Sstevel@tonic-gate 	dl_through_t	dl_xmt_throughput;
5117c478bd9Sstevel@tonic-gate 	dl_transdelay_t	dl_xmt_trans_delay;
5127c478bd9Sstevel@tonic-gate 	dl_priority_t	dl_priority;		/* min and max values */
5137c478bd9Sstevel@tonic-gate 	dl_protect_t	dl_protection;		/* min and max values */
5147c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_residual_error;
5157c478bd9Sstevel@tonic-gate 	dl_resilience_t	dl_resilience;
5167c478bd9Sstevel@tonic-gate }	dl_qos_co_range1_t;
5177c478bd9Sstevel@tonic-gate 
5187c478bd9Sstevel@tonic-gate typedef struct {
5197c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_type;
5207c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_rcv_throughput;
5217c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_rcv_trans_delay;
5227c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_xmt_throughput;
5237c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_xmt_trans_delay;
5247c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_priority;
5257c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_protection;
5267c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_residual_error;
5277c478bd9Sstevel@tonic-gate 	dl_resilience_t	dl_resilience;
5287c478bd9Sstevel@tonic-gate }	dl_qos_co_sel1_t;
5297c478bd9Sstevel@tonic-gate 
5307c478bd9Sstevel@tonic-gate typedef struct {
5317c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_type;
5327c478bd9Sstevel@tonic-gate 	dl_transdelay_t	dl_trans_delay;
5337c478bd9Sstevel@tonic-gate 	dl_priority_t	dl_priority;
5347c478bd9Sstevel@tonic-gate 	dl_protect_t	dl_protection;
5357c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_residual_error;
5367c478bd9Sstevel@tonic-gate }	dl_qos_cl_range1_t;
5377c478bd9Sstevel@tonic-gate 
5387c478bd9Sstevel@tonic-gate typedef struct {
5397c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_type;
5407c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_trans_delay;
5417c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_priority;
5427c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_protection;
5437c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_residual_error;
5447c478bd9Sstevel@tonic-gate }	dl_qos_cl_sel1_t;
5457c478bd9Sstevel@tonic-gate 
5467c478bd9Sstevel@tonic-gate union	DL_qos_types {
5477c478bd9Sstevel@tonic-gate 	t_uscalar_t		dl_qos_type;
5487c478bd9Sstevel@tonic-gate 	dl_qos_co_range1_t	qos_co_range1;
5497c478bd9Sstevel@tonic-gate 	dl_qos_co_sel1_t	qos_co_sel1;
5507c478bd9Sstevel@tonic-gate 	dl_qos_cl_range1_t	qos_cl_range1;
5517c478bd9Sstevel@tonic-gate 	dl_qos_cl_sel1_t	qos_cl_sel1;
5527c478bd9Sstevel@tonic-gate };
5537c478bd9Sstevel@tonic-gate 
5547c478bd9Sstevel@tonic-gate /*
5557c478bd9Sstevel@tonic-gate  *    Solaris specific structures and definitions.
5567c478bd9Sstevel@tonic-gate  */
5577c478bd9Sstevel@tonic-gate 
5587c478bd9Sstevel@tonic-gate /*
5597c478bd9Sstevel@tonic-gate  * The following are the capability types and structures used by the
5607c478bd9Sstevel@tonic-gate  * the DL_CAPABILITY_REQ and DL_CAPABILITY_ACK primitives.
5617c478bd9Sstevel@tonic-gate  *
5627c478bd9Sstevel@tonic-gate  * These primitives are used both to determine the set of capabilities in
5637c478bd9Sstevel@tonic-gate  * the DLS provider and also to turn on and off specific capabilities.
5647c478bd9Sstevel@tonic-gate  * The response is a DL_CAPABILITY_ACK or DL_ERROR_ACK.
5657c478bd9Sstevel@tonic-gate  *
5667c478bd9Sstevel@tonic-gate  * DL_CAPABILITY_REQ can either be empty (i.e. dl_sub_length is zero) which
5677c478bd9Sstevel@tonic-gate  * is a request for the driver to return all capabilities. Otherwise, the
5687c478bd9Sstevel@tonic-gate  * DL_CAPABILITY_REQ contains the capabilities the DLS user wants to use and
5697c478bd9Sstevel@tonic-gate  * their settings.
5707c478bd9Sstevel@tonic-gate  *
5717c478bd9Sstevel@tonic-gate  * DL_CAPABILITY_ACK contains the capabilities that the DLS provider can
5727c478bd9Sstevel@tonic-gate  * support modified based on what was listed in the request. If a
5737c478bd9Sstevel@tonic-gate  * capability was included in the request then the information returned
5747c478bd9Sstevel@tonic-gate  * in the ack might be modified based on the information in the request.
5757c478bd9Sstevel@tonic-gate  */
5767c478bd9Sstevel@tonic-gate 
5777c478bd9Sstevel@tonic-gate #define	DL_CAPAB_ID_WRAPPER	0x00	/* Module ID wrapper structure */
5787c478bd9Sstevel@tonic-gate 					/* dl_data is dl_capab_id_t */
5797c478bd9Sstevel@tonic-gate #define	DL_CAPAB_HCKSUM		0x01	/* Checksum offload */
5807c478bd9Sstevel@tonic-gate 					/* dl_data is dl_capab_hcksum_t */
5817c478bd9Sstevel@tonic-gate #define	DL_CAPAB_IPSEC_AH	0x02	/* IPsec AH acceleration */
5827c478bd9Sstevel@tonic-gate 					/* dl_data is dl_capab_ipsec_t */
5837c478bd9Sstevel@tonic-gate #define	DL_CAPAB_IPSEC_ESP	0x03	/* IPsec ESP acceleration */
5847c478bd9Sstevel@tonic-gate 					/* dl_data is dl_capab_ipsec_t */
5857c478bd9Sstevel@tonic-gate #define	DL_CAPAB_MDT		0x04	/* Multidata Transmit capability */
5867c478bd9Sstevel@tonic-gate 					/* dl_data is dl_capab_mdt_t */
5877c478bd9Sstevel@tonic-gate #define	DL_CAPAB_ZEROCOPY	0x05	/* Zero-copy capability */
5887c478bd9Sstevel@tonic-gate 					/* dl_data is dl_capab_zerocopy_t */
5897c478bd9Sstevel@tonic-gate #define	DL_CAPAB_POLL		0x06	/* Polling capability */
5904b46d1efSkrgopi 					/* dl_data is dl_capab_dls_t */
5914b46d1efSkrgopi #define	DL_CAPAB_SOFT_RING   	0x07	/* Soft ring capable */
5924b46d1efSkrgopi 					/* dl_data is dl_capab_dls_t */
5938347601bSyl150051 #define	DL_CAPAB_LSO		0x08	/* Large Send Offload capability */
5948347601bSyl150051 					/* dl_data is dl_capab_lso_t */
5957c478bd9Sstevel@tonic-gate 
5967c478bd9Sstevel@tonic-gate typedef struct {
5977c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_cap;		/* capability type */
5987c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_length;	/* length of data following */
5997c478bd9Sstevel@tonic-gate 	/* Followed by zero or more bytes of dl_data */
6007c478bd9Sstevel@tonic-gate } dl_capability_sub_t;
6017c478bd9Sstevel@tonic-gate 
6027c478bd9Sstevel@tonic-gate /*
6037c478bd9Sstevel@tonic-gate  * Definitions and structures needed for DL_CONTROL_REQ and DL_CONTROL_ACK
6047c478bd9Sstevel@tonic-gate  * primitives.
6057c478bd9Sstevel@tonic-gate  * Extensible message to send down control information to the DLS provider.
6067c478bd9Sstevel@tonic-gate  * The response is a DL_CONTROL_ACK or DL_ERROR_ACK.
6077c478bd9Sstevel@tonic-gate  *
6087c478bd9Sstevel@tonic-gate  * Different types of control operations will define different format for the
6097c478bd9Sstevel@tonic-gate  * key and data fields. ADD requires key and data fields; if the <type, key>
6107c478bd9Sstevel@tonic-gate  * matches an already existing entry a DL_ERROR_ACK will be returned. DELETE
6117c478bd9Sstevel@tonic-gate  * requires a key field; if the <type, key> does not exist, a DL_ERROR_ACK
6127c478bd9Sstevel@tonic-gate  * will be returned. FLUSH requires neither a key nor data; it
6137c478bd9Sstevel@tonic-gate  * unconditionally removes all entries for the specified type. GET requires a
6147c478bd9Sstevel@tonic-gate  * key field; the get operation returns the data for the <type, key>. If
6157c478bd9Sstevel@tonic-gate  * <type, key> doesn't exist a DL_ERROR_ACK is returned. UPDATE requires key
6167c478bd9Sstevel@tonic-gate  * and data fields; if <type, key> doesn't exist a DL_ERROR_ACK is returned.
6177c478bd9Sstevel@tonic-gate  */
6187c478bd9Sstevel@tonic-gate 
6197c478bd9Sstevel@tonic-gate /*
6207c478bd9Sstevel@tonic-gate  * Control operations
6217c478bd9Sstevel@tonic-gate  */
6227c478bd9Sstevel@tonic-gate #define	DL_CO_ADD	0x01	/* Add new entry matching for <type,key> */
6237c478bd9Sstevel@tonic-gate #define	DL_CO_DELETE	0x02	/* Delete the entry matching <type,key> */
6247c478bd9Sstevel@tonic-gate #define	DL_CO_FLUSH	0x03	/* Purge all entries of <type> */
6257c478bd9Sstevel@tonic-gate #define	DL_CO_GET	0x04	/* Get the data for the <type,key> */
6267c478bd9Sstevel@tonic-gate #define	DL_CO_UPDATE	0x05	/* Update the data for <type,key> */
6277c478bd9Sstevel@tonic-gate #define	DL_CO_SET	0x06	/* Add or update as appropriate */
6287c478bd9Sstevel@tonic-gate 
6297c478bd9Sstevel@tonic-gate /*
6307c478bd9Sstevel@tonic-gate  * Control types (dl_type field of dl_control_req_t and dl_control_ack_t)
6317c478bd9Sstevel@tonic-gate  */
6327c478bd9Sstevel@tonic-gate #define	DL_CT_IPSEC_AH	0x01	/* AH; key=spi,dest_addr; */
6337c478bd9Sstevel@tonic-gate 				/* data=keying material */
6347c478bd9Sstevel@tonic-gate #define	DL_CT_IPSEC_ESP	0x02	/* ESP; key=spi,des_taddr; */
6357c478bd9Sstevel@tonic-gate 				/* data=keying material */
6367c478bd9Sstevel@tonic-gate 
6377c478bd9Sstevel@tonic-gate /*
6387c478bd9Sstevel@tonic-gate  * Module ID token to be included in new sub-capability structures.
6397c478bd9Sstevel@tonic-gate  * Existing sub-capabilities lacking an identification token, e.g. IPSEC
6407c478bd9Sstevel@tonic-gate  * hardware acceleration, need to be encapsulated within the ID sub-
6417c478bd9Sstevel@tonic-gate  * capability.  Access to this structure must be done through
6427c478bd9Sstevel@tonic-gate  * dlcapab{set,check}qid().
6437c478bd9Sstevel@tonic-gate  */
6447c478bd9Sstevel@tonic-gate typedef struct {
6457c478bd9Sstevel@tonic-gate 	t_uscalar_t	mid[4];		/* private fields */
6467c478bd9Sstevel@tonic-gate } dl_mid_t;
6477c478bd9Sstevel@tonic-gate 
6487c478bd9Sstevel@tonic-gate /*
6497c478bd9Sstevel@tonic-gate  * Module ID wrapper (follows dl_capability_sub_t)
6507c478bd9Sstevel@tonic-gate  */
6517c478bd9Sstevel@tonic-gate typedef struct {
6527c478bd9Sstevel@tonic-gate 	dl_mid_t		id_mid;		/* module ID token */
6537c478bd9Sstevel@tonic-gate 	dl_capability_sub_t	id_subcap;	/* sub-capability */
6547c478bd9Sstevel@tonic-gate } dl_capab_id_t;
6557c478bd9Sstevel@tonic-gate 
6567c478bd9Sstevel@tonic-gate /*
6577c478bd9Sstevel@tonic-gate  * Multidata Transmit sub-capability (follows dl_capability_sub_t)
6587c478bd9Sstevel@tonic-gate  */
6597c478bd9Sstevel@tonic-gate typedef struct {
6607c478bd9Sstevel@tonic-gate 	t_uscalar_t	mdt_version;	/* interface version */
6617c478bd9Sstevel@tonic-gate 	t_uscalar_t	mdt_flags;	/* flags */
6627c478bd9Sstevel@tonic-gate 	t_uscalar_t	mdt_hdr_head;	/* minimum leading header space */
6637c478bd9Sstevel@tonic-gate 	t_uscalar_t	mdt_hdr_tail;	/* minimum trailing header space */
6647c478bd9Sstevel@tonic-gate 	t_uscalar_t	mdt_max_pld;	/* maximum doable payload buffers */
6657c478bd9Sstevel@tonic-gate 	t_uscalar_t	mdt_span_limit;	/* scatter-gather descriptor limit */
6667c478bd9Sstevel@tonic-gate 	dl_mid_t	mdt_mid;	/* module ID token */
6677c478bd9Sstevel@tonic-gate } dl_capab_mdt_t;
6687c478bd9Sstevel@tonic-gate 
6697c478bd9Sstevel@tonic-gate /*
6707c478bd9Sstevel@tonic-gate  * Multidata Transmit revision definition history
6717c478bd9Sstevel@tonic-gate  */
6727c478bd9Sstevel@tonic-gate #define	MDT_CURRENT_VERSION	0x02
6737c478bd9Sstevel@tonic-gate #define	MDT_VERSION_2		0x02
6747c478bd9Sstevel@tonic-gate 
6757c478bd9Sstevel@tonic-gate /*
6767c478bd9Sstevel@tonic-gate  * mdt_flags values
6777c478bd9Sstevel@tonic-gate  */
6787c478bd9Sstevel@tonic-gate #define	DL_CAPAB_MDT_ENABLE	0x01	/* enable Multidata Transmit */
6797c478bd9Sstevel@tonic-gate 
6807c478bd9Sstevel@tonic-gate /*
6817c478bd9Sstevel@tonic-gate  * DL_CAPAB_HCKSUM
6827c478bd9Sstevel@tonic-gate  * Used for negotiating different flavors of checksum offload
6837c478bd9Sstevel@tonic-gate  * capabilities.
6847c478bd9Sstevel@tonic-gate  */
6857c478bd9Sstevel@tonic-gate typedef struct {
6867c478bd9Sstevel@tonic-gate 	t_uscalar_t	hcksum_version;	/* version of data following */
6877c478bd9Sstevel@tonic-gate 	t_uscalar_t	hcksum_txflags;	/* capabilities on transmit */
6887c478bd9Sstevel@tonic-gate 	dl_mid_t	hcksum_mid;		/* module ID */
6897c478bd9Sstevel@tonic-gate } dl_capab_hcksum_t;
6907c478bd9Sstevel@tonic-gate 
6917c478bd9Sstevel@tonic-gate /*
6927c478bd9Sstevel@tonic-gate  * DL_CAPAB_HCKSUM  revision definition history
6937c478bd9Sstevel@tonic-gate  */
6947c478bd9Sstevel@tonic-gate #define	HCKSUM_CURRENT_VERSION	0x01
6957c478bd9Sstevel@tonic-gate #define	HCKSUM_VERSION_1	0x01
6967c478bd9Sstevel@tonic-gate 
6977c478bd9Sstevel@tonic-gate /*
6987c478bd9Sstevel@tonic-gate  * Values for dl_txflags
6997c478bd9Sstevel@tonic-gate  */
7007c478bd9Sstevel@tonic-gate #define	HCKSUM_ENABLE		0x01	/* Set to enable hardware checksum */
7017c478bd9Sstevel@tonic-gate 					/* capability */
7027c478bd9Sstevel@tonic-gate #define	HCKSUM_INET_PARTIAL	0x02	/* Partial 1's complement checksum */
7037c478bd9Sstevel@tonic-gate 					/* ability */
7047c478bd9Sstevel@tonic-gate #define	HCKSUM_INET_FULL_V4	0x04	/* Full 1's complement checksum */
7057c478bd9Sstevel@tonic-gate 					/* ability for IPv4 packets. */
706ff550d0eSmasputra #define	HCKSUM_INET_FULL_V6	0x08	/* Full 1's complement checksum */
707ff550d0eSmasputra 					/* ability for IPv6 packets. */
7087c478bd9Sstevel@tonic-gate #define	HCKSUM_IPHDRCKSUM	0x10	/* IPv4 Header checksum offload */
7097c478bd9Sstevel@tonic-gate 					/* capability */
7107c478bd9Sstevel@tonic-gate #ifdef _KERNEL
7117c478bd9Sstevel@tonic-gate 
712cd93090eSericheng /*
7134b46d1efSkrgopi  * This structure is used by DL_CAPAB_POLL and DL_CAPAB_SOFT_RING
7144b46d1efSkrgopi  * capabilities. It provides a mechanism for IP to exchange function
7154b46d1efSkrgopi  * pointers with a gldv3-based driver to enable it to bypass streams-
7164b46d1efSkrgopi  * data-paths. DL_CAPAB_POLL mechanism provides a way to blank
7174b46d1efSkrgopi  * interrupts. Note: True polling support will be added in the future.
7184b46d1efSkrgopi  * DL_CAPAB_SOFT_RING provides a mechanism to create soft ring at the
7194b46d1efSkrgopi  * dls layer.
720cd93090eSericheng  */
7214b46d1efSkrgopi typedef struct dl_capab_dls_s {
7224b46d1efSkrgopi 	t_uscalar_t		dls_version;
7234b46d1efSkrgopi 	t_uscalar_t		dls_flags;
7247c478bd9Sstevel@tonic-gate 
725cd93090eSericheng 	/* DLD provided information */
7264b46d1efSkrgopi 	uintptr_t		dls_tx_handle;
7274b46d1efSkrgopi 	uintptr_t		dls_tx;
7284b46d1efSkrgopi 	uintptr_t		dls_ring_change_status;
7294b46d1efSkrgopi 	uintptr_t		dls_ring_bind;
7304b46d1efSkrgopi 	uintptr_t		dls_ring_unbind;
7317c478bd9Sstevel@tonic-gate 
7327c478bd9Sstevel@tonic-gate 	/* IP provided information */
7334b46d1efSkrgopi 	uintptr_t		dls_rx_handle;
7344b46d1efSkrgopi 	uintptr_t		dls_ring_assign;
7354b46d1efSkrgopi 	uintptr_t		dls_rx;
7364b46d1efSkrgopi 	uintptr_t		dls_ring_add;
7374b46d1efSkrgopi 	t_uscalar_t		dls_ring_cnt;
7387c478bd9Sstevel@tonic-gate 
7394b46d1efSkrgopi 	dl_mid_t		dls_mid;		/* module ID */
7404b46d1efSkrgopi } dl_capab_dls_t;
7417c478bd9Sstevel@tonic-gate 
7427c478bd9Sstevel@tonic-gate #define	POLL_CURRENT_VERSION	0x01
7437c478bd9Sstevel@tonic-gate #define	POLL_VERSION_1		0x01
7447c478bd9Sstevel@tonic-gate 
7454b46d1efSkrgopi #define	SOFT_RING_VERSION_1		0x01
7464b46d1efSkrgopi 
7474b46d1efSkrgopi /* Values for poll_flags */
7487c478bd9Sstevel@tonic-gate #define	POLL_ENABLE		0x01	/* Set to enable polling */
7497c478bd9Sstevel@tonic-gate 					/* capability */
7507c478bd9Sstevel@tonic-gate #define	POLL_CAPABLE		0x02	/* Polling ability exists */
7514b46d1efSkrgopi #define	POLL_DISABLE		0x03	/* Disable Polling */
7524b46d1efSkrgopi 
7534b46d1efSkrgopi /* Values for soft_ring_flags */
7544b46d1efSkrgopi #define	SOFT_RING_ENABLE		0x04	/* Set to enable soft_ring */
7554b46d1efSkrgopi 						/* capability */
7564b46d1efSkrgopi #define	SOFT_RING_CAPABLE		0x05	/* Soft_Ring ability exists */
7574b46d1efSkrgopi #define	SOFT_RING_DISABLE		0x06	/* Disable Soft_Ring */
7584b46d1efSkrgopi 
7594b46d1efSkrgopi /* Soft_Ring fanout types (used by soft_ring_change_status) */
7604b46d1efSkrgopi #define	SOFT_RING_NONE			0x00
76112554c89Skrgopi #define	SOFT_RING_FANOUT		0x01
7627c478bd9Sstevel@tonic-gate 
7637c478bd9Sstevel@tonic-gate #endif /* _KERNEL */
7647c478bd9Sstevel@tonic-gate 
7657c478bd9Sstevel@tonic-gate /*
7667c478bd9Sstevel@tonic-gate  * Zero-copy sub-capability (follows dl_capability_sub_t)
7677c478bd9Sstevel@tonic-gate  */
7687c478bd9Sstevel@tonic-gate typedef struct {
7697c478bd9Sstevel@tonic-gate 	t_uscalar_t	zerocopy_version;	/* interface version */
7707c478bd9Sstevel@tonic-gate 	t_uscalar_t	zerocopy_flags;		/* capability flags */
7717c478bd9Sstevel@tonic-gate 	t_uscalar_t	reserved[9];		/* reserved fields */
7727c478bd9Sstevel@tonic-gate 	dl_mid_t	zerocopy_mid;		/* module ID */
7737c478bd9Sstevel@tonic-gate } dl_capab_zerocopy_t;
7747c478bd9Sstevel@tonic-gate 
7757c478bd9Sstevel@tonic-gate /*
7767c478bd9Sstevel@tonic-gate  * Zero-copy revision definition history
7777c478bd9Sstevel@tonic-gate  */
7787c478bd9Sstevel@tonic-gate #define	ZEROCOPY_CURRENT_VERSION	0x01
7797c478bd9Sstevel@tonic-gate #define	ZEROCOPY_VERSION_1		0x01
7807c478bd9Sstevel@tonic-gate 
7817c478bd9Sstevel@tonic-gate /*
7827c478bd9Sstevel@tonic-gate  * Currently supported values of zerocopy_flags
7837c478bd9Sstevel@tonic-gate  */
7847c478bd9Sstevel@tonic-gate #define	DL_CAPAB_VMSAFE_MEM		0x01	/* Driver is zero-copy safe */
7857c478bd9Sstevel@tonic-gate 						/* wrt VM named buffers on */
7867c478bd9Sstevel@tonic-gate 						/* transmit */
7878347601bSyl150051 
7888347601bSyl150051 /*
7898347601bSyl150051  * Large Send Offload sub-capability (follows dl_capability_sub_t)
7908347601bSyl150051  */
7918347601bSyl150051 typedef struct {
7928347601bSyl150051 	t_uscalar_t	lso_version;		/* interface version */
7938347601bSyl150051 	t_uscalar_t	lso_flags;		/* capability flags */
7948347601bSyl150051 	t_uscalar_t	lso_max;		/* maximum payload */
7958347601bSyl150051 	t_uscalar_t	reserved[1];		/* reserved fields */
7968347601bSyl150051 	dl_mid_t	lso_mid;		/* module ID */
7978347601bSyl150051 } dl_capab_lso_t;
7988347601bSyl150051 
7998347601bSyl150051 /*
8008347601bSyl150051  * Large Send Offload revision definition history
8018347601bSyl150051  */
8028347601bSyl150051 #define	LSO_CURRENT_VERSION		0x01
8038347601bSyl150051 #define	LSO_VERSION_1			0x01
8048347601bSyl150051 
8058347601bSyl150051 /*
8068347601bSyl150051  * Currently supported values of lso_flags
8078347601bSyl150051  */
8088347601bSyl150051 #define	LSO_TX_ENABLE			0x01	/* to enable LSO */
8098347601bSyl150051 #define	LSO_TX_BASIC_TCP_IPV4		0x02	/* TCP LSO capability */
8108347601bSyl150051 
8117c478bd9Sstevel@tonic-gate /*
8127c478bd9Sstevel@tonic-gate  * DLPI interface primitive definitions.
8137c478bd9Sstevel@tonic-gate  *
8147c478bd9Sstevel@tonic-gate  * Each primitive is sent as a stream message.  It is possible that
8157c478bd9Sstevel@tonic-gate  * the messages may be viewed as a sequence of bytes that have the
8167c478bd9Sstevel@tonic-gate  * following form without any padding. The structure definition
8177c478bd9Sstevel@tonic-gate  * of the following messages may have to change depending on the
8187c478bd9Sstevel@tonic-gate  * underlying hardware architecture and crossing of a hardware
8197c478bd9Sstevel@tonic-gate  * boundary with a different hardware architecture.
8207c478bd9Sstevel@tonic-gate  *
8217c478bd9Sstevel@tonic-gate  * Fields in the primitives having a name of the form
8227c478bd9Sstevel@tonic-gate  * dl_reserved cannot be used and have the value of
8237c478bd9Sstevel@tonic-gate  * binary zero, no bits turned on.
8247c478bd9Sstevel@tonic-gate  *
8257c478bd9Sstevel@tonic-gate  * Each message has the name defined followed by the
8267c478bd9Sstevel@tonic-gate  * stream message type (M_PROTO, M_PCPROTO, M_DATA)
8277c478bd9Sstevel@tonic-gate  */
8287c478bd9Sstevel@tonic-gate 
8297c478bd9Sstevel@tonic-gate /*
8307c478bd9Sstevel@tonic-gate  *	LOCAL MANAGEMENT SERVICE PRIMITIVES
8317c478bd9Sstevel@tonic-gate  */
8327c478bd9Sstevel@tonic-gate 
8337c478bd9Sstevel@tonic-gate /*
8347c478bd9Sstevel@tonic-gate  * DL_INFO_REQ, M_PCPROTO type
8357c478bd9Sstevel@tonic-gate  */
8367c478bd9Sstevel@tonic-gate typedef struct {
8377c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;			/* set to DL_INFO_REQ */
8387c478bd9Sstevel@tonic-gate } dl_info_req_t;
8397c478bd9Sstevel@tonic-gate 
8407c478bd9Sstevel@tonic-gate /*
8417c478bd9Sstevel@tonic-gate  * DL_INFO_ACK, M_PCPROTO type
8427c478bd9Sstevel@tonic-gate  */
8437c478bd9Sstevel@tonic-gate typedef struct {
8447c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* set to DL_INFO_ACK */
8457c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_max_sdu;		/* Max bytes in a DLSDU */
8467c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_min_sdu;		/* Min bytes in a DLSDU */
8477c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;		/* length of DLSAP address */
8487c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_mac_type;		/* type of medium supported */
8497c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_reserved;		/* value set to zero */
8507c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_current_state;	/* state of DLPI interface */
8517c478bd9Sstevel@tonic-gate 	t_scalar_t	dl_sap_length;		/* length of dlsap SAP part */
8527c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_service_mode;	/* CO, CL or ACL */
8537c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_length;		/* length of qos values */
8547c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_offset;		/* offset from start of block */
8557c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_range_length;	/* available range of qos */
8567c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_range_offset;	/* offset from start of block */
8577c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_provider_style;	/* style1 or style2 */
8587c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;		/* offset of the dlsap addr */
8597c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_version;		/* version number */
8607c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_brdcst_addr_length;	/* length of broadcast addr */
8617c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_brdcst_addr_offset;	/* offset from start of block */
8627c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_growth;		/* set to zero */
8637c478bd9Sstevel@tonic-gate } dl_info_ack_t;
8647c478bd9Sstevel@tonic-gate 
8657c478bd9Sstevel@tonic-gate /*
8667c478bd9Sstevel@tonic-gate  * DL_ATTACH_REQ, M_PROTO type
8677c478bd9Sstevel@tonic-gate  */
8687c478bd9Sstevel@tonic-gate typedef struct {
8697c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* set to DL_ATTACH_REQ */
8707c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_ppa;			/* id of the PPA */
8717c478bd9Sstevel@tonic-gate } dl_attach_req_t;
8727c478bd9Sstevel@tonic-gate 
8737c478bd9Sstevel@tonic-gate /*
8747c478bd9Sstevel@tonic-gate  * DL_DETACH_REQ, M_PROTO type
8757c478bd9Sstevel@tonic-gate  */
8767c478bd9Sstevel@tonic-gate typedef struct {
8777c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* set to DL_DETACH_REQ */
8787c478bd9Sstevel@tonic-gate } dl_detach_req_t;
8797c478bd9Sstevel@tonic-gate 
8807c478bd9Sstevel@tonic-gate /*
8817c478bd9Sstevel@tonic-gate  * DL_BIND_REQ, M_PROTO type
8827c478bd9Sstevel@tonic-gate  */
8837c478bd9Sstevel@tonic-gate typedef struct {
8847c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* set to DL_BIND_REQ */
8857c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_sap;		/* info to identify dlsap addr */
8867c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_max_conind;	/* max # of outstanding con_ind */
8877c478bd9Sstevel@tonic-gate 	uint16_t	dl_service_mode;	/* CO, CL or ACL */
8887c478bd9Sstevel@tonic-gate 	uint16_t	dl_conn_mgmt;	/* if non-zero, is con-mgmt stream */
8897c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_xidtest_flg;	/* auto init. of test and xid */
8907c478bd9Sstevel@tonic-gate } dl_bind_req_t;
8917c478bd9Sstevel@tonic-gate 
8927c478bd9Sstevel@tonic-gate /*
8937c478bd9Sstevel@tonic-gate  * DL_BIND_ACK, M_PCPROTO type
8947c478bd9Sstevel@tonic-gate  */
8957c478bd9Sstevel@tonic-gate typedef struct {
8967c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_BIND_ACK */
8977c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_sap;		/* DLSAP addr info */
8987c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of complete DLSAP addr */
8997c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of M_PCPROTO */
9007c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_max_conind;	/* allowed max. # of con-ind */
9017c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_xidtest_flg;	/* responses supported by provider */
9027c478bd9Sstevel@tonic-gate } dl_bind_ack_t;
9037c478bd9Sstevel@tonic-gate 
9047c478bd9Sstevel@tonic-gate /*
9057c478bd9Sstevel@tonic-gate  * DL_SUBS_BIND_REQ, M_PROTO type
9067c478bd9Sstevel@tonic-gate  */
9077c478bd9Sstevel@tonic-gate typedef struct {
9087c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_SUBS_BIND_REQ */
9097c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_subs_sap_offset;	/* offset of subs_sap */
9107c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_subs_sap_length;	/* length of subs_sap */
9117c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_subs_bind_class;	/* peer or hierarchical */
9127c478bd9Sstevel@tonic-gate } dl_subs_bind_req_t;
9137c478bd9Sstevel@tonic-gate 
9147c478bd9Sstevel@tonic-gate /*
9157c478bd9Sstevel@tonic-gate  * DL_SUBS_BIND_ACK, M_PCPROTO type
9167c478bd9Sstevel@tonic-gate  */
9177c478bd9Sstevel@tonic-gate typedef struct {
9187c478bd9Sstevel@tonic-gate 	t_uscalar_t dl_primitive;	/* DL_SUBS_BIND_ACK */
9197c478bd9Sstevel@tonic-gate 	t_uscalar_t dl_subs_sap_offset;	/* offset of subs_sap */
9207c478bd9Sstevel@tonic-gate 	t_uscalar_t dl_subs_sap_length;	/* length of subs_sap */
9217c478bd9Sstevel@tonic-gate } dl_subs_bind_ack_t;
9227c478bd9Sstevel@tonic-gate 
9237c478bd9Sstevel@tonic-gate /*
9247c478bd9Sstevel@tonic-gate  * DL_UNBIND_REQ, M_PROTO type
9257c478bd9Sstevel@tonic-gate  */
9267c478bd9Sstevel@tonic-gate typedef struct {
9277c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_UNBIND_REQ */
9287c478bd9Sstevel@tonic-gate } dl_unbind_req_t;
9297c478bd9Sstevel@tonic-gate 
9307c478bd9Sstevel@tonic-gate /*
9317c478bd9Sstevel@tonic-gate  * DL_SUBS_UNBIND_REQ, M_PROTO type
9327c478bd9Sstevel@tonic-gate  */
9337c478bd9Sstevel@tonic-gate typedef struct {
9347c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_SUBS_UNBIND_REQ */
9357c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_subs_sap_offset;	/* offset of subs_sap */
9367c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_subs_sap_length;	/* length of subs_sap */
9377c478bd9Sstevel@tonic-gate } dl_subs_unbind_req_t;
9387c478bd9Sstevel@tonic-gate 
9397c478bd9Sstevel@tonic-gate /*
9407c478bd9Sstevel@tonic-gate  * DL_OK_ACK, M_PCPROTO type
9417c478bd9Sstevel@tonic-gate  */
9427c478bd9Sstevel@tonic-gate typedef struct {
9437c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_OK_ACK */
9447c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correct_primitive;	/* primitive acknowledged */
9457c478bd9Sstevel@tonic-gate } dl_ok_ack_t;
9467c478bd9Sstevel@tonic-gate 
9477c478bd9Sstevel@tonic-gate /*
9487c478bd9Sstevel@tonic-gate  * DL_ERROR_ACK, M_PCPROTO type
9497c478bd9Sstevel@tonic-gate  */
9507c478bd9Sstevel@tonic-gate typedef struct {
9517c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_ERROR_ACK */
9527c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_error_primitive;	/* primitive in error */
9537c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_errno;		/* DLPI error code */
9547c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_unix_errno;		/* UNIX system error code */
9557c478bd9Sstevel@tonic-gate } dl_error_ack_t;
9567c478bd9Sstevel@tonic-gate 
9577c478bd9Sstevel@tonic-gate /*
9587c478bd9Sstevel@tonic-gate  * DL_ENABMULTI_REQ, M_PROTO type
9597c478bd9Sstevel@tonic-gate  */
9607c478bd9Sstevel@tonic-gate typedef struct {
9617c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_ENABMULTI_REQ */
9627c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of multicast address */
9637c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of M_PROTO block */
9647c478bd9Sstevel@tonic-gate } dl_enabmulti_req_t;
9657c478bd9Sstevel@tonic-gate 
9667c478bd9Sstevel@tonic-gate /*
9677c478bd9Sstevel@tonic-gate  * DL_DISABMULTI_REQ, M_PROTO type
9687c478bd9Sstevel@tonic-gate  */
9697c478bd9Sstevel@tonic-gate 
9707c478bd9Sstevel@tonic-gate typedef struct {
9717c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_DISABMULTI_REQ */
9727c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of multicast address */
9737c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of M_PROTO block */
9747c478bd9Sstevel@tonic-gate } dl_disabmulti_req_t;
9757c478bd9Sstevel@tonic-gate 
9767c478bd9Sstevel@tonic-gate /*
9777c478bd9Sstevel@tonic-gate  * DL_PROMISCON_REQ, M_PROTO type
9787c478bd9Sstevel@tonic-gate  */
9797c478bd9Sstevel@tonic-gate 
9807c478bd9Sstevel@tonic-gate typedef struct {
9817c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_PROMISCON_REQ */
9827c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_level;	/* physical,SAP, or ALL multicast */
9837c478bd9Sstevel@tonic-gate } dl_promiscon_req_t;
9847c478bd9Sstevel@tonic-gate 
9857c478bd9Sstevel@tonic-gate /*
9867c478bd9Sstevel@tonic-gate  * DL_PROMISCOFF_REQ, M_PROTO type
9877c478bd9Sstevel@tonic-gate  */
9887c478bd9Sstevel@tonic-gate 
9897c478bd9Sstevel@tonic-gate typedef struct {
9907c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_PROMISCOFF_REQ */
9917c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_level;	/* Physical,SAP, or ALL multicast */
9927c478bd9Sstevel@tonic-gate } dl_promiscoff_req_t;
9937c478bd9Sstevel@tonic-gate 
9947c478bd9Sstevel@tonic-gate /*
9957c478bd9Sstevel@tonic-gate  *	Primitives to get and set the Physical address
9967c478bd9Sstevel@tonic-gate  */
9977c478bd9Sstevel@tonic-gate 
9987c478bd9Sstevel@tonic-gate /*
9997c478bd9Sstevel@tonic-gate  * DL_PHYS_ADDR_REQ, M_PROTO type
10007c478bd9Sstevel@tonic-gate  */
10017c478bd9Sstevel@tonic-gate typedef	struct {
10027c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_PHYS_ADDR_REQ */
10037c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_type;	/* factory or current physical addr */
10047c478bd9Sstevel@tonic-gate } dl_phys_addr_req_t;
10057c478bd9Sstevel@tonic-gate 
10067c478bd9Sstevel@tonic-gate /*
10077c478bd9Sstevel@tonic-gate  * DL_PHYS_ADDR_ACK, M_PCPROTO type
10087c478bd9Sstevel@tonic-gate  */
10097c478bd9Sstevel@tonic-gate typedef struct {
10107c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_PHYS_ADDR_ACK */
10117c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of the physical addr */
10127c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of block */
10137c478bd9Sstevel@tonic-gate } dl_phys_addr_ack_t;
10147c478bd9Sstevel@tonic-gate 
10157c478bd9Sstevel@tonic-gate /*
10167c478bd9Sstevel@tonic-gate  * DL_SET_PHYS_ADDR_REQ, M_PROTO type
10177c478bd9Sstevel@tonic-gate  */
10187c478bd9Sstevel@tonic-gate typedef struct {
10197c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_SET_PHYS_ADDR_REQ */
10207c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of physical addr */
10217c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of block */
10227c478bd9Sstevel@tonic-gate } dl_set_phys_addr_req_t;
10237c478bd9Sstevel@tonic-gate 
10247c478bd9Sstevel@tonic-gate /*
10257c478bd9Sstevel@tonic-gate  *	Primitives to get statistics
10267c478bd9Sstevel@tonic-gate  */
10277c478bd9Sstevel@tonic-gate 
10287c478bd9Sstevel@tonic-gate /*
10297c478bd9Sstevel@tonic-gate  * DL_GET_STATISTICS_REQ, M_PROTO type
10307c478bd9Sstevel@tonic-gate  */
10317c478bd9Sstevel@tonic-gate typedef struct {
10327c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_GET_STATISTICS_REQ */
10337c478bd9Sstevel@tonic-gate } dl_get_statistics_req_t;
10347c478bd9Sstevel@tonic-gate 
10357c478bd9Sstevel@tonic-gate /*
10367c478bd9Sstevel@tonic-gate  * DL_GET_STATISTICS_ACK, M_PCPROTO type
10377c478bd9Sstevel@tonic-gate  */
10387c478bd9Sstevel@tonic-gate typedef struct {
10397c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_GET_STATISTICS_ACK */
10407c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_stat_length;	/* length of statistics structure */
10417c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_stat_offset;	/* offset from start of block */
10427c478bd9Sstevel@tonic-gate } dl_get_statistics_ack_t;
10437c478bd9Sstevel@tonic-gate 
10447c478bd9Sstevel@tonic-gate /*
10457c478bd9Sstevel@tonic-gate  *	Solaris specific local management service primitives
10467c478bd9Sstevel@tonic-gate  */
10477c478bd9Sstevel@tonic-gate 
10487c478bd9Sstevel@tonic-gate /*
10497c478bd9Sstevel@tonic-gate  * DL_NOTIFY_REQ, M_PROTO type
10507c478bd9Sstevel@tonic-gate  */
10517c478bd9Sstevel@tonic-gate typedef struct {
10527c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* set to DL_NOTIFY_REQ */
10537c478bd9Sstevel@tonic-gate 	uint32_t	dl_notifications; /* Requested set of notifications */
10547c478bd9Sstevel@tonic-gate 	uint32_t	dl_timelimit;	/* In milliseconds */
10557c478bd9Sstevel@tonic-gate } dl_notify_req_t;
10567c478bd9Sstevel@tonic-gate 
10577c478bd9Sstevel@tonic-gate /*
10587c478bd9Sstevel@tonic-gate  * DL_NOTIFY_ACK, M_PROTO type
10597c478bd9Sstevel@tonic-gate  */
10607c478bd9Sstevel@tonic-gate typedef struct {
10617c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* set to DL_NOTIFY_ACK */
10627c478bd9Sstevel@tonic-gate 	uint32_t	dl_notifications; /* Supported set of notifications */
10637c478bd9Sstevel@tonic-gate } dl_notify_ack_t;
10647c478bd9Sstevel@tonic-gate 
10657c478bd9Sstevel@tonic-gate /*
10667c478bd9Sstevel@tonic-gate  * DL_NOTIFY_IND, M_PROTO type
10677c478bd9Sstevel@tonic-gate  */
10687c478bd9Sstevel@tonic-gate typedef struct {
10697c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* set to DL_NOTIFY_IND */
10707c478bd9Sstevel@tonic-gate 	uint32_t	dl_notification; /* Which notification? */
10717c478bd9Sstevel@tonic-gate 	uint32_t	dl_data;	/* notification specific */
10727c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of complete DLSAP addr */
10737c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of M_PROTO */
10747c478bd9Sstevel@tonic-gate } dl_notify_ind_t;
10757c478bd9Sstevel@tonic-gate 
10767c478bd9Sstevel@tonic-gate /*
10777c478bd9Sstevel@tonic-gate  * DL_AGGR_REQ, M_PROTO type
10787c478bd9Sstevel@tonic-gate  */
10797c478bd9Sstevel@tonic-gate typedef struct {
10807c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* set to DL_AGGR_REQ */
10817c478bd9Sstevel@tonic-gate 	uint32_t	dl_key;		/* Key identifying the group */
10827c478bd9Sstevel@tonic-gate 	uint32_t	dl_port;	/* Identifying the NIC */
10837c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of PHYS addr addr */
10847c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of M_PROTO */
10857c478bd9Sstevel@tonic-gate } dl_aggr_req_t;
10867c478bd9Sstevel@tonic-gate 
10877c478bd9Sstevel@tonic-gate /*
10887c478bd9Sstevel@tonic-gate  * DL_AGGR_IND, M_PROTO type
10897c478bd9Sstevel@tonic-gate  */
10907c478bd9Sstevel@tonic-gate typedef struct {
10917c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* set to DL_AGGR_IND */
10927c478bd9Sstevel@tonic-gate 	uint32_t	dl_key;		/* Key identifying the group */
10937c478bd9Sstevel@tonic-gate 	uint32_t	dl_port;	/* Identifying the NIC */
10947c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of PHYS addr */
10957c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of M_PROTO */
10967c478bd9Sstevel@tonic-gate } dl_aggr_ind_t;
10977c478bd9Sstevel@tonic-gate 
10987c478bd9Sstevel@tonic-gate /*
10997c478bd9Sstevel@tonic-gate  * DL_UNAGGR_REQ, M_PROTO type
11007c478bd9Sstevel@tonic-gate  */
11017c478bd9Sstevel@tonic-gate typedef struct {
11027c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* set to DL_UNAGGR_REQ */
11037c478bd9Sstevel@tonic-gate 	uint32_t	dl_key;		/* Key identifying the group */
11047c478bd9Sstevel@tonic-gate 	uint32_t	dl_port;	/* Identifying the NIC */
11057c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_length;	/* length of PHYS addr */
11067c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_addr_offset;	/* offset from start of M_PROTO */
11077c478bd9Sstevel@tonic-gate } dl_unaggr_req_t;
11087c478bd9Sstevel@tonic-gate 
11097c478bd9Sstevel@tonic-gate /*
11107c478bd9Sstevel@tonic-gate  * DL_CAPABILITY_REQ, M_PROTO type
11117c478bd9Sstevel@tonic-gate  */
11127c478bd9Sstevel@tonic-gate typedef struct {
11137c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_CAPABILITY_REQ */
11147c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_sub_offset;	/* options offset */
11157c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_sub_length;	/* options length */
11167c478bd9Sstevel@tonic-gate 	/* Followed by a list of zero or more dl_capability_sub_t */
11177c478bd9Sstevel@tonic-gate } dl_capability_req_t;
11187c478bd9Sstevel@tonic-gate 
11197c478bd9Sstevel@tonic-gate /*
11207c478bd9Sstevel@tonic-gate  * DL_CAPABILITY_ACK, M_PROTO type
11217c478bd9Sstevel@tonic-gate  */
11227c478bd9Sstevel@tonic-gate typedef struct {
11237c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_CAPABILITY_ACK */
11247c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_sub_offset;	/* options offset */
11257c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_sub_length;	/* options length */
11267c478bd9Sstevel@tonic-gate 	/* Followed by a list of zero or more dl_capability_sub_t */
11277c478bd9Sstevel@tonic-gate } dl_capability_ack_t;
11287c478bd9Sstevel@tonic-gate 
11297c478bd9Sstevel@tonic-gate /*
11307c478bd9Sstevel@tonic-gate  * DL_CONTROL_REQ, M_PROTO type
11317c478bd9Sstevel@tonic-gate  */
11327c478bd9Sstevel@tonic-gate typedef struct {
11337c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_CONTROL_REQ */
11347c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_operation;	/* add/delete/purge */
11357c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_type;	/* e.g. AH/ESP/ ... */
11367c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_key_offset;	/* offset of key */
11377c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_key_length;	/* length of key */
11387c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_data_offset;	/* offset of data */
11397c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_data_length;	/* length of data */
11407c478bd9Sstevel@tonic-gate } dl_control_req_t;
11417c478bd9Sstevel@tonic-gate 
11427c478bd9Sstevel@tonic-gate /*
11437c478bd9Sstevel@tonic-gate  * DL_CONTROL_ACK, M_PROTO type
11447c478bd9Sstevel@tonic-gate  */
11457c478bd9Sstevel@tonic-gate typedef struct {
11467c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_CONTROL_ACK */
11477c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_operation;	/* add/delete/purge */
11487c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_type;	/* e.g. AH/ESP/ ... */
11497c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_key_offset;	/* offset of key */
11507c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_key_length;	/* length of key */
11517c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_data_offset;	/* offset of data */
11527c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_data_length;	/* length of data */
11537c478bd9Sstevel@tonic-gate } dl_control_ack_t;
11547c478bd9Sstevel@tonic-gate 
11557c478bd9Sstevel@tonic-gate /*
11567c478bd9Sstevel@tonic-gate  * DL_PASSIVE_REQ, M_PROTO type
11577c478bd9Sstevel@tonic-gate  */
11587c478bd9Sstevel@tonic-gate typedef struct {
11597c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;
11607c478bd9Sstevel@tonic-gate } dl_passive_req_t;
11617c478bd9Sstevel@tonic-gate 
11627c478bd9Sstevel@tonic-gate /*
1163023dbbefSjoycey  *	DL_INTR_MODE_REQ, M_PROTO type
1164023dbbefSjoycey  */
1165023dbbefSjoycey typedef struct {
1166023dbbefSjoycey 	t_uscalar_t	dl_primitive;
1167023dbbefSjoycey 	t_uscalar_t	dl_sap;
1168023dbbefSjoycey 	t_uscalar_t	dl_imode;	/* intr mode: 0 off  1 on */
1169023dbbefSjoycey } dl_intr_mode_req_t;
1170023dbbefSjoycey 
1171023dbbefSjoycey /*
11727c478bd9Sstevel@tonic-gate  *	CONNECTION-ORIENTED SERVICE PRIMITIVES
11737c478bd9Sstevel@tonic-gate  */
11747c478bd9Sstevel@tonic-gate 
11757c478bd9Sstevel@tonic-gate /*
11767c478bd9Sstevel@tonic-gate  * DL_CONNECT_REQ, M_PROTO type
11777c478bd9Sstevel@tonic-gate  */
11787c478bd9Sstevel@tonic-gate typedef struct {
11797c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_CONNECT_REQ */
11807c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* len. of dlsap addr */
11817c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset */
11827c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_length;		/* len. of QOS parm val */
11837c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_offset;		/* offset */
11847c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_growth;		/* set to zero */
11857c478bd9Sstevel@tonic-gate } dl_connect_req_t;
11867c478bd9Sstevel@tonic-gate 
11877c478bd9Sstevel@tonic-gate /*
11887c478bd9Sstevel@tonic-gate  * DL_CONNECT_IND, M_PROTO type
11897c478bd9Sstevel@tonic-gate  */
11907c478bd9Sstevel@tonic-gate typedef struct {
11917c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_CONNECT_IND */
11927c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation;		/* provider's correl. token */
11937c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_called_addr_length;  /* length of called address */
11947c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_called_addr_offset;	/* offset from start of block */
11957c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_calling_addr_length;	/* length of calling address */
11967c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_calling_addr_offset;	/* offset from start of block */
11977c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_length;		/* length of qos structure */
11987c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_offset;		/* offset from start of block */
11997c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_growth;		/* set to zero */
12007c478bd9Sstevel@tonic-gate } dl_connect_ind_t;
12017c478bd9Sstevel@tonic-gate 
12027c478bd9Sstevel@tonic-gate /*
12037c478bd9Sstevel@tonic-gate  * DL_CONNECT_RES, M_PROTO type
12047c478bd9Sstevel@tonic-gate  */
12057c478bd9Sstevel@tonic-gate typedef struct {
12067c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_CONNECT_RES */
12077c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation; /* provider's correlation token */
12087c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_resp_token;	/* token of responding stream */
12097c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_length;  /* length of qos structure */
12107c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_offset;	/* offset from start of block */
12117c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_growth;	/* set to zero */
12127c478bd9Sstevel@tonic-gate } dl_connect_res_t;
12137c478bd9Sstevel@tonic-gate 
12147c478bd9Sstevel@tonic-gate /*
12157c478bd9Sstevel@tonic-gate  * DL_CONNECT_CON, M_PROTO type
12167c478bd9Sstevel@tonic-gate  */
12177c478bd9Sstevel@tonic-gate typedef struct {
12187c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_CONNECT_CON */
12197c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_resp_addr_length;	/* responder's address len */
12207c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_resp_addr_offset;	/* offset from start of block */
12217c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_length;		/* length of qos structure */
12227c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_offset;		/* offset from start of block */
12237c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_growth;		/* set to zero */
12247c478bd9Sstevel@tonic-gate } dl_connect_con_t;
12257c478bd9Sstevel@tonic-gate 
12267c478bd9Sstevel@tonic-gate /*
12277c478bd9Sstevel@tonic-gate  * DL_TOKEN_REQ, M_PCPROTO type
12287c478bd9Sstevel@tonic-gate  */
12297c478bd9Sstevel@tonic-gate typedef struct {
12307c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_TOKEN_REQ */
12317c478bd9Sstevel@tonic-gate } dl_token_req_t;
12327c478bd9Sstevel@tonic-gate 
12337c478bd9Sstevel@tonic-gate /*
12347c478bd9Sstevel@tonic-gate  * DL_TOKEN_ACK, M_PCPROTO type
12357c478bd9Sstevel@tonic-gate  */
12367c478bd9Sstevel@tonic-gate typedef struct {
12377c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_TOKEN_ACK */
12387c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_token;	/* Connection response token */
12397c478bd9Sstevel@tonic-gate }dl_token_ack_t;
12407c478bd9Sstevel@tonic-gate 
12417c478bd9Sstevel@tonic-gate /*
12427c478bd9Sstevel@tonic-gate  * DL_DISCONNECT_REQ, M_PROTO type
12437c478bd9Sstevel@tonic-gate  */
12447c478bd9Sstevel@tonic-gate typedef struct {
12457c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_DISCONNECT_REQ */
12467c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_reason;	/* norm., abnorm., perm. or trans. */
12477c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation; /* association with connect_ind */
12487c478bd9Sstevel@tonic-gate } dl_disconnect_req_t;
12497c478bd9Sstevel@tonic-gate 
12507c478bd9Sstevel@tonic-gate /*
12517c478bd9Sstevel@tonic-gate  * DL_DISCONNECT_IND, M_PROTO type
12527c478bd9Sstevel@tonic-gate  */
12537c478bd9Sstevel@tonic-gate typedef struct {
12547c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_DISCONNECT_IND */
12557c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_originator;	/* USER or PROVIDER */
12567c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_reason;	/* permanent or transient */
12577c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation;	/* association with connect_ind */
12587c478bd9Sstevel@tonic-gate } dl_disconnect_ind_t;
12597c478bd9Sstevel@tonic-gate 
12607c478bd9Sstevel@tonic-gate /*
12617c478bd9Sstevel@tonic-gate  * DL_RESET_REQ, M_PROTO type
12627c478bd9Sstevel@tonic-gate  */
12637c478bd9Sstevel@tonic-gate typedef struct {
12647c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_RESET_REQ */
12657c478bd9Sstevel@tonic-gate } dl_reset_req_t;
12667c478bd9Sstevel@tonic-gate 
12677c478bd9Sstevel@tonic-gate /*
12687c478bd9Sstevel@tonic-gate  * DL_RESET_IND, M_PROTO type
12697c478bd9Sstevel@tonic-gate  */
12707c478bd9Sstevel@tonic-gate typedef struct {
12717c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_RESET_IND */
12727c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_originator;	/* Provider or User */
12737c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_reason;	/* flow control, link error, resync */
12747c478bd9Sstevel@tonic-gate } dl_reset_ind_t;
12757c478bd9Sstevel@tonic-gate 
12767c478bd9Sstevel@tonic-gate /*
12777c478bd9Sstevel@tonic-gate  * DL_RESET_RES, M_PROTO type
12787c478bd9Sstevel@tonic-gate  */
12797c478bd9Sstevel@tonic-gate typedef struct {
12807c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_RESET_RES */
12817c478bd9Sstevel@tonic-gate } dl_reset_res_t;
12827c478bd9Sstevel@tonic-gate 
12837c478bd9Sstevel@tonic-gate /*
12847c478bd9Sstevel@tonic-gate  * DL_RESET_CON, M_PROTO type
12857c478bd9Sstevel@tonic-gate  */
12867c478bd9Sstevel@tonic-gate typedef struct {
12877c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_RESET_CON */
12887c478bd9Sstevel@tonic-gate } dl_reset_con_t;
12897c478bd9Sstevel@tonic-gate 
12907c478bd9Sstevel@tonic-gate 
12917c478bd9Sstevel@tonic-gate /*
12927c478bd9Sstevel@tonic-gate  *	CONNECTIONLESS SERVICE PRIMITIVES
12937c478bd9Sstevel@tonic-gate  */
12947c478bd9Sstevel@tonic-gate 
12957c478bd9Sstevel@tonic-gate /*
12967c478bd9Sstevel@tonic-gate  * DL_UNITDATA_REQ, M_PROTO type, with M_DATA block(s)
12977c478bd9Sstevel@tonic-gate  */
12987c478bd9Sstevel@tonic-gate typedef struct {
12997c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_UNITDATA_REQ */
13007c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* DLSAP length of dest. user */
13017c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
13027c478bd9Sstevel@tonic-gate 	dl_priority_t	dl_priority;	/* priority value */
13037c478bd9Sstevel@tonic-gate } dl_unitdata_req_t;
13047c478bd9Sstevel@tonic-gate 
13057c478bd9Sstevel@tonic-gate /*
13067c478bd9Sstevel@tonic-gate  * DL_UNITDATA_IND, M_PROTO type, with M_DATA block(s)
13077c478bd9Sstevel@tonic-gate  */
13087c478bd9Sstevel@tonic-gate typedef struct {
13097c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_UNITDATA_IND */
13107c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* DLSAP length of dest. user */
13117c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
13127c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* DLSAP addr length sender */
13137c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
13147c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_group_address;	/* one if multicast/broadcast */
13157c478bd9Sstevel@tonic-gate } dl_unitdata_ind_t;
13167c478bd9Sstevel@tonic-gate 
13177c478bd9Sstevel@tonic-gate /*
13187c478bd9Sstevel@tonic-gate  * DL_UDERROR_IND, M_PROTO type
13197c478bd9Sstevel@tonic-gate  *	(or M_PCPROTO type if LLI-based provider)
13207c478bd9Sstevel@tonic-gate  */
13217c478bd9Sstevel@tonic-gate typedef struct {
13227c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_UDERROR_IND */
13237c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* Destination DLSAP */
13247c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* Offset from start of block */
13257c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_unix_errno;		/* unix system error code */
13267c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_errno;		/* DLPI error code */
13277c478bd9Sstevel@tonic-gate } dl_uderror_ind_t;
13287c478bd9Sstevel@tonic-gate 
13297c478bd9Sstevel@tonic-gate /*
13307c478bd9Sstevel@tonic-gate  * DL_UDQOS_REQ, M_PROTO type
13317c478bd9Sstevel@tonic-gate  */
13327c478bd9Sstevel@tonic-gate typedef struct {
13337c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_UDQOS_REQ */
13347c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_length;	/* requested qos byte length */
13357c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_qos_offset;	/* offset from start of block */
13367c478bd9Sstevel@tonic-gate } dl_udqos_req_t;
13377c478bd9Sstevel@tonic-gate 
13387c478bd9Sstevel@tonic-gate /*
13397c478bd9Sstevel@tonic-gate  *	Primitives to handle XID and TEST operations
13407c478bd9Sstevel@tonic-gate  */
13417c478bd9Sstevel@tonic-gate 
13427c478bd9Sstevel@tonic-gate /*
13437c478bd9Sstevel@tonic-gate  * DL_TEST_REQ, M_PROTO type
13447c478bd9Sstevel@tonic-gate  */
13457c478bd9Sstevel@tonic-gate typedef struct {
13467c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_TEST_REQ */
13477c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_flag;		/* poll/final */
13487c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* DLSAP length of dest. user */
13497c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
13507c478bd9Sstevel@tonic-gate } dl_test_req_t;
13517c478bd9Sstevel@tonic-gate 
13527c478bd9Sstevel@tonic-gate /*
13537c478bd9Sstevel@tonic-gate  * DL_TEST_IND, M_PROTO type
13547c478bd9Sstevel@tonic-gate  */
13557c478bd9Sstevel@tonic-gate typedef struct {
13567c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_TEST_IND */
13577c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_flag;		/* poll/final */
13587c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* dlsap length of dest. user */
13597c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
13607c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* dlsap length of source */
13617c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
13627c478bd9Sstevel@tonic-gate } dl_test_ind_t;
13637c478bd9Sstevel@tonic-gate 
13647c478bd9Sstevel@tonic-gate /*
13657c478bd9Sstevel@tonic-gate  *	DL_TEST_RES, M_PROTO type
13667c478bd9Sstevel@tonic-gate  */
13677c478bd9Sstevel@tonic-gate typedef struct {
13687c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_TEST_RES */
13697c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_flag;		/* poll/final */
13707c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* DLSAP length of dest. user */
13717c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
13727c478bd9Sstevel@tonic-gate } dl_test_res_t;
13737c478bd9Sstevel@tonic-gate 
13747c478bd9Sstevel@tonic-gate /*
13757c478bd9Sstevel@tonic-gate  *	DL_TEST_CON, M_PROTO type
13767c478bd9Sstevel@tonic-gate  */
13777c478bd9Sstevel@tonic-gate typedef struct {
13787c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_TEST_CON */
13797c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_flag;		/* poll/final */
13807c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* dlsap length of dest. user */
13817c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
13827c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* dlsap length of source */
13837c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
13847c478bd9Sstevel@tonic-gate } dl_test_con_t;
13857c478bd9Sstevel@tonic-gate 
13867c478bd9Sstevel@tonic-gate /*
13877c478bd9Sstevel@tonic-gate  * DL_XID_REQ, M_PROTO type
13887c478bd9Sstevel@tonic-gate  */
13897c478bd9Sstevel@tonic-gate typedef struct {
13907c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_XID_REQ */
13917c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_flag;		/* poll/final */
13927c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* dlsap length of dest. user */
13937c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
13947c478bd9Sstevel@tonic-gate } dl_xid_req_t;
13957c478bd9Sstevel@tonic-gate 
13967c478bd9Sstevel@tonic-gate /*
13977c478bd9Sstevel@tonic-gate  * DL_XID_IND, M_PROTO type
13987c478bd9Sstevel@tonic-gate  */
13997c478bd9Sstevel@tonic-gate typedef struct {
14007c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_XID_IND */
14017c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_flag;		/* poll/final */
14027c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* dlsap length of dest. user */
14037c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
14047c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* dlsap length of source */
14057c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
14067c478bd9Sstevel@tonic-gate } dl_xid_ind_t;
14077c478bd9Sstevel@tonic-gate 
14087c478bd9Sstevel@tonic-gate /*
14097c478bd9Sstevel@tonic-gate  *	DL_XID_RES, M_PROTO type
14107c478bd9Sstevel@tonic-gate  */
14117c478bd9Sstevel@tonic-gate typedef struct {
14127c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_XID_RES */
14137c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_flag;		/* poll/final */
14147c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* DLSAP length of dest. user */
14157c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
14167c478bd9Sstevel@tonic-gate } dl_xid_res_t;
14177c478bd9Sstevel@tonic-gate 
14187c478bd9Sstevel@tonic-gate /*
14197c478bd9Sstevel@tonic-gate  *	DL_XID_CON, M_PROTO type
14207c478bd9Sstevel@tonic-gate  */
14217c478bd9Sstevel@tonic-gate typedef struct {
14227c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_XID_CON */
14237c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_flag;		/* poll/final */
14247c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* dlsap length of dest. user */
14257c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
14267c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* dlsap length of source */
14277c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
14287c478bd9Sstevel@tonic-gate } dl_xid_con_t;
14297c478bd9Sstevel@tonic-gate 
14307c478bd9Sstevel@tonic-gate /*
14317c478bd9Sstevel@tonic-gate  *	ACKNOWLEDGED CONNECTIONLESS SERVICE PRIMITIVES
14327c478bd9Sstevel@tonic-gate  */
14337c478bd9Sstevel@tonic-gate 
14347c478bd9Sstevel@tonic-gate /*
14357c478bd9Sstevel@tonic-gate  * DL_DATA_ACK_REQ, M_PROTO type
14367c478bd9Sstevel@tonic-gate  */
14377c478bd9Sstevel@tonic-gate typedef struct {
14387c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_DATA_ACK_REQ */
14397c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation;		/* User's correlation token */
14407c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* length of destination addr */
14417c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
14427c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* length of source address */
14437c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
14447c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_priority;		/* priority */
14457c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_service_class;	/* DL_RQST_RSP|DL_RQST_NORSP */
14467c478bd9Sstevel@tonic-gate } dl_data_ack_req_t;
14477c478bd9Sstevel@tonic-gate 
14487c478bd9Sstevel@tonic-gate /*
14497c478bd9Sstevel@tonic-gate  * DL_DATA_ACK_IND, M_PROTO type
14507c478bd9Sstevel@tonic-gate  */
14517c478bd9Sstevel@tonic-gate typedef struct {
14527c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_DATA_ACK_IND */
14537c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* length of destination addr */
14547c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
14557c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* length of source address */
14567c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
14577c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_priority;		/* pri. for data unit transm. */
14587c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_service_class;	/* DL_RQST_RSP|DL_RQST_NORSP */
14597c478bd9Sstevel@tonic-gate } dl_data_ack_ind_t;
14607c478bd9Sstevel@tonic-gate 
14617c478bd9Sstevel@tonic-gate /*
14627c478bd9Sstevel@tonic-gate  * DL_DATA_ACK_STATUS_IND, M_PROTO type
14637c478bd9Sstevel@tonic-gate  */
14647c478bd9Sstevel@tonic-gate typedef struct {
14657c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_DATA_ACK_STATUS_IND */
14667c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation;	/* User's correlation token */
14677c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_status;	/* success or failure of previous req */
14687c478bd9Sstevel@tonic-gate } dl_data_ack_status_ind_t;
14697c478bd9Sstevel@tonic-gate 
14707c478bd9Sstevel@tonic-gate /*
14717c478bd9Sstevel@tonic-gate  * DL_REPLY_REQ, M_PROTO type
14727c478bd9Sstevel@tonic-gate  */
14737c478bd9Sstevel@tonic-gate typedef struct {
14747c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_REPLY_REQ */
14757c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation;		/* User's correlation token */
14767c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* destination address length */
14777c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
14787c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* source address length */
14797c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
14807c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_priority;		/* pri for data unit trans. */
14817c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_service_class;
14827c478bd9Sstevel@tonic-gate } dl_reply_req_t;
14837c478bd9Sstevel@tonic-gate 
14847c478bd9Sstevel@tonic-gate /*
14857c478bd9Sstevel@tonic-gate  * DL_REPLY_IND, M_PROTO type
14867c478bd9Sstevel@tonic-gate  */
14877c478bd9Sstevel@tonic-gate typedef struct {
14887c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_REPLY_IND */
14897c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_length;	/* destination address length */
14907c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_dest_addr_offset;	/* offset from start of block */
14917c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* length of source address */
14927c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
14937c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_priority;		/* pri for data unit trans. */
14947c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_service_class;	/* DL_RQST_RSP|DL_RQST_NORSP */
14957c478bd9Sstevel@tonic-gate } dl_reply_ind_t;
14967c478bd9Sstevel@tonic-gate 
14977c478bd9Sstevel@tonic-gate /*
14987c478bd9Sstevel@tonic-gate  * DL_REPLY_STATUS_IND, M_PROTO type
14997c478bd9Sstevel@tonic-gate  */
15007c478bd9Sstevel@tonic-gate typedef struct {
15017c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_REPLY_STATUS_IND */
15027c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation;	/* User's correlation token */
15037c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_status;	/* success or failure of previous req */
15047c478bd9Sstevel@tonic-gate } dl_reply_status_ind_t;
15057c478bd9Sstevel@tonic-gate 
15067c478bd9Sstevel@tonic-gate /*
15077c478bd9Sstevel@tonic-gate  * DL_REPLY_UPDATE_REQ, M_PROTO type
15087c478bd9Sstevel@tonic-gate  */
15097c478bd9Sstevel@tonic-gate typedef struct {
15107c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;		/* DL_REPLY_UPDATE_REQ */
15117c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation;		/* user's correlation token */
15127c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_length;	/* length of source address */
15137c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_src_addr_offset;	/* offset from start of block */
15147c478bd9Sstevel@tonic-gate } dl_reply_update_req_t;
15157c478bd9Sstevel@tonic-gate 
15167c478bd9Sstevel@tonic-gate /*
15177c478bd9Sstevel@tonic-gate  * DL_REPLY_UPDATE_STATUS_IND, M_PROTO type
15187c478bd9Sstevel@tonic-gate  */
15197c478bd9Sstevel@tonic-gate typedef struct {
15207c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_primitive;	/* DL_REPLY_UPDATE_STATUS_IND */
15217c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_correlation;	/* User's correlation token */
15227c478bd9Sstevel@tonic-gate 	t_uscalar_t	dl_status;	/* success or failure of previous req */
15237c478bd9Sstevel@tonic-gate } dl_reply_update_status_ind_t;
15247c478bd9Sstevel@tonic-gate 
15257c478bd9Sstevel@tonic-gate union DL_primitives {
15267c478bd9Sstevel@tonic-gate 	t_uscalar_t		dl_primitive;
15277c478bd9Sstevel@tonic-gate 	dl_info_req_t		info_req;
15287c478bd9Sstevel@tonic-gate 	dl_info_ack_t		info_ack;
15297c478bd9Sstevel@tonic-gate 	dl_attach_req_t		attach_req;
15307c478bd9Sstevel@tonic-gate 	dl_detach_req_t		detach_req;
15317c478bd9Sstevel@tonic-gate 	dl_bind_req_t		bind_req;
15327c478bd9Sstevel@tonic-gate 	dl_bind_ack_t		bind_ack;
15337c478bd9Sstevel@tonic-gate 	dl_unbind_req_t		unbind_req;
15347c478bd9Sstevel@tonic-gate 	dl_subs_bind_req_t	subs_bind_req;
15357c478bd9Sstevel@tonic-gate 	dl_subs_bind_ack_t	subs_bind_ack;
15367c478bd9Sstevel@tonic-gate 	dl_subs_unbind_req_t	subs_unbind_req;
15377c478bd9Sstevel@tonic-gate 	dl_ok_ack_t		ok_ack;
15387c478bd9Sstevel@tonic-gate 	dl_error_ack_t		error_ack;
15397c478bd9Sstevel@tonic-gate 	dl_connect_req_t	connect_req;
15407c478bd9Sstevel@tonic-gate 	dl_connect_ind_t	connect_ind;
15417c478bd9Sstevel@tonic-gate 	dl_connect_res_t	connect_res;
15427c478bd9Sstevel@tonic-gate 	dl_connect_con_t	connect_con;
15437c478bd9Sstevel@tonic-gate 	dl_token_req_t		token_req;
15447c478bd9Sstevel@tonic-gate 	dl_token_ack_t		token_ack;
15457c478bd9Sstevel@tonic-gate 	dl_disconnect_req_t	disconnect_req;
15467c478bd9Sstevel@tonic-gate 	dl_disconnect_ind_t	disconnect_ind;
15477c478bd9Sstevel@tonic-gate 	dl_reset_req_t		reset_req;
15487c478bd9Sstevel@tonic-gate 	dl_reset_ind_t		reset_ind;
15497c478bd9Sstevel@tonic-gate 	dl_reset_res_t		reset_res;
15507c478bd9Sstevel@tonic-gate 	dl_reset_con_t		reset_con;
15517c478bd9Sstevel@tonic-gate 	dl_unitdata_req_t	unitdata_req;
15527c478bd9Sstevel@tonic-gate 	dl_unitdata_ind_t	unitdata_ind;
15537c478bd9Sstevel@tonic-gate 	dl_uderror_ind_t	uderror_ind;
15547c478bd9Sstevel@tonic-gate 	dl_udqos_req_t		udqos_req;
15557c478bd9Sstevel@tonic-gate 	dl_enabmulti_req_t	enabmulti_req;
15567c478bd9Sstevel@tonic-gate 	dl_disabmulti_req_t	disabmulti_req;
15577c478bd9Sstevel@tonic-gate 	dl_promiscon_req_t	promiscon_req;
15587c478bd9Sstevel@tonic-gate 	dl_promiscoff_req_t	promiscoff_req;
15597c478bd9Sstevel@tonic-gate 	dl_phys_addr_req_t	physaddr_req;
15607c478bd9Sstevel@tonic-gate 	dl_phys_addr_ack_t	physaddr_ack;
15617c478bd9Sstevel@tonic-gate 	dl_set_phys_addr_req_t	set_physaddr_req;
15627c478bd9Sstevel@tonic-gate 	dl_get_statistics_req_t	get_statistics_req;
15637c478bd9Sstevel@tonic-gate 	dl_get_statistics_ack_t	get_statistics_ack;
15647c478bd9Sstevel@tonic-gate 	dl_notify_req_t		notify_req;
15657c478bd9Sstevel@tonic-gate 	dl_notify_ack_t		notify_ack;
15667c478bd9Sstevel@tonic-gate 	dl_notify_ind_t		notify_ind;
15677c478bd9Sstevel@tonic-gate 	dl_aggr_req_t		aggr_req;
15687c478bd9Sstevel@tonic-gate 	dl_aggr_ind_t		aggr_ind;
15697c478bd9Sstevel@tonic-gate 	dl_unaggr_req_t		unaggr_req;
15707c478bd9Sstevel@tonic-gate 	dl_test_req_t		test_req;
15717c478bd9Sstevel@tonic-gate 	dl_test_ind_t		test_ind;
15727c478bd9Sstevel@tonic-gate 	dl_test_res_t		test_res;
15737c478bd9Sstevel@tonic-gate 	dl_test_con_t		test_con;
15747c478bd9Sstevel@tonic-gate 	dl_xid_req_t		xid_req;
15757c478bd9Sstevel@tonic-gate 	dl_xid_ind_t		xid_ind;
15767c478bd9Sstevel@tonic-gate 	dl_xid_res_t		xid_res;
15777c478bd9Sstevel@tonic-gate 	dl_xid_con_t		xid_con;
15787c478bd9Sstevel@tonic-gate 	dl_data_ack_req_t	data_ack_req;
15797c478bd9Sstevel@tonic-gate 	dl_data_ack_ind_t	data_ack_ind;
15807c478bd9Sstevel@tonic-gate 	dl_data_ack_status_ind_t	data_ack_status_ind;
15817c478bd9Sstevel@tonic-gate 	dl_reply_req_t		reply_req;
15827c478bd9Sstevel@tonic-gate 	dl_reply_ind_t		reply_ind;
15837c478bd9Sstevel@tonic-gate 	dl_reply_status_ind_t	reply_status_ind;
15847c478bd9Sstevel@tonic-gate 	dl_reply_update_req_t	reply_update_req;
15857c478bd9Sstevel@tonic-gate 	dl_reply_update_status_ind_t	reply_update_status_ind;
15867c478bd9Sstevel@tonic-gate 	dl_capability_req_t	capability_req;
15877c478bd9Sstevel@tonic-gate 	dl_capability_ack_t	capability_ack;
15887c478bd9Sstevel@tonic-gate 	dl_control_req_t	control_req;
15897c478bd9Sstevel@tonic-gate 	dl_control_ack_t	control_ack;
15907c478bd9Sstevel@tonic-gate 	dl_passive_req_t	passive_req;
1591023dbbefSjoycey 	dl_intr_mode_req_t	intr_mode_req;
15927c478bd9Sstevel@tonic-gate };
15937c478bd9Sstevel@tonic-gate 
15947c478bd9Sstevel@tonic-gate #define	DL_INFO_REQ_SIZE	sizeof (dl_info_req_t)
15957c478bd9Sstevel@tonic-gate #define	DL_INFO_ACK_SIZE	sizeof (dl_info_ack_t)
15967c478bd9Sstevel@tonic-gate #define	DL_ATTACH_REQ_SIZE	sizeof (dl_attach_req_t)
15977c478bd9Sstevel@tonic-gate #define	DL_DETACH_REQ_SIZE	sizeof (dl_detach_req_t)
15987c478bd9Sstevel@tonic-gate #define	DL_BIND_REQ_SIZE	sizeof (dl_bind_req_t)
15997c478bd9Sstevel@tonic-gate #define	DL_BIND_ACK_SIZE	sizeof (dl_bind_ack_t)
16007c478bd9Sstevel@tonic-gate #define	DL_UNBIND_REQ_SIZE	sizeof (dl_unbind_req_t)
16017c478bd9Sstevel@tonic-gate #define	DL_SUBS_BIND_REQ_SIZE	sizeof (dl_subs_bind_req_t)
16027c478bd9Sstevel@tonic-gate #define	DL_SUBS_BIND_ACK_SIZE	sizeof (dl_subs_bind_ack_t)
16037c478bd9Sstevel@tonic-gate #define	DL_SUBS_UNBIND_REQ_SIZE	sizeof (dl_subs_unbind_req_t)
16047c478bd9Sstevel@tonic-gate #define	DL_OK_ACK_SIZE		sizeof (dl_ok_ack_t)
16057c478bd9Sstevel@tonic-gate #define	DL_ERROR_ACK_SIZE	sizeof (dl_error_ack_t)
16067c478bd9Sstevel@tonic-gate #define	DL_CONNECT_REQ_SIZE	sizeof (dl_connect_req_t)
16077c478bd9Sstevel@tonic-gate #define	DL_CONNECT_IND_SIZE	sizeof (dl_connect_ind_t)
16087c478bd9Sstevel@tonic-gate #define	DL_CONNECT_RES_SIZE	sizeof (dl_connect_res_t)
16097c478bd9Sstevel@tonic-gate #define	DL_CONNECT_CON_SIZE	sizeof (dl_connect_con_t)
16107c478bd9Sstevel@tonic-gate #define	DL_TOKEN_REQ_SIZE	sizeof (dl_token_req_t)
16117c478bd9Sstevel@tonic-gate #define	DL_TOKEN_ACK_SIZE	sizeof (dl_token_ack_t)
16127c478bd9Sstevel@tonic-gate #define	DL_DISCONNECT_REQ_SIZE	sizeof (dl_disconnect_req_t)
16137c478bd9Sstevel@tonic-gate #define	DL_DISCONNECT_IND_SIZE	sizeof (dl_disconnect_ind_t)
16147c478bd9Sstevel@tonic-gate #define	DL_RESET_REQ_SIZE	sizeof (dl_reset_req_t)
16157c478bd9Sstevel@tonic-gate #define	DL_RESET_IND_SIZE	sizeof (dl_reset_ind_t)
16167c478bd9Sstevel@tonic-gate #define	DL_RESET_RES_SIZE	sizeof (dl_reset_res_t)
16177c478bd9Sstevel@tonic-gate #define	DL_RESET_CON_SIZE	sizeof (dl_reset_con_t)
16187c478bd9Sstevel@tonic-gate #define	DL_UNITDATA_REQ_SIZE	sizeof (dl_unitdata_req_t)
16197c478bd9Sstevel@tonic-gate #define	DL_UNITDATA_IND_SIZE	sizeof (dl_unitdata_ind_t)
16207c478bd9Sstevel@tonic-gate #define	DL_UDERROR_IND_SIZE	sizeof (dl_uderror_ind_t)
16217c478bd9Sstevel@tonic-gate #define	DL_UDQOS_REQ_SIZE	sizeof (dl_udqos_req_t)
16227c478bd9Sstevel@tonic-gate #define	DL_ENABMULTI_REQ_SIZE	sizeof (dl_enabmulti_req_t)
16237c478bd9Sstevel@tonic-gate #define	DL_DISABMULTI_REQ_SIZE	sizeof (dl_disabmulti_req_t)
16247c478bd9Sstevel@tonic-gate #define	DL_PROMISCON_REQ_SIZE	sizeof (dl_promiscon_req_t)
16257c478bd9Sstevel@tonic-gate #define	DL_PROMISCOFF_REQ_SIZE	sizeof (dl_promiscoff_req_t)
16267c478bd9Sstevel@tonic-gate #define	DL_PHYS_ADDR_REQ_SIZE	sizeof (dl_phys_addr_req_t)
16277c478bd9Sstevel@tonic-gate #define	DL_PHYS_ADDR_ACK_SIZE	sizeof (dl_phys_addr_ack_t)
16287c478bd9Sstevel@tonic-gate #define	DL_SET_PHYS_ADDR_REQ_SIZE	sizeof (dl_set_phys_addr_req_t)
16297c478bd9Sstevel@tonic-gate #define	DL_GET_STATISTICS_REQ_SIZE	sizeof (dl_get_statistics_req_t)
16307c478bd9Sstevel@tonic-gate #define	DL_GET_STATISTICS_ACK_SIZE	sizeof (dl_get_statistics_ack_t)
16317c478bd9Sstevel@tonic-gate #define	DL_NOTIFY_REQ_SIZE	sizeof (dl_notify_req_t)
16327c478bd9Sstevel@tonic-gate #define	DL_NOTIFY_ACK_SIZE	sizeof (dl_notify_ack_t)
16337c478bd9Sstevel@tonic-gate #define	DL_NOTIFY_IND_SIZE	sizeof (dl_notify_ind_t)
16347c478bd9Sstevel@tonic-gate #define	DL_AGGR_REQ_SIZE	sizeof (dl_aggr_req_t)
16357c478bd9Sstevel@tonic-gate #define	DL_AGGR_IND_SIZE	sizeof (dl_aggr_ind_t)
16367c478bd9Sstevel@tonic-gate #define	DL_UNAGGR_REQ_SIZE	sizeof (dl_unaggr_req_t)
16377c478bd9Sstevel@tonic-gate #define	DL_XID_REQ_SIZE		sizeof (dl_xid_req_t)
16387c478bd9Sstevel@tonic-gate #define	DL_XID_IND_SIZE		sizeof (dl_xid_ind_t)
16397c478bd9Sstevel@tonic-gate #define	DL_XID_RES_SIZE		sizeof (dl_xid_res_t)
16407c478bd9Sstevel@tonic-gate #define	DL_XID_CON_SIZE		sizeof (dl_xid_con_t)
16417c478bd9Sstevel@tonic-gate #define	DL_TEST_REQ_SIZE	sizeof (dl_test_req_t)
16427c478bd9Sstevel@tonic-gate #define	DL_TEST_IND_SIZE	sizeof (dl_test_ind_t)
16437c478bd9Sstevel@tonic-gate #define	DL_TEST_RES_SIZE	sizeof (dl_test_res_t)
16447c478bd9Sstevel@tonic-gate #define	DL_TEST_CON_SIZE	sizeof (dl_test_con_t)
16457c478bd9Sstevel@tonic-gate #define	DL_DATA_ACK_REQ_SIZE	sizeof (dl_data_ack_req_t)
16467c478bd9Sstevel@tonic-gate #define	DL_DATA_ACK_IND_SIZE	sizeof (dl_data_ack_ind_t)
16477c478bd9Sstevel@tonic-gate #define	DL_DATA_ACK_STATUS_IND_SIZE	sizeof (dl_data_ack_status_ind_t)
16487c478bd9Sstevel@tonic-gate #define	DL_REPLY_REQ_SIZE	sizeof (dl_reply_req_t)
16497c478bd9Sstevel@tonic-gate #define	DL_REPLY_IND_SIZE	sizeof (dl_reply_ind_t)
16507c478bd9Sstevel@tonic-gate #define	DL_REPLY_STATUS_IND_SIZE	sizeof (dl_reply_status_ind_t)
16517c478bd9Sstevel@tonic-gate #define	DL_REPLY_UPDATE_REQ_SIZE	sizeof (dl_reply_update_req_t)
16527c478bd9Sstevel@tonic-gate #define	DL_REPLY_UPDATE_STATUS_IND_SIZE	sizeof (dl_reply_update_status_ind_t)
16537c478bd9Sstevel@tonic-gate #define	DL_CAPABILITY_REQ_SIZE	sizeof (dl_capability_req_t)
16547c478bd9Sstevel@tonic-gate #define	DL_CAPABILITY_ACK_SIZE	sizeof (dl_capability_ack_t)
16557c478bd9Sstevel@tonic-gate #define	DL_CONTROL_REQ_SIZE	sizeof (dl_control_req_t)
16567c478bd9Sstevel@tonic-gate #define	DL_CONTROL_ACK_SIZE	sizeof (dl_control_ack_t)
16577c478bd9Sstevel@tonic-gate #define	DL_PASSIVE_REQ_SIZE	sizeof (dl_passive_req_t)
1658023dbbefSjoycey #define	DL_INTR_MODE_REQ_SIZE	sizeof (dl_intr_mode_req_t)
16597c478bd9Sstevel@tonic-gate 
16607c478bd9Sstevel@tonic-gate #ifdef	_KERNEL
16617c478bd9Sstevel@tonic-gate /*
16627c478bd9Sstevel@tonic-gate  * The following are unstable, internal DLPI utility routines.
16637c478bd9Sstevel@tonic-gate  */
16647c478bd9Sstevel@tonic-gate extern void	dlbindack(queue_t *, mblk_t *, t_scalar_t, void *, t_uscalar_t,
16657c478bd9Sstevel@tonic-gate 		    t_uscalar_t, t_uscalar_t);
16667c478bd9Sstevel@tonic-gate extern void	dlokack(queue_t *, mblk_t *, t_uscalar_t);
16677c478bd9Sstevel@tonic-gate extern void	dlerrorack(queue_t *, mblk_t *, t_uscalar_t, t_uscalar_t,
16687c478bd9Sstevel@tonic-gate 		    t_uscalar_t);
16697c478bd9Sstevel@tonic-gate extern void	dluderrorind(queue_t *, mblk_t *, void *, t_uscalar_t,
16707c478bd9Sstevel@tonic-gate 		    t_uscalar_t, t_uscalar_t);
16717c478bd9Sstevel@tonic-gate extern void	dlphysaddrack(queue_t *, mblk_t *, void *, t_uscalar_t);
16727c478bd9Sstevel@tonic-gate extern void	dlcapabsetqid(dl_mid_t *, const queue_t *);
16737c478bd9Sstevel@tonic-gate extern boolean_t dlcapabcheckqid(const dl_mid_t *, const queue_t *);
16747c478bd9Sstevel@tonic-gate extern void	dlnotifyack(queue_t *, mblk_t *, uint32_t);
1675d62bc4baSyz147064 
1676d62bc4baSyz147064 /*
1677d62bc4baSyz147064  * The ldi_handle_t typedef is in <sys/sunldi.h>, which in turn requires
1678d62bc4baSyz147064  * <sys/sunddi.h>, which pulls in <sys/cmn_err.h>, which declares kernel
1679d62bc4baSyz147064  * versions of the printf() functions that conflict with the libc ones.
1680d62bc4baSyz147064  * This causes conflicts when building MDB modules like ARP that #define
1681d62bc4baSyz147064  * _KERNEL.  So we use `struct __ldi_handle *' instead.
1682d62bc4baSyz147064  */
1683d62bc4baSyz147064 struct __ldi_handle;
1684d62bc4baSyz147064 extern int dl_attach(struct __ldi_handle *, int, dl_error_ack_t *);
1685d62bc4baSyz147064 extern int dl_bind(struct __ldi_handle *, uint_t, dl_error_ack_t *);
1686d62bc4baSyz147064 extern int dl_phys_addr(struct __ldi_handle *, uchar_t *, size_t *,
1687d62bc4baSyz147064     dl_error_ack_t *);
1688d62bc4baSyz147064 extern int dl_info(struct __ldi_handle *, dl_info_ack_t *, uchar_t *, size_t *,
1689d62bc4baSyz147064     dl_error_ack_t *);
1690d62bc4baSyz147064 extern int dl_notify(struct __ldi_handle *, uint32_t *, dl_error_ack_t *);
1691d62bc4baSyz147064 extern const char *dl_errstr(t_uscalar_t);
1692d62bc4baSyz147064 extern const char *dl_primstr(t_uscalar_t);
1693d62bc4baSyz147064 extern const char *dl_mactypestr(t_uscalar_t);
1694d62bc4baSyz147064 
16957c478bd9Sstevel@tonic-gate #endif	/* _KERNEL */
16967c478bd9Sstevel@tonic-gate 
16977c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
16987c478bd9Sstevel@tonic-gate }
16997c478bd9Sstevel@tonic-gate #endif
17007c478bd9Sstevel@tonic-gate 
17017c478bd9Sstevel@tonic-gate #endif /* _SYS_DLPI_H */
1702