1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* llc1 - an LLC Class 1 MUX compatible with SunConnect LLC2 uses DLPI
* interface.
*
* Copyrighted as an unpublished work.
* Copyright 1992-2002 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_LLC1_H
#define _SYS_LLC1_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
struct llc_stats {
long llcs_nobuffer;
long llcs_multixmt;
long llcs_multircv; /* multicast but note broadcast */
long llcs_brdcstxmt;
long llcs_brdcstrcv;
long llcs_blocked; /* discard due to upstream being flow */
/* controlled */
long llcs_pktxmt;
long llcs_pktrcv;
long llcs_bytexmt;
long llcs_bytercv;
long llcs_xidxmt;
long llcs_xidrcv;
long llcs_testxmt;
long llcs_testrcv;
long llcs_ierrors;
long llcs_oerrors;
};
#define LLCS_NOBUFFER 0
#define LLCS_MULTIXMT 1
#define LLCS_MULTIRCV 2
#define LLCS_BRDCSTXMT 3
#define LLCS_BRDCSTRCV 4
#define LLCS_BLOCKED 5
#define LLCS_PKTXMT 6
#define LLCS_PKTRCV 7
#define LLCS_BYTEXMT 8
#define LLCS_BYTERCV 9
#define LLCS_XIDXMT 10
#define LLCS_XIDRCV 11
#define LLCS_TESTXMT 12
#define LLCS_TESTRCV 13
#define LLCS_IERRORS 14
#define LLCS_OERRORS 15
/* multicast structures */
typedef struct llc1_multicast_addr {
int llcm_refcnt; /* number of streams referring to */
/* entry */
unsigned char llcm_addr[ETHERADDRL];
} llc_mcast_t;
#define LLC1_MAX_MULTICAST 16 /* default max multicast table size */
typedef
struct llc_mac_info {
struct llc_mac_info *llcp_next, *llcp_prev;
long llcp_flags;
long llcp_maxpkt;
long llcp_minpkt;
long llcp_type;
long llcp_addrlen; /* usually 6 but could be 2 */
unsigned char llcp_macaddr[ETHERADDRL];
unsigned char llcp_broadcast[ETHERADDRL];
queue_t *llcp_queue; /* queue to MAC device */
long llcp_lindex; /* link index for unlink */
long llcp_ppa; /* the PPA number */
long llcp_sap; /* when doing auto bind on lower */
/* stream */
mblk_t *llcp_data; /* temporarily hold data */
queue_t *llcp_lqtop; /* queue for ioctls */
mblk_t *llcp_mb;
long llcp_nstreams;
llc_mcast_t *llcp_mcast; /* per device multicast table */
struct llc_stats llcp_stats;
kstat_t *llcp_kstatp;
uint_t llcp_iocid; /* outstanding ioc_id */
} llc_mac_info_t;
/* flags for mac info (link) status */
#define LLC1_LINKED 0x0001 /* there is a stream linked but not ready */
#define LLC1_AVAILABLE 0x0002 /* linked stream is now ready */
#define LLC1_INFO_WAIT 0x0004 /* waiting on info_ack */
#define LLC1_DEF_PPA 0x0008 /* default (system assigned PPA) */
#define LLC1_RAW_WAIT 0x0010 /* waiting for DLIOCRAW to happen */
#define LLC1_USING_RAW 0x0020 /* lower driver is using DLIOCRAW mode */
#define LLC1_AUTO_XID 0x0040 /* automatically respond to XID */
#define LLC1_AUTO_TEST 0x0080 /* automatically respond to TEST */
#define LLC1_BINDING 0x0100 /* autmatically binding the lower stream */
typedef struct llc1 {
struct llc1 *llc_next, *llc_prev;
mblk_t *llc_mb;
long llc_state;
long llc_style;
long llc_minor;
long llc_type;
long llc_sap;
uchar_t llc_snap[5]; /* SNAP header */
long llc_waiting_for; /* DL request to lower layer */
long llc_flags; /* flags used for controlling things */
long llc_multicnt; /* number of multicast addresses for */
/* stream */
llc_mcast_t **llc_mcast; /* multicast table if multicast is */
/* enabled */
queue_t *llc_qptr;
kmutex_t llc_lock;
struct llc_mac_info *llc_mac_info;
struct llc_stats *llc_stats;
} llc1_t;
/* llc_flag bits */
#define LLC_RAW 0x0001 /* lower stream is in RAW mode */
#define LLC_FAST 0x0002 /* use "fast" path */
#define LLC_PROM 0x0004 /* stream is in physical promiscuous mode */
#define LLC_SNAP 0x0008 /* stream is using SNAP header */
#define LLC_SNAP_OID 0x0010 /* stream is SNAP, OID is defined */
typedef struct llc1device {
long llc1_status;
krwlock_t llc1_rwlock; /* used to serialize read/write locks */
int llc1_minors;
int llc1_multisize;
llc_mac_info_t *llc1_mac_next, *llc1_mac_prev; /* the various mac */
/* layers */
int llc1_ndevice; /* number of devices linked */
int llc1_nextppa; /* number to use for next PPA default */
llc1_t *llc1_str_next, *llc1_str_prev; /* open streams */
} llc1dev_t;
#define LLC1_ATTACHED 0x0001 /* board is attached so mutexes are */
/* initialized */
/*
* definitions for debug tracing
*/
#define LLCTRACE 0x0001 /* basic procedure level tracing */
#define LLCERRS 0x0002 /* trace errors */
#define LLCRECV 0x0004 /* trace receive path */
#define LLCSEND 0x0008 /* trace send path */
#define LLCPROT 0x0010 /* trace DLPI protocol */
/*
* other definitions
*/
#define LLCE_OK -1 /* internal procedure status is OK */
#define LLCE_NOBUFFER 0x1001 /* couldn't allocate a buffer */
/*
* definitions for module_info
*/
#define LLC1IDNUM 0x8022
#define LLC1_HIWATER 32000 /* high water mark for flow control */
#define LLC1_LOWATER 4096 /* low water mark for flow control */
#define LLC1_DEFMAX 4096 /* default max packet size */
/* address format for unitdata */
struct llcaddr {
unsigned char llca_addr[ETHERADDRL];
unsigned char llca_sap;
};
#define LLCADDR(p, offset) ((struct llcaddr *)(((caddr_t)(p))+(offset)))
struct llcsaddr {
unsigned char llca_saddr[ETHERADDRL];
unsigned short llca_ssap;
};
#define LLCSADDR(p, offset) ((struct llcsaddr *)(((caddr_t)(p))+(offset)))
/*
* 802.2 specific declarations
*/
struct llchdr {
unsigned char llc_dsap;
unsigned char llc_ssap;
unsigned char llc_ctl;
};
struct llchdr_xid {
unsigned char llcx_format;
unsigned char llcx_class;
unsigned char llcx_window;
};
struct snaphdr {
uchar_t snap_oid[3];
uchar_t snap_type[2];
};
#define LLC_UI 0x3
#define LLC_XID 0xAF
#define LLC_TEST 0xE3
#define LLC_P 0x10 /* P bit for use with XID/TEST */
#define LLC_XID_FMTID 0x81 /* XID format identifier */
#define LLC_SERVICES 0x01 /* Services supported */
#define LLC_GLOBAL_SAP 0XFF /* Global SAP address */
#define LLC_NULL_SAP 0x00
#define LLC_SNAP_SAP 0xAA /* SNAP SAP */
#define LLC_GROUP_ADDR 0x01 /* indication in DSAP of a group address */
#define LLC_RESPONSE 0x01 /* indication in SSAP of a response */
#define LLC_NOVELL_SAP -1 /* indicator that Novell 802.3 mode is used */
#define LLC_XID_INFO_SIZE 3 /* length of the INFO field */
#define LLC_XID_CLASS_I (0x01) /* Class I */
#define LLC_XID_CLASS_II (0x03) /* Class II */
#define LLC_XID_CLASS_III (0x05) /* Class III */
#define LLC_XID_CLASS_IV (0x07) /* Class IV */
/* Types can be or'd together */
#define LLC_XID_TYPE_1 (0x01) /* Type 1 */
#define LLC_XID_TYPE_2 (0x02) /* Type 2 */
#define LLC_XID_TYPE_3 (0x04) /* Type 3 */
#define LLC1_CSMACD_HDR_SIZE (2*ETHERADDRL+2)
#define ismulticast(cp) ((*(caddr_t)(cp)) & 0x01)
/*
* special ioctl calls for SunSelect LLC2 conformance
*/
#define L_GETPPA (('L'<<8)|1)
#define L_SETPPA (('L'<<8)|2)
#define L_GETSTATS (('L'<<8)|5)
#define L_ZEROSTATS (('L'<<8)|6)
#define LI_SPPA 0x02 /* type of snioc structure */
struct ll_snioc {
uchar_t lli_type;
uchar_t lli_spare[3];
int lli_ppa;
int lli_index;
};
/*
* version of insque/remque for use by this driver
*/
struct qelem {
struct qelem *q_forw;
struct qelem *q_back;
/* rest of structure */
};
#ifdef __cplusplus
}
#endif
#endif /* _SYS_LLC1_H */
|