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
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.
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]
23 * llc1 - an LLC Class 1 MUX compatible with SunConnect LLC2 uses DLPI
26 * Copyrighted as an unpublished work.
27 * Copyright 1992-2002 Sun Microsystems, Inc. All rights reserved.
28 * Use is subject to license terms.
34 #pragma ident "%Z%%M% %I% %E% SMI"
43 long llcs_multircv
; /* multicast but note broadcast */
46 long llcs_blocked
; /* discard due to upstream being flow */
60 #define LLCS_NOBUFFER 0
61 #define LLCS_MULTIXMT 1
62 #define LLCS_MULTIRCV 2
63 #define LLCS_BRDCSTXMT 3
64 #define LLCS_BRDCSTRCV 4
65 #define LLCS_BLOCKED 5
68 #define LLCS_BYTEXMT 8
69 #define LLCS_BYTERCV 9
70 #define LLCS_XIDXMT 10
71 #define LLCS_XIDRCV 11
72 #define LLCS_TESTXMT 12
73 #define LLCS_TESTRCV 13
74 #define LLCS_IERRORS 14
75 #define LLCS_OERRORS 15
77 /* multicast structures */
78 typedef struct llc1_multicast_addr
{
79 int llcm_refcnt
; /* number of streams referring to */
81 unsigned char llcm_addr
[ETHERADDRL
];
83 #define LLC1_MAX_MULTICAST 16 /* default max multicast table size */
87 struct llc_mac_info
*llcp_next
, *llcp_prev
;
92 long llcp_addrlen
; /* usually 6 but could be 2 */
93 unsigned char llcp_macaddr
[ETHERADDRL
];
94 unsigned char llcp_broadcast
[ETHERADDRL
];
95 queue_t
*llcp_queue
; /* queue to MAC device */
96 long llcp_lindex
; /* link index for unlink */
97 long llcp_ppa
; /* the PPA number */
98 long llcp_sap
; /* when doing auto bind on lower */
100 mblk_t
*llcp_data
; /* temporarily hold data */
101 queue_t
*llcp_lqtop
; /* queue for ioctls */
104 llc_mcast_t
*llcp_mcast
; /* per device multicast table */
105 struct llc_stats llcp_stats
;
106 kstat_t
*llcp_kstatp
;
107 uint_t llcp_iocid
; /* outstanding ioc_id */
110 /* flags for mac info (link) status */
111 #define LLC1_LINKED 0x0001 /* there is a stream linked but not ready */
112 #define LLC1_AVAILABLE 0x0002 /* linked stream is now ready */
113 #define LLC1_INFO_WAIT 0x0004 /* waiting on info_ack */
114 #define LLC1_DEF_PPA 0x0008 /* default (system assigned PPA) */
115 #define LLC1_RAW_WAIT 0x0010 /* waiting for DLIOCRAW to happen */
116 #define LLC1_USING_RAW 0x0020 /* lower driver is using DLIOCRAW mode */
117 #define LLC1_AUTO_XID 0x0040 /* automatically respond to XID */
118 #define LLC1_AUTO_TEST 0x0080 /* automatically respond to TEST */
119 #define LLC1_BINDING 0x0100 /* autmatically binding the lower stream */
121 typedef struct llc1
{
122 struct llc1
*llc_next
, *llc_prev
;
129 uchar_t llc_snap
[5]; /* SNAP header */
130 long llc_waiting_for
; /* DL request to lower layer */
131 long llc_flags
; /* flags used for controlling things */
132 long llc_multicnt
; /* number of multicast addresses for */
134 llc_mcast_t
**llc_mcast
; /* multicast table if multicast is */
138 struct llc_mac_info
*llc_mac_info
;
139 struct llc_stats
*llc_stats
;
143 #define LLC_RAW 0x0001 /* lower stream is in RAW mode */
144 #define LLC_FAST 0x0002 /* use "fast" path */
145 #define LLC_PROM 0x0004 /* stream is in physical promiscuous mode */
146 #define LLC_SNAP 0x0008 /* stream is using SNAP header */
147 #define LLC_SNAP_OID 0x0010 /* stream is SNAP, OID is defined */
150 typedef struct llc1device
{
152 krwlock_t llc1_rwlock
; /* used to serialize read/write locks */
155 llc_mac_info_t
*llc1_mac_next
, *llc1_mac_prev
; /* the various mac */
157 int llc1_ndevice
; /* number of devices linked */
158 int llc1_nextppa
; /* number to use for next PPA default */
159 llc1_t
*llc1_str_next
, *llc1_str_prev
; /* open streams */
162 #define LLC1_ATTACHED 0x0001 /* board is attached so mutexes are */
167 * definitions for debug tracing
169 #define LLCTRACE 0x0001 /* basic procedure level tracing */
170 #define LLCERRS 0x0002 /* trace errors */
171 #define LLCRECV 0x0004 /* trace receive path */
172 #define LLCSEND 0x0008 /* trace send path */
173 #define LLCPROT 0x0010 /* trace DLPI protocol */
178 #define LLCE_OK -1 /* internal procedure status is OK */
179 #define LLCE_NOBUFFER 0x1001 /* couldn't allocate a buffer */
183 * definitions for module_info
185 #define LLC1IDNUM 0x8022
186 #define LLC1_HIWATER 32000 /* high water mark for flow control */
187 #define LLC1_LOWATER 4096 /* low water mark for flow control */
188 #define LLC1_DEFMAX 4096 /* default max packet size */
190 /* address format for unitdata */
193 unsigned char llca_addr
[ETHERADDRL
];
194 unsigned char llca_sap
;
196 #define LLCADDR(p, offset) ((struct llcaddr *)(((caddr_t)(p))+(offset)))
199 unsigned char llca_saddr
[ETHERADDRL
];
200 unsigned short llca_ssap
;
202 #define LLCSADDR(p, offset) ((struct llcsaddr *)(((caddr_t)(p))+(offset)))
205 * 802.2 specific declarations
208 unsigned char llc_dsap
;
209 unsigned char llc_ssap
;
210 unsigned char llc_ctl
;
213 unsigned char llcx_format
;
214 unsigned char llcx_class
;
215 unsigned char llcx_window
;
219 uchar_t snap_type
[2];
224 #define LLC_TEST 0xE3
225 #define LLC_P 0x10 /* P bit for use with XID/TEST */
226 #define LLC_XID_FMTID 0x81 /* XID format identifier */
227 #define LLC_SERVICES 0x01 /* Services supported */
228 #define LLC_GLOBAL_SAP 0XFF /* Global SAP address */
229 #define LLC_NULL_SAP 0x00
230 #define LLC_SNAP_SAP 0xAA /* SNAP SAP */
231 #define LLC_GROUP_ADDR 0x01 /* indication in DSAP of a group address */
232 #define LLC_RESPONSE 0x01 /* indication in SSAP of a response */
233 #define LLC_NOVELL_SAP -1 /* indicator that Novell 802.3 mode is used */
235 #define LLC_XID_INFO_SIZE 3 /* length of the INFO field */
236 #define LLC_XID_CLASS_I (0x01) /* Class I */
237 #define LLC_XID_CLASS_II (0x03) /* Class II */
238 #define LLC_XID_CLASS_III (0x05) /* Class III */
239 #define LLC_XID_CLASS_IV (0x07) /* Class IV */
241 /* Types can be or'd together */
242 #define LLC_XID_TYPE_1 (0x01) /* Type 1 */
243 #define LLC_XID_TYPE_2 (0x02) /* Type 2 */
244 #define LLC_XID_TYPE_3 (0x04) /* Type 3 */
246 #define LLC1_CSMACD_HDR_SIZE (2*ETHERADDRL+2)
248 #define ismulticast(cp) ((*(caddr_t)(cp)) & 0x01)
251 * special ioctl calls for SunSelect LLC2 conformance
253 #define L_GETPPA (('L'<<8)|1)
254 #define L_SETPPA (('L'<<8)|2)
255 #define L_GETSTATS (('L'<<8)|5)
256 #define L_ZEROSTATS (('L'<<8)|6)
258 #define LI_SPPA 0x02 /* type of snioc structure */
262 uchar_t lli_spare
[3];
268 * version of insque/remque for use by this driver
271 struct qelem
*q_forw
;
272 struct qelem
*q_back
;
273 /* rest of structure */
280 #endif /* _SYS_LLC1_H */