1700 Add SCSI UNMAP support
[unleashed.git] / usr / src / uts / common / sys / dlpi.h
blob5bc2bd41c598a03d12090435f4162134a26fd968
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
25 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
26 /* All Rights Reserved */
30 * Data Link Provider Interface, Version 2.0
31 * Refer to document: "STREAMS DLPI Spec", 800-6915-01.
34 #ifndef _SYS_DLPI_H
35 #define _SYS_DLPI_H
37 #include <sys/types.h>
38 #include <sys/stream.h>
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
44 * Sun additions.
46 #define DLIOC ('D' << 8)
47 #define DLIOCRAW (DLIOC|1) /* M_DATA "raw" mode */
48 #define DLIOCNATIVE (DLIOC|2) /* Native traffic mode */
49 #define DLIOCMARGININFO (DLIOC|3) /* margin size info */
50 #define DLIOCIPNETINFO (DLIOC|4) /* ipnet header */
51 #define DLIOCLOWLINK (DLIOC|5) /* low-level link up/down */
52 #define DLIOCHDRINFO (DLIOC|10) /* IP fast-path */
53 #define DL_IOC_HDR_INFO DLIOCHDRINFO
55 #define DL_IPNETINFO_VERSION 0x1
57 typedef struct dl_ipnetinfo {
58 uint8_t dli_version; /* DL_IPNETINFO_* version */
59 uint8_t dli_family; /* packet IP header version */
60 uint16_t dli_htype;
61 uint32_t dli_pktlen; /* length of dl_ipnetinfo_t */
62 uint32_t dli_ifindex;
63 uint32_t dli_grifindex;
64 uint32_t dli_zsrc; /* packet source zone ID (if any) */
65 uint32_t dli_zdst; /* packet dest zone ID (if any) */
66 } dl_ipnetinfo_t;
69 * DLPI revision definition history
71 #define DL_CURRENT_VERSION 0x02 /* current version of dlpi */
72 #define DL_VERSION_2 0x02 /* version of dlpi March 12, 1991 */
75 * Primitives for Local Management Services
77 #define DL_INFO_REQ 0x00 /* Information Req */
78 #define DL_INFO_ACK 0x03 /* Information Ack */
79 #define DL_ATTACH_REQ 0x0b /* Attach a PPA */
80 #define DL_DETACH_REQ 0x0c /* Detach a PPA */
81 #define DL_BIND_REQ 0x01 /* Bind DLSAP address */
82 #define DL_BIND_ACK 0x04 /* DLSAP address bound */
83 #define DL_UNBIND_REQ 0x02 /* Unbind DLSAP address */
84 #define DL_OK_ACK 0x06 /* Success acknowledgment */
85 #define DL_ERROR_ACK 0x05 /* Error acknowledgment */
86 #define DL_SUBS_BIND_REQ 0x1b /* Bind Subsequent DLSAP address */
87 #define DL_SUBS_BIND_ACK 0x1c /* Subsequent DLSAP address bound */
88 #define DL_SUBS_UNBIND_REQ 0x15 /* Subsequent unbind */
89 #define DL_ENABMULTI_REQ 0x1d /* Enable multicast addresses */
90 #define DL_DISABMULTI_REQ 0x1e /* Disable multicast addresses */
91 #define DL_PROMISCON_REQ 0x1f /* Turn on promiscuous mode */
92 #define DL_PROMISCOFF_REQ 0x20 /* Turn off promiscuous mode */
95 * Solaris specific local management
97 #define DL_NOTIFY_REQ 0x100 /* Enable notifications */
98 #define DL_NOTIFY_ACK 0x101 /* Supported notifications */
99 #define DL_NOTIFY_IND 0x102 /* Notification from provider */
100 #define DL_AGGR_REQ 0x103 /* Enable link aggregation */
101 #define DL_AGGR_IND 0x104 /* Result from link aggregation */
102 #define DL_UNAGGR_REQ 0x105 /* Disable link aggregation */
103 #define DL_CAPABILITY_REQ 0x110 /* Capability request */
104 #define DL_CAPABILITY_ACK 0x111 /* Capability ack */
105 #define DL_CONTROL_REQ 0x112 /* Device specific control request */
106 #define DL_CONTROL_ACK 0x113 /* Device specific control ack */
107 #define DL_PASSIVE_REQ 0x114 /* Allow access to aggregated link */
108 #define DL_INTR_MODE_REQ 0x115 /* Request Rx processing in INTR mode */
109 #define DL_NOTIFY_CONF 0x116 /* Notification from upstream */
112 * Primitives used for Connectionless Service
114 #define DL_UNITDATA_REQ 0x07 /* datagram send request */
115 #define DL_UNITDATA_IND 0x08 /* datagram receive indication */
116 #define DL_UDERROR_IND 0x09 /* datagram error indication */
117 #define DL_UDQOS_REQ 0x0a /* set QOS for subsequent datagrams */
120 * Primitives used for Connection-Oriented Service
122 #define DL_CONNECT_REQ 0x0d /* Connect request */
123 #define DL_CONNECT_IND 0x0e /* Incoming connect indication */
124 #define DL_CONNECT_RES 0x0f /* Accept previous connect indication */
125 #define DL_CONNECT_CON 0x10 /* Connection established */
127 #define DL_TOKEN_REQ 0x11 /* Passoff token request */
128 #define DL_TOKEN_ACK 0x12 /* Passoff token ack */
130 #define DL_DISCONNECT_REQ 0x13 /* Disconnect request */
131 #define DL_DISCONNECT_IND 0x14 /* Disconnect indication */
133 #define DL_RESET_REQ 0x17 /* Reset service request */
134 #define DL_RESET_IND 0x18 /* Incoming reset indication */
135 #define DL_RESET_RES 0x19 /* Complete reset processing */
136 #define DL_RESET_CON 0x1a /* Reset processing complete */
139 * Primitives used for Acknowledged Connectionless Service
142 #define DL_DATA_ACK_REQ 0x21 /* data unit transmission request */
143 #define DL_DATA_ACK_IND 0x22 /* Arrival of a command PDU */
144 #define DL_DATA_ACK_STATUS_IND 0x23 /* Status indication of DATA_ACK_REQ */
145 #define DL_REPLY_REQ 0x24 /* Request a DLSDU from the remote */
146 #define DL_REPLY_IND 0x25 /* Arrival of a command PDU */
147 #define DL_REPLY_STATUS_IND 0x26 /* Status indication of REPLY_REQ */
148 #define DL_REPLY_UPDATE_REQ 0x27 /* Hold a DLSDU for transmission */
149 #define DL_REPLY_UPDATE_STATUS_IND 0x28 /* Status of REPLY_UPDATE req */
152 * Primitives used for XID and TEST operations
155 #define DL_XID_REQ 0x29 /* Request to send an XID PDU */
156 #define DL_XID_IND 0x2a /* Arrival of an XID PDU */
157 #define DL_XID_RES 0x2b /* request to send a response XID PDU */
158 #define DL_XID_CON 0x2c /* Arrival of a response XID PDU */
159 #define DL_TEST_REQ 0x2d /* TEST command request */
160 #define DL_TEST_IND 0x2e /* TEST response indication */
161 #define DL_TEST_RES 0x2f /* TEST response */
162 #define DL_TEST_CON 0x30 /* TEST Confirmation */
165 * Primitives to get and set the physical address, and to get
166 * Statistics
169 #define DL_PHYS_ADDR_REQ 0x31 /* Request to get physical addr */
170 #define DL_PHYS_ADDR_ACK 0x32 /* Return physical addr */
171 #define DL_SET_PHYS_ADDR_REQ 0x33 /* set physical addr */
172 #define DL_GET_STATISTICS_REQ 0x34 /* Request to get statistics */
173 #define DL_GET_STATISTICS_ACK 0x35 /* Return statistics */
176 * Invalid primitive
179 #define DL_PRIM_INVAL 0xffff /* Invalid DL primitive value */
182 * DLPI interface states
184 #define DL_UNATTACHED 0x04 /* PPA not attached */
185 #define DL_ATTACH_PENDING 0x05 /* Waiting ack of DL_ATTACH_REQ */
186 #define DL_DETACH_PENDING 0x06 /* Waiting ack of DL_DETACH_REQ */
187 #define DL_UNBOUND 0x00 /* PPA attached */
188 #define DL_BIND_PENDING 0x01 /* Waiting ack of DL_BIND_REQ */
189 #define DL_UNBIND_PENDING 0x02 /* Waiting ack of DL_UNBIND_REQ */
190 #define DL_IDLE 0x03 /* DLSAP bound, awaiting use */
191 #define DL_UDQOS_PENDING 0x07 /* Waiting ack of DL_UDQOS_REQ */
192 #define DL_OUTCON_PENDING 0x08 /* awaiting DL_CONN_CON */
193 #define DL_INCON_PENDING 0x09 /* awaiting DL_CONN_RES */
194 #define DL_CONN_RES_PENDING 0x0a /* Waiting ack of DL_CONNECT_RES */
195 #define DL_DATAXFER 0x0b /* connection-oriented data transfer */
196 #define DL_USER_RESET_PENDING 0x0c /* awaiting DL_RESET_CON */
197 #define DL_PROV_RESET_PENDING 0x0d /* awaiting DL_RESET_RES */
198 #define DL_RESET_RES_PENDING 0x0e /* Waiting ack of DL_RESET_RES */
199 #define DL_DISCON8_PENDING 0x0f /* Waiting ack of DL_DISC_REQ */
200 #define DL_DISCON9_PENDING 0x10 /* Waiting ack of DL_DISC_REQ */
201 #define DL_DISCON11_PENDING 0x11 /* Waiting ack of DL_DISC_REQ */
202 #define DL_DISCON12_PENDING 0x12 /* Waiting ack of DL_DISC_REQ */
203 #define DL_DISCON13_PENDING 0x13 /* Waiting ack of DL_DISC_REQ */
204 #define DL_SUBS_BIND_PND 0x14 /* Waiting ack of DL_SUBS_BIND_REQ */
205 #define DL_SUBS_UNBIND_PND 0x15 /* Waiting ack of DL_SUBS_UNBIND_REQ */
209 * DL_ERROR_ACK error return values
211 #define DL_ACCESS 0x02 /* Improper permissions for request */
212 #define DL_BADADDR 0x01 /* DLSAP addr in improper format or invalid */
213 #define DL_BADCORR 0x05 /* Seq number not from outstand DL_CONN_IND */
214 #define DL_BADDATA 0x06 /* User data exceeded provider limit */
215 #define DL_BADPPA 0x08 /* Specified PPA was invalid */
216 #define DL_BADPRIM 0x09 /* Primitive received not known by provider */
217 #define DL_BADQOSPARAM 0x0a /* QOS parameters contained invalid values */
218 #define DL_BADQOSTYPE 0x0b /* QOS structure type is unknown/unsupported */
219 #define DL_BADSAP 0x00 /* Bad LSAP selector */
220 #define DL_BADTOKEN 0x0c /* Token used not an active stream */
221 #define DL_BOUND 0x0d /* Attempted second bind with dl_max_conind */
222 #define DL_INITFAILED 0x0e /* Physical Link initialization failed */
223 #define DL_NOADDR 0x0f /* Provider couldn't allocate alt. address */
224 #define DL_NOTINIT 0x10 /* Physical Link not initialized */
225 #define DL_OUTSTATE 0x03 /* Primitive issued in improper state */
226 #define DL_SYSERR 0x04 /* UNIX system error occurred */
227 #define DL_UNSUPPORTED 0x07 /* Requested serv. not supplied by provider */
228 #define DL_UNDELIVERABLE 0x11 /* Previous data unit could not be delivered */
229 #define DL_NOTSUPPORTED 0x12 /* Primitive is known but not supported */
230 #define DL_TOOMANY 0x13 /* limit exceeded */
231 #define DL_NOTENAB 0x14 /* Promiscuous mode not enabled */
232 #define DL_BUSY 0x15 /* Other streams for PPA in post-attached */
234 #define DL_NOAUTO 0x16 /* Automatic handling XID&TEST not supported */
235 #define DL_NOXIDAUTO 0x17 /* Automatic handling of XID not supported */
236 #define DL_NOTESTAUTO 0x18 /* Automatic handling of TEST not supported */
237 #define DL_XIDAUTO 0x19 /* Automatic handling of XID response */
238 #define DL_TESTAUTO 0x1a /* Automatic handling of TEST response */
239 #define DL_PENDING 0x1b /* pending outstanding connect indications */
242 * DLPI media types supported
244 #define DL_CSMACD 0x0 /* IEEE 802.3 CSMA/CD network */
245 #define DL_TPB 0x1 /* IEEE 802.4 Token Passing Bus */
246 #define DL_TPR 0x2 /* IEEE 802.5 Token Passing Ring */
247 #define DL_METRO 0x3 /* IEEE 802.6 Metro Net */
248 #define DL_ETHER 0x4 /* Ethernet Bus */
249 #define DL_HDLC 0x05 /* ISO HDLC protocol support */
250 #define DL_CHAR 0x06 /* Character Synchronous protocol support */
251 #define DL_CTCA 0x07 /* IBM Channel-to-Channel Adapter */
252 #define DL_FDDI 0x08 /* Fiber Distributed data interface */
253 #define DL_FC 0x10 /* Fibre Channel interface */
254 #define DL_ATM 0x11 /* ATM */
255 #define DL_IPATM 0x12 /* ATM Classical IP interface */
256 #define DL_X25 0x13 /* X.25 LAPB interface */
257 #define DL_ISDN 0x14 /* ISDN interface */
258 #define DL_HIPPI 0x15 /* HIPPI interface */
259 #define DL_100VG 0x16 /* 100 Based VG Ethernet */
260 #define DL_100VGTPR 0x17 /* 100 Based VG Token Ring */
261 #define DL_ETH_CSMA 0x18 /* ISO 8802/3 and Ethernet */
262 #define DL_100BT 0x19 /* 100 Base T */
263 #define DL_IB 0x1a /* Infiniband */
264 #define DL_FRAME 0x0a /* Frame Relay LAPF */
265 #define DL_MPFRAME 0x0b /* Multi-protocol over Frame Relay */
266 #define DL_ASYNC 0x0c /* Character Asynchronous Protocol */
267 #define DL_IPX25 0x0d /* X.25 Classical IP interface */
268 #define DL_LOOP 0x0e /* software loopback */
269 #define DL_OTHER 0x09 /* Any other medium not listed above */
271 * Private media types. These must be above the value 0x80000000 as
272 * stated in the DLPI specification. NOTE: The SUNW_ prefix is used
273 * to denote synthetic DLPI types that are internal to the stack.
275 #define DL_IPV4 0x80000001ul /* IPv4 Tunnel Link */
276 #define DL_IPV6 0x80000002ul /* IPv6 Tunnel Link */
277 #define SUNW_DL_VNI 0x80000003ul /* Virtual network interface */
278 #define DL_WIFI 0x80000004ul /* IEEE 802.11 */
279 #define DL_IPNET 0x80000005ul /* ipnet(7D) link */
280 #define SUNW_DL_IPMP 0x80000006ul /* IPMP stub interface */
281 #define DL_6TO4 0x80000007ul /* 6to4 Tunnel Link */
284 * DLPI provider service supported.
285 * These must be allowed to be bitwise-OR for dl_service_mode in
286 * DL_INFO_ACK.
288 #define DL_CODLS 0x01 /* support connection-oriented service */
289 #define DL_CLDLS 0x02 /* support connectionless data link service */
290 #define DL_ACLDLS 0x04 /* support acknowledged connectionless serv. */
294 * DLPI provider style.
295 * The DLPI provider style which determines whether a provider
296 * requires a DL_ATTACH_REQ to inform the provider which PPA
297 * user messages should be sent/received on.
299 #define DL_STYLE1 0x0500 /* PPA is implicitly bound by open(2) */
300 #define DL_STYLE2 0x0501 /* PPA must be expl. bound via DL_ATTACH_REQ */
304 * DLPI Originator for Disconnect and Resets
306 #define DL_PROVIDER 0x0700
307 #define DL_USER 0x0701
310 * DLPI Disconnect Reasons
312 #define DL_CONREJ_DEST_UNKNOWN 0x0800
313 #define DL_CONREJ_DEST_UNREACH_PERMANENT 0x0801
314 #define DL_CONREJ_DEST_UNREACH_TRANSIENT 0x0802
315 #define DL_CONREJ_QOS_UNAVAIL_PERMANENT 0x0803
316 #define DL_CONREJ_QOS_UNAVAIL_TRANSIENT 0x0804
317 #define DL_CONREJ_PERMANENT_COND 0x0805
318 #define DL_CONREJ_TRANSIENT_COND 0x0806
319 #define DL_DISC_ABNORMAL_CONDITION 0x0807
320 #define DL_DISC_NORMAL_CONDITION 0x0808
321 #define DL_DISC_PERMANENT_CONDITION 0x0809
322 #define DL_DISC_TRANSIENT_CONDITION 0x080a
323 #define DL_DISC_UNSPECIFIED 0x080b
326 * DLPI Reset Reasons
328 #define DL_RESET_FLOW_CONTROL 0x0900
329 #define DL_RESET_LINK_ERROR 0x0901
330 #define DL_RESET_RESYNCH 0x0902
333 * DLPI status values for acknowledged connectionless data transfer
335 #define DL_CMD_MASK 0x0f /* mask for command portion of status */
336 #define DL_CMD_OK 0x00 /* Command Accepted */
337 #define DL_CMD_RS 0x01 /* Unimplemented or inactivated service */
338 #define DL_CMD_UE 0x05 /* Data Link User interface error */
339 #define DL_CMD_PE 0x06 /* Protocol error */
340 #define DL_CMD_IP 0x07 /* Permanent implementation dependent error */
341 #define DL_CMD_UN 0x09 /* Resources temporarily unavailable */
342 #define DL_CMD_IT 0x0f /* Temporary implementation dependent error */
343 #define DL_RSP_MASK 0xf0 /* mask for response portion of status */
344 #define DL_RSP_OK 0x00 /* Response DLSDU present */
345 #define DL_RSP_RS 0x10 /* Unimplemented or inactivated service */
346 #define DL_RSP_NE 0x30 /* Response DLSDU never submitted */
347 #define DL_RSP_NR 0x40 /* Response DLSDU not requested */
348 #define DL_RSP_UE 0x50 /* Data Link User interface error */
349 #define DL_RSP_IP 0x70 /* Permanent implementation dependent error */
350 #define DL_RSP_UN 0x90 /* Resources temporarily unavailable */
351 #define DL_RSP_IT 0xf0 /* Temporary implementation dependent error */
354 * Service Class values for acknowledged connectionless data transfer
356 #define DL_RQST_RSP 0x01 /* Use acknowledge capability in MAC sublayer */
357 #define DL_RQST_NORSP 0x02 /* No acknowledgement service requested */
360 * DLPI address type definition
362 #define DL_FACT_PHYS_ADDR 0x01 /* factory physical address */
363 #define DL_CURR_PHYS_ADDR 0x02 /* current physical address */
364 #define DL_IPV6_TOKEN 0x03 /* IPv6 interface token */
365 #define DL_IPV6_LINK_LAYER_ADDR 0x04 /* Neighbor Discovery format */
366 #define DL_CURR_DEST_ADDR 0x05 /* current destination address */
369 * DLPI flag definitions
371 #define DL_POLL_FINAL 0x01 /* indicates poll/final bit set */
374 * XID and TEST responses supported by the provider
376 #define DL_AUTO_XID 0x01 /* provider will respond to XID */
377 #define DL_AUTO_TEST 0x02 /* provider will respond to TEST */
380 * Subsequent bind type
382 #define DL_PEER_BIND 0x01 /* subsequent bind on a peer addr */
383 #define DL_HIERARCHICAL_BIND 0x02 /* subs_bind on a hierarchical addr */
386 * DLPI promiscuous mode definitions
388 #define DL_PROMISC_PHYS 0x01 /* promiscuous mode at phys level */
389 #define DL_PROMISC_SAP 0x02 /* promiscuous mode at sap level */
390 #define DL_PROMISC_MULTI 0x03 /* promiscuous mode for multicast */
393 * DLPI notification codes for DL_NOTIFY_REQ primitives.
394 * Bit-wise distinct since DL_NOTIFY_REQ and DL_NOTIFY_ACK carry multiple
395 * notification codes.
397 #define DL_NOTE_PHYS_ADDR 0x0001 /* Physical address change */
398 #define DL_NOTE_PROMISC_ON_PHYS 0x0002 /* DL_PROMISC_PHYS set on ppa */
399 #define DL_NOTE_PROMISC_OFF_PHYS 0x0004 /* DL_PROMISC_PHYS cleared on ppa */
400 #define DL_NOTE_LINK_DOWN 0x0008 /* Link down */
401 #define DL_NOTE_LINK_UP 0x0010 /* Link up */
402 #define DL_NOTE_AGGR_AVAIL 0x0020 /* Link aggregation is available */
403 #define DL_NOTE_AGGR_UNAVAIL 0x0040 /* Link aggregation is not available */
404 #define DL_NOTE_SDU_SIZE 0x0080 /* New SDU size, global or per addr */
405 #define DL_NOTE_SPEED 0x0100 /* Approximate link speed */
406 #define DL_NOTE_FASTPATH_FLUSH 0x0200 /* Fast Path info changes */
407 #define DL_NOTE_CAPAB_RENEG 0x0400 /* Initiate capability renegotiation */
408 #define DL_NOTE_REPLUMB 0x0800 /* Inform the link to replumb */
409 #define DL_NOTE_ALLOWED_IPS 0x1000 /* "allowed-ips" notification */
410 #define DL_NOTE_SDU_SIZE2 0x2000 /* New unicast and multicast size */
413 * DLPI notification codes for DL_NOTIFY_CONF primitives.
415 #define DL_NOTE_REPLUMB_DONE 0x0001 /* Indicate replumb has done */
418 * DLPI Quality Of Service definition for use in QOS structure definitions.
419 * The QOS structures are used in connection establishment, DL_INFO_ACK,
420 * and setting connectionless QOS values.
424 * Throughput
426 * This parameter is specified for both directions.
428 typedef struct {
429 t_scalar_t dl_target_value; /* bits/second desired */
430 t_scalar_t dl_accept_value; /* min. ok bits/second */
431 } dl_through_t;
434 * transit delay specification
436 * This parameter is specified for both directions.
437 * expressed in milliseconds assuming a DLSDU size of 128 octets.
438 * The scaling of the value to the current DLSDU size is provider dependent.
440 typedef struct {
441 t_scalar_t dl_target_value; /* desired value of service */
442 t_scalar_t dl_accept_value; /* min. ok value of service */
443 } dl_transdelay_t;
446 * priority specification
447 * priority range is 0-100, with 0 being highest value.
449 typedef struct {
450 t_scalar_t dl_min;
451 t_scalar_t dl_max;
452 } dl_priority_t;
456 * protection specification
459 #define DL_NONE 0x0B01 /* no protection supplied */
460 #define DL_MONITOR 0x0B02 /* prot. from passive monit. */
461 #define DL_MAXIMUM 0x0B03 /* prot. from modification, replay, */
462 /* addition, or deletion */
464 typedef struct {
465 t_scalar_t dl_min;
466 t_scalar_t dl_max;
467 } dl_protect_t;
471 * Resilience specification
472 * probabilities are scaled by a factor of 10,000 with a time interval
473 * of 10,000 seconds.
475 typedef struct {
476 t_scalar_t dl_disc_prob; /* prob. of provider init DISC */
477 t_scalar_t dl_reset_prob; /* prob. of provider init RESET */
478 } dl_resilience_t;
482 * QOS type definition to be used for negotiation with the
483 * remote end of a connection, or a connectionless unitdata request.
484 * There are two type definitions to handle the negotiation
485 * process at connection establishment. The typedef dl_qos_range_t
486 * is used to present a range for parameters. This is used
487 * in the DL_CONNECT_REQ and DL_CONNECT_IND messages. The typedef
488 * dl_qos_sel_t is used to select a specific value for the QOS
489 * parameters. This is used in the DL_CONNECT_RES, DL_CONNECT_CON,
490 * and DL_INFO_ACK messages to define the selected QOS parameters
491 * for a connection.
493 * NOTE
494 * A DataLink provider which has unknown values for any of the fields
495 * will use a value of DL_UNKNOWN for all values in the fields.
497 * NOTE
498 * A QOS parameter value of DL_QOS_DONT_CARE informs the DLS
499 * provider the user requesting this value doesn't care
500 * what the QOS parameter is set to. This value becomes the
501 * least possible value in the range of QOS parameters.
502 * The order of the QOS parameter range is then:
504 * DL_QOS_DONT_CARE < 0 < MAXIMUM QOS VALUE
506 #define DL_UNKNOWN -1
507 #define DL_QOS_DONT_CARE -2
510 * Every QOS structure has the first 4 bytes containing a type
511 * field, denoting the definition of the rest of the structure.
512 * This is used in the same manner has the dl_primitive variable
513 * is in messages.
515 * The following list is the defined QOS structure type values and structures.
517 #define DL_QOS_CO_RANGE1 0x0101 /* CO QOS range struct. */
518 #define DL_QOS_CO_SEL1 0x0102 /* CO QOS selection structure */
519 #define DL_QOS_CL_RANGE1 0x0103 /* CL QOS range struct. */
520 #define DL_QOS_CL_SEL1 0x0104 /* CL QOS selection */
522 typedef struct {
523 t_uscalar_t dl_qos_type;
524 dl_through_t dl_rcv_throughput; /* desired and accep. */
525 dl_transdelay_t dl_rcv_trans_delay; /* desired and accep. */
526 dl_through_t dl_xmt_throughput;
527 dl_transdelay_t dl_xmt_trans_delay;
528 dl_priority_t dl_priority; /* min and max values */
529 dl_protect_t dl_protection; /* min and max values */
530 t_scalar_t dl_residual_error;
531 dl_resilience_t dl_resilience;
532 } dl_qos_co_range1_t;
534 typedef struct {
535 t_uscalar_t dl_qos_type;
536 t_scalar_t dl_rcv_throughput;
537 t_scalar_t dl_rcv_trans_delay;
538 t_scalar_t dl_xmt_throughput;
539 t_scalar_t dl_xmt_trans_delay;
540 t_scalar_t dl_priority;
541 t_scalar_t dl_protection;
542 t_scalar_t dl_residual_error;
543 dl_resilience_t dl_resilience;
544 } dl_qos_co_sel1_t;
546 typedef struct {
547 t_uscalar_t dl_qos_type;
548 dl_transdelay_t dl_trans_delay;
549 dl_priority_t dl_priority;
550 dl_protect_t dl_protection;
551 t_scalar_t dl_residual_error;
552 } dl_qos_cl_range1_t;
554 typedef struct {
555 t_uscalar_t dl_qos_type;
556 t_scalar_t dl_trans_delay;
557 t_scalar_t dl_priority;
558 t_scalar_t dl_protection;
559 t_scalar_t dl_residual_error;
560 } dl_qos_cl_sel1_t;
562 union DL_qos_types {
563 t_uscalar_t dl_qos_type;
564 dl_qos_co_range1_t qos_co_range1;
565 dl_qos_co_sel1_t qos_co_sel1;
566 dl_qos_cl_range1_t qos_cl_range1;
567 dl_qos_cl_sel1_t qos_cl_sel1;
571 * Solaris specific structures and definitions.
575 * The following are the capability types and structures used by the
576 * the DL_CAPABILITY_REQ and DL_CAPABILITY_ACK primitives.
578 * These primitives are used both to determine the set of capabilities in
579 * the DLS provider and also to turn on and off specific capabilities.
580 * The response is a DL_CAPABILITY_ACK or DL_ERROR_ACK.
582 * DL_CAPABILITY_REQ can either be empty (i.e. dl_sub_length is zero) which
583 * is a request for the driver to return all capabilities. Otherwise, the
584 * DL_CAPABILITY_REQ contains the capabilities the DLS user wants to use and
585 * their settings.
587 * DL_CAPABILITY_ACK contains the capabilities that the DLS provider can
588 * support modified based on what was listed in the request. If a
589 * capability was included in the request then the information returned
590 * in the ack might be modified based on the information in the request.
593 #define DL_CAPAB_ID_WRAPPER 0x00 /* Module ID wrapper structure */
594 /* dl_data is dl_capab_id_t */
595 #define DL_CAPAB_HCKSUM 0x01 /* Checksum offload */
596 /* dl_data is dl_capab_hcksum_t */
597 #define DL_CAPAB_MDT 0x04 /* Multidata Transmit capability */
598 /* dl_data is dl_capab_mdt_t */
599 #define DL_CAPAB_ZEROCOPY 0x05 /* Zero-copy capability */
600 /* dl_data is dl_capab_zerocopy_t */
601 #define DL_CAPAB_DLD 0x06 /* dld capability */
602 /* dl_data is dl_capab_dld_t */
603 #define DL_CAPAB_VRRP 0x07 /* vrrp capability */
604 /* dl_data is dl_capab_vrrp_t */
606 typedef struct {
607 t_uscalar_t dl_cap; /* capability type */
608 t_uscalar_t dl_length; /* length of data following */
609 /* Followed by zero or more bytes of dl_data */
610 } dl_capability_sub_t;
613 * Module ID token to be included in new sub-capability structures.
614 * Access to this structure must be done through
615 * dlcapab{set,check}qid().
617 typedef struct {
618 t_uscalar_t mid[4]; /* private fields */
619 } dl_mid_t;
622 * Module ID wrapper (follows dl_capability_sub_t)
624 typedef struct {
625 dl_mid_t id_mid; /* module ID token */
626 dl_capability_sub_t id_subcap; /* sub-capability */
627 } dl_capab_id_t;
630 * Multidata Transmit sub-capability (follows dl_capability_sub_t)
632 typedef struct {
633 t_uscalar_t mdt_version; /* interface version */
634 t_uscalar_t mdt_flags; /* flags */
635 t_uscalar_t mdt_hdr_head; /* minimum leading header space */
636 t_uscalar_t mdt_hdr_tail; /* minimum trailing header space */
637 t_uscalar_t mdt_max_pld; /* maximum doable payload buffers */
638 t_uscalar_t mdt_span_limit; /* scatter-gather descriptor limit */
639 dl_mid_t mdt_mid; /* module ID token */
640 } dl_capab_mdt_t;
643 * Multidata Transmit revision definition history
645 #define MDT_CURRENT_VERSION 0x02
646 #define MDT_VERSION_2 0x02
649 * mdt_flags values
651 #define DL_CAPAB_MDT_ENABLE 0x01 /* enable Multidata Transmit */
654 * DL_CAPAB_HCKSUM
655 * Used for negotiating different flavors of checksum offload
656 * capabilities.
658 typedef struct {
659 t_uscalar_t hcksum_version; /* version of data following */
660 t_uscalar_t hcksum_txflags; /* capabilities on transmit */
661 dl_mid_t hcksum_mid; /* module ID */
662 } dl_capab_hcksum_t;
665 * DL_CAPAB_HCKSUM revision definition history
667 #define HCKSUM_CURRENT_VERSION 0x01
668 #define HCKSUM_VERSION_1 0x01
671 * Values for dl_txflags
673 #define HCKSUM_ENABLE 0x01 /* Set to enable hardware checksum */
674 /* capability */
675 #define HCKSUM_INET_PARTIAL 0x02 /* Partial 1's complement checksum */
676 /* ability */
677 #define HCKSUM_INET_FULL_V4 0x04 /* Full 1's complement checksum */
678 /* ability for IPv4 packets. */
679 #define HCKSUM_INET_FULL_V6 0x08 /* Full 1's complement checksum */
680 /* ability for IPv6 packets. */
681 #define HCKSUM_IPHDRCKSUM 0x10 /* IPv4 Header checksum offload */
682 /* capability */
683 #ifdef _KERNEL
686 * VRRP sub-capability (follows dl_capability_sub_t)
688 typedef struct {
689 int vrrp_af; /* IPv4 or IPv6 */
690 } dl_capab_vrrp_t;
693 * The DL_CAPAB_DLD capability enables the capabilities of gldv3-based drivers
694 * to be negotiated using a function call (dld_capab) instead of using streams.
696 typedef struct dl_capab_dld_s {
697 t_uscalar_t dld_version;
698 t_uscalar_t dld_flags;
700 /* DLD provided information */
701 uintptr_t dld_capab;
702 uintptr_t dld_capab_handle;
703 dl_mid_t dld_mid; /* module ID */
704 } dl_capab_dld_t;
706 #define DL_CAPAB_DLD_ENABLE 0x00000001
707 #define DLD_VERSION_1 1
708 #define DLD_CURRENT_VERSION DLD_VERSION_1
710 #endif /* _KERNEL */
713 * Zero-copy sub-capability (follows dl_capability_sub_t)
715 typedef struct {
716 t_uscalar_t zerocopy_version; /* interface version */
717 t_uscalar_t zerocopy_flags; /* capability flags */
718 t_uscalar_t reserved[9]; /* reserved fields */
719 dl_mid_t zerocopy_mid; /* module ID */
720 } dl_capab_zerocopy_t;
723 * Zero-copy revision definition history
725 #define ZEROCOPY_CURRENT_VERSION 0x01
726 #define ZEROCOPY_VERSION_1 0x01
729 * Currently supported values of zerocopy_flags
731 #define DL_CAPAB_VMSAFE_MEM 0x01 /* Driver is zero-copy safe */
732 /* wrt VM named buffers on */
733 /* transmit */
736 * DLPI interface primitive definitions.
738 * Each primitive is sent as a stream message. It is possible that
739 * the messages may be viewed as a sequence of bytes that have the
740 * following form without any padding. The structure definition
741 * of the following messages may have to change depending on the
742 * underlying hardware architecture and crossing of a hardware
743 * boundary with a different hardware architecture.
745 * Fields in the primitives having a name of the form
746 * dl_reserved cannot be used and have the value of
747 * binary zero, no bits turned on.
749 * Each message has the name defined followed by the
750 * stream message type (M_PROTO, M_PCPROTO, M_DATA)
754 * LOCAL MANAGEMENT SERVICE PRIMITIVES
758 * DL_INFO_REQ, M_PCPROTO type
760 typedef struct {
761 t_uscalar_t dl_primitive; /* set to DL_INFO_REQ */
762 } dl_info_req_t;
765 * DL_INFO_ACK, M_PCPROTO type
767 typedef struct {
768 t_uscalar_t dl_primitive; /* set to DL_INFO_ACK */
769 t_uscalar_t dl_max_sdu; /* Max bytes in a DLSDU */
770 t_uscalar_t dl_min_sdu; /* Min bytes in a DLSDU */
771 t_uscalar_t dl_addr_length; /* length of DLSAP address */
772 t_uscalar_t dl_mac_type; /* type of medium supported */
773 t_uscalar_t dl_reserved; /* value set to zero */
774 t_uscalar_t dl_current_state; /* state of DLPI interface */
775 t_scalar_t dl_sap_length; /* length of DLSAP SAP part */
776 t_uscalar_t dl_service_mode; /* CO, CL or ACL */
777 t_uscalar_t dl_qos_length; /* length of qos values */
778 t_uscalar_t dl_qos_offset; /* offset from start of block */
779 t_uscalar_t dl_qos_range_length; /* available range of qos */
780 t_uscalar_t dl_qos_range_offset; /* offset from start of block */
781 t_uscalar_t dl_provider_style; /* style1 or style2 */
782 t_uscalar_t dl_addr_offset; /* offset of the DLSAP addr */
783 t_uscalar_t dl_version; /* version number */
784 t_uscalar_t dl_brdcst_addr_length; /* length of broadcast addr */
785 t_uscalar_t dl_brdcst_addr_offset; /* offset from start of block */
786 t_uscalar_t dl_growth; /* set to zero */
787 } dl_info_ack_t;
790 * DL_ATTACH_REQ, M_PROTO type
792 typedef struct {
793 t_uscalar_t dl_primitive; /* set to DL_ATTACH_REQ */
794 t_uscalar_t dl_ppa; /* id of the PPA */
795 } dl_attach_req_t;
798 * DL_DETACH_REQ, M_PROTO type
800 typedef struct {
801 t_uscalar_t dl_primitive; /* set to DL_DETACH_REQ */
802 } dl_detach_req_t;
805 * DL_BIND_REQ, M_PROTO type
807 typedef struct {
808 t_uscalar_t dl_primitive; /* set to DL_BIND_REQ */
809 t_uscalar_t dl_sap; /* info to identify DLSAP addr */
810 t_uscalar_t dl_max_conind; /* max # of outstanding con_ind */
811 uint16_t dl_service_mode; /* CO, CL or ACL */
812 uint16_t dl_conn_mgmt; /* if non-zero, is con-mgmt stream */
813 t_uscalar_t dl_xidtest_flg; /* auto init. of test and xid */
814 } dl_bind_req_t;
817 * DL_BIND_ACK, M_PCPROTO type
819 typedef struct {
820 t_uscalar_t dl_primitive; /* DL_BIND_ACK */
821 t_uscalar_t dl_sap; /* DLSAP addr info */
822 t_uscalar_t dl_addr_length; /* length of complete DLSAP addr */
823 t_uscalar_t dl_addr_offset; /* offset from start of M_PCPROTO */
824 t_uscalar_t dl_max_conind; /* allowed max. # of con-ind */
825 t_uscalar_t dl_xidtest_flg; /* responses supported by provider */
826 } dl_bind_ack_t;
829 * DL_SUBS_BIND_REQ, M_PROTO type
831 typedef struct {
832 t_uscalar_t dl_primitive; /* DL_SUBS_BIND_REQ */
833 t_uscalar_t dl_subs_sap_offset; /* offset of subs_sap */
834 t_uscalar_t dl_subs_sap_length; /* length of subs_sap */
835 t_uscalar_t dl_subs_bind_class; /* peer or hierarchical */
836 } dl_subs_bind_req_t;
839 * DL_SUBS_BIND_ACK, M_PCPROTO type
841 typedef struct {
842 t_uscalar_t dl_primitive; /* DL_SUBS_BIND_ACK */
843 t_uscalar_t dl_subs_sap_offset; /* offset of subs_sap */
844 t_uscalar_t dl_subs_sap_length; /* length of subs_sap */
845 } dl_subs_bind_ack_t;
848 * DL_UNBIND_REQ, M_PROTO type
850 typedef struct {
851 t_uscalar_t dl_primitive; /* DL_UNBIND_REQ */
852 } dl_unbind_req_t;
855 * DL_SUBS_UNBIND_REQ, M_PROTO type
857 typedef struct {
858 t_uscalar_t dl_primitive; /* DL_SUBS_UNBIND_REQ */
859 t_uscalar_t dl_subs_sap_offset; /* offset of subs_sap */
860 t_uscalar_t dl_subs_sap_length; /* length of subs_sap */
861 } dl_subs_unbind_req_t;
864 * DL_OK_ACK, M_PCPROTO type
866 typedef struct {
867 t_uscalar_t dl_primitive; /* DL_OK_ACK */
868 t_uscalar_t dl_correct_primitive; /* primitive acknowledged */
869 } dl_ok_ack_t;
872 * DL_ERROR_ACK, M_PCPROTO type
874 typedef struct {
875 t_uscalar_t dl_primitive; /* DL_ERROR_ACK */
876 t_uscalar_t dl_error_primitive; /* primitive in error */
877 t_uscalar_t dl_errno; /* DLPI error code */
878 t_uscalar_t dl_unix_errno; /* UNIX system error code */
879 } dl_error_ack_t;
882 * DL_ENABMULTI_REQ, M_PROTO type
884 typedef struct {
885 t_uscalar_t dl_primitive; /* DL_ENABMULTI_REQ */
886 t_uscalar_t dl_addr_length; /* length of multicast address */
887 t_uscalar_t dl_addr_offset; /* offset from start of M_PROTO block */
888 } dl_enabmulti_req_t;
891 * DL_DISABMULTI_REQ, M_PROTO type
894 typedef struct {
895 t_uscalar_t dl_primitive; /* DL_DISABMULTI_REQ */
896 t_uscalar_t dl_addr_length; /* length of multicast address */
897 t_uscalar_t dl_addr_offset; /* offset from start of M_PROTO block */
898 } dl_disabmulti_req_t;
901 * DL_PROMISCON_REQ, M_PROTO type
904 typedef struct {
905 t_uscalar_t dl_primitive; /* DL_PROMISCON_REQ */
906 t_uscalar_t dl_level; /* physical,SAP, or ALL multicast */
907 } dl_promiscon_req_t;
910 * DL_PROMISCOFF_REQ, M_PROTO type
913 typedef struct {
914 t_uscalar_t dl_primitive; /* DL_PROMISCOFF_REQ */
915 t_uscalar_t dl_level; /* Physical,SAP, or ALL multicast */
916 } dl_promiscoff_req_t;
919 * Primitives to get and set the Physical address
923 * DL_PHYS_ADDR_REQ, M_PROTO type
925 typedef struct {
926 t_uscalar_t dl_primitive; /* DL_PHYS_ADDR_REQ */
927 t_uscalar_t dl_addr_type; /* factory or current physical addr */
928 } dl_phys_addr_req_t;
931 * DL_PHYS_ADDR_ACK, M_PCPROTO type
933 typedef struct {
934 t_uscalar_t dl_primitive; /* DL_PHYS_ADDR_ACK */
935 t_uscalar_t dl_addr_length; /* length of the physical addr */
936 t_uscalar_t dl_addr_offset; /* offset from start of block */
937 } dl_phys_addr_ack_t;
940 * DL_SET_PHYS_ADDR_REQ, M_PROTO type
942 typedef struct {
943 t_uscalar_t dl_primitive; /* DL_SET_PHYS_ADDR_REQ */
944 t_uscalar_t dl_addr_length; /* length of physical addr */
945 t_uscalar_t dl_addr_offset; /* offset from start of block */
946 } dl_set_phys_addr_req_t;
949 * Primitives to get statistics
953 * DL_GET_STATISTICS_REQ, M_PROTO type
955 typedef struct {
956 t_uscalar_t dl_primitive; /* DL_GET_STATISTICS_REQ */
957 } dl_get_statistics_req_t;
960 * DL_GET_STATISTICS_ACK, M_PCPROTO type
962 typedef struct {
963 t_uscalar_t dl_primitive; /* DL_GET_STATISTICS_ACK */
964 t_uscalar_t dl_stat_length; /* length of statistics structure */
965 t_uscalar_t dl_stat_offset; /* offset from start of block */
966 } dl_get_statistics_ack_t;
969 * Solaris specific local management service primitives
973 * DL_NOTIFY_REQ, M_PROTO type
975 typedef struct {
976 t_uscalar_t dl_primitive; /* set to DL_NOTIFY_REQ */
977 uint32_t dl_notifications; /* Requested set of notifications */
978 uint32_t dl_timelimit; /* In milliseconds */
979 } dl_notify_req_t;
982 * DL_NOTIFY_ACK, M_PROTO type
984 typedef struct {
985 t_uscalar_t dl_primitive; /* set to DL_NOTIFY_ACK */
986 uint32_t dl_notifications; /* Supported set of notifications */
987 } dl_notify_ack_t;
990 * DL_NOTIFY_IND, M_PROTO type
992 typedef struct {
993 t_uscalar_t dl_primitive; /* set to DL_NOTIFY_IND */
994 uint32_t dl_notification; /* Which notification? */
995 union {
996 uint32_t dlu_data32; /* notification specific */
997 uint16_t dlu_data16[2]; /* For DL_NOTE_SDU_SIZE2 */
998 } dl_dlu;
999 #define dl_data dl_dlu.dlu_data32
1000 #define dl_data1 dl_dlu.dlu_data16[0] /* Unicast MTU */
1001 #define dl_data2 dl_dlu.dlu_data16[1] /* Multicast MTU */
1002 t_uscalar_t dl_addr_length; /* length of complete DLSAP addr */
1003 t_uscalar_t dl_addr_offset; /* offset from start of M_PROTO */
1004 } dl_notify_ind_t;
1007 * DL_NOTIFY_CONF, M_PROTO type
1009 typedef struct {
1010 t_uscalar_t dl_primitive; /* set to DL_NOTIFY_CONF */
1011 uint32_t dl_notification; /* Which notification? */
1012 } dl_notify_conf_t;
1015 * DL_AGGR_REQ, M_PROTO type
1017 typedef struct {
1018 t_uscalar_t dl_primitive; /* set to DL_AGGR_REQ */
1019 uint32_t dl_key; /* Key identifying the group */
1020 uint32_t dl_port; /* Identifying the NIC */
1021 t_uscalar_t dl_addr_length; /* length of PHYS addr addr */
1022 t_uscalar_t dl_addr_offset; /* offset from start of M_PROTO */
1023 } dl_aggr_req_t;
1026 * DL_AGGR_IND, M_PROTO type
1028 typedef struct {
1029 t_uscalar_t dl_primitive; /* set to DL_AGGR_IND */
1030 uint32_t dl_key; /* Key identifying the group */
1031 uint32_t dl_port; /* Identifying the NIC */
1032 t_uscalar_t dl_addr_length; /* length of PHYS addr */
1033 t_uscalar_t dl_addr_offset; /* offset from start of M_PROTO */
1034 } dl_aggr_ind_t;
1037 * DL_UNAGGR_REQ, M_PROTO type
1039 typedef struct {
1040 t_uscalar_t dl_primitive; /* set to DL_UNAGGR_REQ */
1041 uint32_t dl_key; /* Key identifying the group */
1042 uint32_t dl_port; /* Identifying the NIC */
1043 t_uscalar_t dl_addr_length; /* length of PHYS addr */
1044 t_uscalar_t dl_addr_offset; /* offset from start of M_PROTO */
1045 } dl_unaggr_req_t;
1048 * DL_CAPABILITY_REQ, M_PROTO type
1050 typedef struct {
1051 t_uscalar_t dl_primitive; /* DL_CAPABILITY_REQ */
1052 t_uscalar_t dl_sub_offset; /* options offset */
1053 t_uscalar_t dl_sub_length; /* options length */
1054 /* Followed by a list of zero or more dl_capability_sub_t */
1055 } dl_capability_req_t;
1058 * DL_CAPABILITY_ACK, M_PROTO type
1060 typedef struct {
1061 t_uscalar_t dl_primitive; /* DL_CAPABILITY_ACK */
1062 t_uscalar_t dl_sub_offset; /* options offset */
1063 t_uscalar_t dl_sub_length; /* options length */
1064 /* Followed by a list of zero or more dl_capability_sub_t */
1065 } dl_capability_ack_t;
1068 * DL_CONTROL_REQ, M_PROTO type
1070 typedef struct {
1071 t_uscalar_t dl_primitive; /* DL_CONTROL_REQ */
1072 t_uscalar_t dl_operation; /* add/delete/purge */
1073 t_uscalar_t dl_type; /* e.g. AH/ESP/ ... */
1074 t_uscalar_t dl_key_offset; /* offset of key */
1075 t_uscalar_t dl_key_length; /* length of key */
1076 t_uscalar_t dl_data_offset; /* offset of data */
1077 t_uscalar_t dl_data_length; /* length of data */
1078 } dl_control_req_t;
1081 * DL_CONTROL_ACK, M_PROTO type
1083 typedef struct {
1084 t_uscalar_t dl_primitive; /* DL_CONTROL_ACK */
1085 t_uscalar_t dl_operation; /* add/delete/purge */
1086 t_uscalar_t dl_type; /* e.g. AH/ESP/ ... */
1087 t_uscalar_t dl_key_offset; /* offset of key */
1088 t_uscalar_t dl_key_length; /* length of key */
1089 t_uscalar_t dl_data_offset; /* offset of data */
1090 t_uscalar_t dl_data_length; /* length of data */
1091 } dl_control_ack_t;
1094 * DL_PASSIVE_REQ, M_PROTO type
1096 typedef struct {
1097 t_uscalar_t dl_primitive;
1098 } dl_passive_req_t;
1101 * DL_INTR_MODE_REQ, M_PROTO type
1103 typedef struct {
1104 t_uscalar_t dl_primitive;
1105 t_uscalar_t dl_sap;
1106 t_uscalar_t dl_imode; /* intr mode: 0 off 1 on */
1107 } dl_intr_mode_req_t;
1110 * CONNECTION-ORIENTED SERVICE PRIMITIVES
1114 * DL_CONNECT_REQ, M_PROTO type
1116 typedef struct {
1117 t_uscalar_t dl_primitive; /* DL_CONNECT_REQ */
1118 t_uscalar_t dl_dest_addr_length; /* len. of DLSAP addr */
1119 t_uscalar_t dl_dest_addr_offset; /* offset */
1120 t_uscalar_t dl_qos_length; /* len. of QOS parm val */
1121 t_uscalar_t dl_qos_offset; /* offset */
1122 t_uscalar_t dl_growth; /* set to zero */
1123 } dl_connect_req_t;
1126 * DL_CONNECT_IND, M_PROTO type
1128 typedef struct {
1129 t_uscalar_t dl_primitive; /* DL_CONNECT_IND */
1130 t_uscalar_t dl_correlation; /* provider's correl. token */
1131 t_uscalar_t dl_called_addr_length; /* length of called address */
1132 t_uscalar_t dl_called_addr_offset; /* offset from start of block */
1133 t_uscalar_t dl_calling_addr_length; /* length of calling address */
1134 t_uscalar_t dl_calling_addr_offset; /* offset from start of block */
1135 t_uscalar_t dl_qos_length; /* length of qos structure */
1136 t_uscalar_t dl_qos_offset; /* offset from start of block */
1137 t_uscalar_t dl_growth; /* set to zero */
1138 } dl_connect_ind_t;
1141 * DL_CONNECT_RES, M_PROTO type
1143 typedef struct {
1144 t_uscalar_t dl_primitive; /* DL_CONNECT_RES */
1145 t_uscalar_t dl_correlation; /* provider's correlation token */
1146 t_uscalar_t dl_resp_token; /* token of responding stream */
1147 t_uscalar_t dl_qos_length; /* length of qos structure */
1148 t_uscalar_t dl_qos_offset; /* offset from start of block */
1149 t_uscalar_t dl_growth; /* set to zero */
1150 } dl_connect_res_t;
1153 * DL_CONNECT_CON, M_PROTO type
1155 typedef struct {
1156 t_uscalar_t dl_primitive; /* DL_CONNECT_CON */
1157 t_uscalar_t dl_resp_addr_length; /* responder's address len */
1158 t_uscalar_t dl_resp_addr_offset; /* offset from start of block */
1159 t_uscalar_t dl_qos_length; /* length of qos structure */
1160 t_uscalar_t dl_qos_offset; /* offset from start of block */
1161 t_uscalar_t dl_growth; /* set to zero */
1162 } dl_connect_con_t;
1165 * DL_TOKEN_REQ, M_PCPROTO type
1167 typedef struct {
1168 t_uscalar_t dl_primitive; /* DL_TOKEN_REQ */
1169 } dl_token_req_t;
1172 * DL_TOKEN_ACK, M_PCPROTO type
1174 typedef struct {
1175 t_uscalar_t dl_primitive; /* DL_TOKEN_ACK */
1176 t_uscalar_t dl_token; /* Connection response token */
1177 }dl_token_ack_t;
1180 * DL_DISCONNECT_REQ, M_PROTO type
1182 typedef struct {
1183 t_uscalar_t dl_primitive; /* DL_DISCONNECT_REQ */
1184 t_uscalar_t dl_reason; /* norm., abnorm., perm. or trans. */
1185 t_uscalar_t dl_correlation; /* association with connect_ind */
1186 } dl_disconnect_req_t;
1189 * DL_DISCONNECT_IND, M_PROTO type
1191 typedef struct {
1192 t_uscalar_t dl_primitive; /* DL_DISCONNECT_IND */
1193 t_uscalar_t dl_originator; /* USER or PROVIDER */
1194 t_uscalar_t dl_reason; /* permanent or transient */
1195 t_uscalar_t dl_correlation; /* association with connect_ind */
1196 } dl_disconnect_ind_t;
1199 * DL_RESET_REQ, M_PROTO type
1201 typedef struct {
1202 t_uscalar_t dl_primitive; /* DL_RESET_REQ */
1203 } dl_reset_req_t;
1206 * DL_RESET_IND, M_PROTO type
1208 typedef struct {
1209 t_uscalar_t dl_primitive; /* DL_RESET_IND */
1210 t_uscalar_t dl_originator; /* Provider or User */
1211 t_uscalar_t dl_reason; /* flow control, link error, resync */
1212 } dl_reset_ind_t;
1215 * DL_RESET_RES, M_PROTO type
1217 typedef struct {
1218 t_uscalar_t dl_primitive; /* DL_RESET_RES */
1219 } dl_reset_res_t;
1222 * DL_RESET_CON, M_PROTO type
1224 typedef struct {
1225 t_uscalar_t dl_primitive; /* DL_RESET_CON */
1226 } dl_reset_con_t;
1230 * CONNECTIONLESS SERVICE PRIMITIVES
1234 * DL_UNITDATA_REQ, M_PROTO type, with M_DATA block(s)
1236 typedef struct {
1237 t_uscalar_t dl_primitive; /* DL_UNITDATA_REQ */
1238 t_uscalar_t dl_dest_addr_length; /* DLSAP length of dest. user */
1239 t_uscalar_t dl_dest_addr_offset; /* offset from start of block */
1240 dl_priority_t dl_priority; /* priority value */
1241 } dl_unitdata_req_t;
1244 * DL_UNITDATA_IND, M_PROTO type, with M_DATA block(s)
1246 typedef struct {
1247 t_uscalar_t dl_primitive; /* DL_UNITDATA_IND */
1248 t_uscalar_t dl_dest_addr_length; /* DLSAP length of dest. user */
1249 t_uscalar_t dl_dest_addr_offset; /* offset from start of block */
1250 t_uscalar_t dl_src_addr_length; /* DLSAP addr length sender */
1251 t_uscalar_t dl_src_addr_offset; /* offset from start of block */
1252 t_uscalar_t dl_group_address; /* one if multicast/broadcast */
1253 } dl_unitdata_ind_t;
1256 * DL_UDERROR_IND, M_PROTO type
1257 * (or M_PCPROTO type if LLI-based provider)
1259 typedef struct {
1260 t_uscalar_t dl_primitive; /* DL_UDERROR_IND */
1261 t_uscalar_t dl_dest_addr_length; /* Destination DLSAP */
1262 t_uscalar_t dl_dest_addr_offset; /* Offset from start of block */
1263 t_uscalar_t dl_unix_errno; /* unix system error code */
1264 t_uscalar_t dl_errno; /* DLPI error code */
1265 } dl_uderror_ind_t;
1268 * DL_UDQOS_REQ, M_PROTO type
1270 typedef struct {
1271 t_uscalar_t dl_primitive; /* DL_UDQOS_REQ */
1272 t_uscalar_t dl_qos_length; /* requested qos byte length */
1273 t_uscalar_t dl_qos_offset; /* offset from start of block */
1274 } dl_udqos_req_t;
1277 * Primitives to handle XID and TEST operations
1281 * DL_TEST_REQ, M_PROTO type
1283 typedef struct {
1284 t_uscalar_t dl_primitive; /* DL_TEST_REQ */
1285 t_uscalar_t dl_flag; /* poll/final */
1286 t_uscalar_t dl_dest_addr_length; /* DLSAP length of dest. user */
1287 t_uscalar_t dl_dest_addr_offset; /* offset from start of block */
1288 } dl_test_req_t;
1291 * DL_TEST_IND, M_PROTO type
1293 typedef struct {
1294 t_uscalar_t dl_primitive; /* DL_TEST_IND */
1295 t_uscalar_t dl_flag; /* poll/final */
1296 t_uscalar_t dl_dest_addr_length; /* DLSAP length of dest. user */
1297 t_uscalar_t dl_dest_addr_offset; /* offset from start of block */
1298 t_uscalar_t dl_src_addr_length; /* DLSAP length of source */
1299 t_uscalar_t dl_src_addr_offset; /* offset from start of block */
1300 } dl_test_ind_t;
1303 * DL_TEST_RES, M_PROTO type
1305 typedef struct {
1306 t_uscalar_t dl_primitive; /* DL_TEST_RES */
1307 t_uscalar_t dl_flag; /* poll/final */
1308 t_uscalar_t dl_dest_addr_length; /* DLSAP length of dest. user */
1309 t_uscalar_t dl_dest_addr_offset; /* offset from start of block */
1310 } dl_test_res_t;
1313 * DL_TEST_CON, M_PROTO type
1315 typedef struct {
1316 t_uscalar_t dl_primitive; /* DL_TEST_CON */
1317 t_uscalar_t dl_flag; /* poll/final */
1318 t_uscalar_t dl_dest_addr_length; /* DLSAP length of dest. user */
1319 t_uscalar_t dl_dest_addr_offset; /* offset from start of block */
1320 t_uscalar_t dl_src_addr_length; /* DLSAP length of source */
1321 t_uscalar_t dl_src_addr_offset; /* offset from start of block */
1322 } dl_test_con_t;
1325 * DL_XID_REQ, M_PROTO type
1327 typedef struct {
1328 t_uscalar_t dl_primitive; /* DL_XID_REQ */
1329 t_uscalar_t dl_flag; /* poll/final */
1330 t_uscalar_t dl_dest_addr_length; /* DLSAP length of dest. user */
1331 t_uscalar_t dl_dest_addr_offset; /* offset from start of block */
1332 } dl_xid_req_t;
1335 * DL_XID_IND, M_PROTO type
1337 typedef struct {
1338 t_uscalar_t dl_primitive; /* DL_XID_IND */
1339 t_uscalar_t dl_flag; /* poll/final */
1340 t_uscalar_t dl_dest_addr_length; /* DLSAP length of dest. user */
1341 t_uscalar_t dl_dest_addr_offset; /* offset from start of block */
1342 t_uscalar_t dl_src_addr_length; /* DLSAP length of source */
1343 t_uscalar_t dl_src_addr_offset; /* offset from start of block */
1344 } dl_xid_ind_t;
1347 * DL_XID_RES, M_PROTO type
1349 typedef struct {
1350 t_uscalar_t dl_primitive; /* DL_XID_RES */
1351 t_uscalar_t dl_flag; /* poll/final */
1352 t_uscalar_t dl_dest_addr_length; /* DLSAP length of dest. user */
1353 t_uscalar_t dl_dest_addr_offset; /* offset from start of block */
1354 } dl_xid_res_t;
1357 * DL_XID_CON, M_PROTO type
1359 typedef struct {
1360 t_uscalar_t dl_primitive; /* DL_XID_CON */
1361 t_uscalar_t dl_flag; /* poll/final */
1362 t_uscalar_t dl_dest_addr_length; /* DLSAP length of dest. user */
1363 t_uscalar_t dl_dest_addr_offset; /* offset from start of block */
1364 t_uscalar_t dl_src_addr_length; /* DLSAP length of source */
1365 t_uscalar_t dl_src_addr_offset; /* offset from start of block */
1366 } dl_xid_con_t;
1369 * ACKNOWLEDGED CONNECTIONLESS SERVICE PRIMITIVES
1373 * DL_DATA_ACK_REQ, M_PROTO type
1375 typedef struct {
1376 t_uscalar_t dl_primitive; /* DL_DATA_ACK_REQ */
1377 t_uscalar_t dl_correlation; /* User's correlation token */
1378 t_uscalar_t dl_dest_addr_length; /* length of destination addr */
1379 t_uscalar_t dl_dest_addr_offset; /* offset from start of block */
1380 t_uscalar_t dl_src_addr_length; /* length of source address */
1381 t_uscalar_t dl_src_addr_offset; /* offset from start of block */
1382 t_uscalar_t dl_priority; /* priority */
1383 t_uscalar_t dl_service_class; /* DL_RQST_RSP|DL_RQST_NORSP */
1384 } dl_data_ack_req_t;
1387 * DL_DATA_ACK_IND, M_PROTO type
1389 typedef struct {
1390 t_uscalar_t dl_primitive; /* DL_DATA_ACK_IND */
1391 t_uscalar_t dl_dest_addr_length; /* length of destination addr */
1392 t_uscalar_t dl_dest_addr_offset; /* offset from start of block */
1393 t_uscalar_t dl_src_addr_length; /* length of source address */
1394 t_uscalar_t dl_src_addr_offset; /* offset from start of block */
1395 t_uscalar_t dl_priority; /* pri. for data unit transm. */
1396 t_uscalar_t dl_service_class; /* DL_RQST_RSP|DL_RQST_NORSP */
1397 } dl_data_ack_ind_t;
1400 * DL_DATA_ACK_STATUS_IND, M_PROTO type
1402 typedef struct {
1403 t_uscalar_t dl_primitive; /* DL_DATA_ACK_STATUS_IND */
1404 t_uscalar_t dl_correlation; /* User's correlation token */
1405 t_uscalar_t dl_status; /* success or failure of previous req */
1406 } dl_data_ack_status_ind_t;
1409 * DL_REPLY_REQ, M_PROTO type
1411 typedef struct {
1412 t_uscalar_t dl_primitive; /* DL_REPLY_REQ */
1413 t_uscalar_t dl_correlation; /* User's correlation token */
1414 t_uscalar_t dl_dest_addr_length; /* destination address length */
1415 t_uscalar_t dl_dest_addr_offset; /* offset from start of block */
1416 t_uscalar_t dl_src_addr_length; /* source address length */
1417 t_uscalar_t dl_src_addr_offset; /* offset from start of block */
1418 t_uscalar_t dl_priority; /* pri for data unit trans. */
1419 t_uscalar_t dl_service_class;
1420 } dl_reply_req_t;
1423 * DL_REPLY_IND, M_PROTO type
1425 typedef struct {
1426 t_uscalar_t dl_primitive; /* DL_REPLY_IND */
1427 t_uscalar_t dl_dest_addr_length; /* destination address length */
1428 t_uscalar_t dl_dest_addr_offset; /* offset from start of block */
1429 t_uscalar_t dl_src_addr_length; /* length of source address */
1430 t_uscalar_t dl_src_addr_offset; /* offset from start of block */
1431 t_uscalar_t dl_priority; /* pri for data unit trans. */
1432 t_uscalar_t dl_service_class; /* DL_RQST_RSP|DL_RQST_NORSP */
1433 } dl_reply_ind_t;
1436 * DL_REPLY_STATUS_IND, M_PROTO type
1438 typedef struct {
1439 t_uscalar_t dl_primitive; /* DL_REPLY_STATUS_IND */
1440 t_uscalar_t dl_correlation; /* User's correlation token */
1441 t_uscalar_t dl_status; /* success or failure of previous req */
1442 } dl_reply_status_ind_t;
1445 * DL_REPLY_UPDATE_REQ, M_PROTO type
1447 typedef struct {
1448 t_uscalar_t dl_primitive; /* DL_REPLY_UPDATE_REQ */
1449 t_uscalar_t dl_correlation; /* user's correlation token */
1450 t_uscalar_t dl_src_addr_length; /* length of source address */
1451 t_uscalar_t dl_src_addr_offset; /* offset from start of block */
1452 } dl_reply_update_req_t;
1455 * DL_REPLY_UPDATE_STATUS_IND, M_PROTO type
1457 typedef struct {
1458 t_uscalar_t dl_primitive; /* DL_REPLY_UPDATE_STATUS_IND */
1459 t_uscalar_t dl_correlation; /* User's correlation token */
1460 t_uscalar_t dl_status; /* success or failure of previous req */
1461 } dl_reply_update_status_ind_t;
1463 union DL_primitives {
1464 t_uscalar_t dl_primitive;
1465 dl_info_req_t info_req;
1466 dl_info_ack_t info_ack;
1467 dl_attach_req_t attach_req;
1468 dl_detach_req_t detach_req;
1469 dl_bind_req_t bind_req;
1470 dl_bind_ack_t bind_ack;
1471 dl_unbind_req_t unbind_req;
1472 dl_subs_bind_req_t subs_bind_req;
1473 dl_subs_bind_ack_t subs_bind_ack;
1474 dl_subs_unbind_req_t subs_unbind_req;
1475 dl_ok_ack_t ok_ack;
1476 dl_error_ack_t error_ack;
1477 dl_connect_req_t connect_req;
1478 dl_connect_ind_t connect_ind;
1479 dl_connect_res_t connect_res;
1480 dl_connect_con_t connect_con;
1481 dl_token_req_t token_req;
1482 dl_token_ack_t token_ack;
1483 dl_disconnect_req_t disconnect_req;
1484 dl_disconnect_ind_t disconnect_ind;
1485 dl_reset_req_t reset_req;
1486 dl_reset_ind_t reset_ind;
1487 dl_reset_res_t reset_res;
1488 dl_reset_con_t reset_con;
1489 dl_unitdata_req_t unitdata_req;
1490 dl_unitdata_ind_t unitdata_ind;
1491 dl_uderror_ind_t uderror_ind;
1492 dl_udqos_req_t udqos_req;
1493 dl_enabmulti_req_t enabmulti_req;
1494 dl_disabmulti_req_t disabmulti_req;
1495 dl_promiscon_req_t promiscon_req;
1496 dl_promiscoff_req_t promiscoff_req;
1497 dl_phys_addr_req_t physaddr_req;
1498 dl_phys_addr_ack_t physaddr_ack;
1499 dl_set_phys_addr_req_t set_physaddr_req;
1500 dl_get_statistics_req_t get_statistics_req;
1501 dl_get_statistics_ack_t get_statistics_ack;
1502 dl_notify_req_t notify_req;
1503 dl_notify_ack_t notify_ack;
1504 dl_notify_ind_t notify_ind;
1505 dl_notify_conf_t notify_conf;
1506 dl_aggr_req_t aggr_req;
1507 dl_aggr_ind_t aggr_ind;
1508 dl_unaggr_req_t unaggr_req;
1509 dl_test_req_t test_req;
1510 dl_test_ind_t test_ind;
1511 dl_test_res_t test_res;
1512 dl_test_con_t test_con;
1513 dl_xid_req_t xid_req;
1514 dl_xid_ind_t xid_ind;
1515 dl_xid_res_t xid_res;
1516 dl_xid_con_t xid_con;
1517 dl_data_ack_req_t data_ack_req;
1518 dl_data_ack_ind_t data_ack_ind;
1519 dl_data_ack_status_ind_t data_ack_status_ind;
1520 dl_reply_req_t reply_req;
1521 dl_reply_ind_t reply_ind;
1522 dl_reply_status_ind_t reply_status_ind;
1523 dl_reply_update_req_t reply_update_req;
1524 dl_reply_update_status_ind_t reply_update_status_ind;
1525 dl_capability_req_t capability_req;
1526 dl_capability_ack_t capability_ack;
1527 dl_control_req_t control_req;
1528 dl_control_ack_t control_ack;
1529 dl_passive_req_t passive_req;
1530 dl_intr_mode_req_t intr_mode_req;
1533 #define DL_INFO_REQ_SIZE sizeof (dl_info_req_t)
1534 #define DL_INFO_ACK_SIZE sizeof (dl_info_ack_t)
1535 #define DL_ATTACH_REQ_SIZE sizeof (dl_attach_req_t)
1536 #define DL_DETACH_REQ_SIZE sizeof (dl_detach_req_t)
1537 #define DL_BIND_REQ_SIZE sizeof (dl_bind_req_t)
1538 #define DL_BIND_ACK_SIZE sizeof (dl_bind_ack_t)
1539 #define DL_UNBIND_REQ_SIZE sizeof (dl_unbind_req_t)
1540 #define DL_SUBS_BIND_REQ_SIZE sizeof (dl_subs_bind_req_t)
1541 #define DL_SUBS_BIND_ACK_SIZE sizeof (dl_subs_bind_ack_t)
1542 #define DL_SUBS_UNBIND_REQ_SIZE sizeof (dl_subs_unbind_req_t)
1543 #define DL_OK_ACK_SIZE sizeof (dl_ok_ack_t)
1544 #define DL_ERROR_ACK_SIZE sizeof (dl_error_ack_t)
1545 #define DL_CONNECT_REQ_SIZE sizeof (dl_connect_req_t)
1546 #define DL_CONNECT_IND_SIZE sizeof (dl_connect_ind_t)
1547 #define DL_CONNECT_RES_SIZE sizeof (dl_connect_res_t)
1548 #define DL_CONNECT_CON_SIZE sizeof (dl_connect_con_t)
1549 #define DL_TOKEN_REQ_SIZE sizeof (dl_token_req_t)
1550 #define DL_TOKEN_ACK_SIZE sizeof (dl_token_ack_t)
1551 #define DL_DISCONNECT_REQ_SIZE sizeof (dl_disconnect_req_t)
1552 #define DL_DISCONNECT_IND_SIZE sizeof (dl_disconnect_ind_t)
1553 #define DL_RESET_REQ_SIZE sizeof (dl_reset_req_t)
1554 #define DL_RESET_IND_SIZE sizeof (dl_reset_ind_t)
1555 #define DL_RESET_RES_SIZE sizeof (dl_reset_res_t)
1556 #define DL_RESET_CON_SIZE sizeof (dl_reset_con_t)
1557 #define DL_UNITDATA_REQ_SIZE sizeof (dl_unitdata_req_t)
1558 #define DL_UNITDATA_IND_SIZE sizeof (dl_unitdata_ind_t)
1559 #define DL_UDERROR_IND_SIZE sizeof (dl_uderror_ind_t)
1560 #define DL_UDQOS_REQ_SIZE sizeof (dl_udqos_req_t)
1561 #define DL_ENABMULTI_REQ_SIZE sizeof (dl_enabmulti_req_t)
1562 #define DL_DISABMULTI_REQ_SIZE sizeof (dl_disabmulti_req_t)
1563 #define DL_PROMISCON_REQ_SIZE sizeof (dl_promiscon_req_t)
1564 #define DL_PROMISCOFF_REQ_SIZE sizeof (dl_promiscoff_req_t)
1565 #define DL_PHYS_ADDR_REQ_SIZE sizeof (dl_phys_addr_req_t)
1566 #define DL_PHYS_ADDR_ACK_SIZE sizeof (dl_phys_addr_ack_t)
1567 #define DL_SET_PHYS_ADDR_REQ_SIZE sizeof (dl_set_phys_addr_req_t)
1568 #define DL_GET_STATISTICS_REQ_SIZE sizeof (dl_get_statistics_req_t)
1569 #define DL_GET_STATISTICS_ACK_SIZE sizeof (dl_get_statistics_ack_t)
1570 #define DL_NOTIFY_REQ_SIZE sizeof (dl_notify_req_t)
1571 #define DL_NOTIFY_ACK_SIZE sizeof (dl_notify_ack_t)
1572 #define DL_NOTIFY_IND_SIZE sizeof (dl_notify_ind_t)
1573 #define DL_NOTIFY_CONF_SIZE sizeof (dl_notify_conf_t)
1574 #define DL_AGGR_REQ_SIZE sizeof (dl_aggr_req_t)
1575 #define DL_AGGR_IND_SIZE sizeof (dl_aggr_ind_t)
1576 #define DL_UNAGGR_REQ_SIZE sizeof (dl_unaggr_req_t)
1577 #define DL_XID_REQ_SIZE sizeof (dl_xid_req_t)
1578 #define DL_XID_IND_SIZE sizeof (dl_xid_ind_t)
1579 #define DL_XID_RES_SIZE sizeof (dl_xid_res_t)
1580 #define DL_XID_CON_SIZE sizeof (dl_xid_con_t)
1581 #define DL_TEST_REQ_SIZE sizeof (dl_test_req_t)
1582 #define DL_TEST_IND_SIZE sizeof (dl_test_ind_t)
1583 #define DL_TEST_RES_SIZE sizeof (dl_test_res_t)
1584 #define DL_TEST_CON_SIZE sizeof (dl_test_con_t)
1585 #define DL_DATA_ACK_REQ_SIZE sizeof (dl_data_ack_req_t)
1586 #define DL_DATA_ACK_IND_SIZE sizeof (dl_data_ack_ind_t)
1587 #define DL_DATA_ACK_STATUS_IND_SIZE sizeof (dl_data_ack_status_ind_t)
1588 #define DL_REPLY_REQ_SIZE sizeof (dl_reply_req_t)
1589 #define DL_REPLY_IND_SIZE sizeof (dl_reply_ind_t)
1590 #define DL_REPLY_STATUS_IND_SIZE sizeof (dl_reply_status_ind_t)
1591 #define DL_REPLY_UPDATE_REQ_SIZE sizeof (dl_reply_update_req_t)
1592 #define DL_REPLY_UPDATE_STATUS_IND_SIZE sizeof (dl_reply_update_status_ind_t)
1593 #define DL_CAPABILITY_REQ_SIZE sizeof (dl_capability_req_t)
1594 #define DL_CAPABILITY_ACK_SIZE sizeof (dl_capability_ack_t)
1595 #define DL_CONTROL_REQ_SIZE sizeof (dl_control_req_t)
1596 #define DL_CONTROL_ACK_SIZE sizeof (dl_control_ack_t)
1597 #define DL_PASSIVE_REQ_SIZE sizeof (dl_passive_req_t)
1598 #define DL_INTR_MODE_REQ_SIZE sizeof (dl_intr_mode_req_t)
1600 #ifdef _KERNEL
1602 * DDI DLPI routines; see the appropriate manpage for details.
1604 extern void dlbindack(queue_t *, mblk_t *, t_scalar_t, const void *,
1605 t_uscalar_t, t_uscalar_t, t_uscalar_t);
1606 extern void dlokack(queue_t *, mblk_t *, t_uscalar_t);
1607 extern void dlerrorack(queue_t *, mblk_t *, t_uscalar_t, t_uscalar_t,
1608 t_uscalar_t);
1609 extern void dluderrorind(queue_t *, mblk_t *, const void *, t_uscalar_t,
1610 t_uscalar_t, t_uscalar_t);
1611 extern void dlphysaddrack(queue_t *, mblk_t *, const void *, t_uscalar_t);
1614 * All routines that follow are unstable and subject to change.
1616 extern void dlcapabsetqid(dl_mid_t *, const queue_t *);
1617 extern boolean_t dlcapabcheckqid(const dl_mid_t *, const queue_t *);
1618 extern void dlnotifyack(queue_t *, mblk_t *, uint32_t);
1620 * The ldi_handle_t typedef is in <sys/sunldi.h>, which in turn requires
1621 * <sys/sunddi.h>, which pulls in <sys/cmn_err.h>, which declares kernel
1622 * versions of the printf() functions that conflict with the libc ones.
1623 * This causes conflicts when building MDB modules like ARP that #define
1624 * _KERNEL. So we use `struct __ldi_handle *' instead.
1626 struct __ldi_handle;
1627 extern int dl_attach(struct __ldi_handle *, int, dl_error_ack_t *);
1628 extern int dl_bind(struct __ldi_handle *, uint_t, dl_error_ack_t *);
1629 extern int dl_phys_addr(struct __ldi_handle *, uchar_t *, size_t *,
1630 dl_error_ack_t *);
1631 extern int dl_info(struct __ldi_handle *, dl_info_ack_t *, uchar_t *, size_t *,
1632 dl_error_ack_t *);
1633 extern int dl_notify(struct __ldi_handle *, uint32_t *, dl_error_ack_t *);
1634 extern const char *dl_errstr(t_uscalar_t);
1635 extern const char *dl_primstr(t_uscalar_t);
1636 extern const char *dl_mactypestr(t_uscalar_t);
1638 #endif /* _KERNEL */
1640 #ifdef __cplusplus
1642 #endif
1644 #endif /* _SYS_DLPI_H */