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