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