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