]>
Commit | Line | Data |
---|---|---|
1c79356b A |
1 | /* |
2 | * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. | |
3 | * | |
4 | * @APPLE_LICENSE_HEADER_START@ | |
5 | * | |
6 | * The contents of this file constitute Original Code as defined in and | |
7 | * are subject to the Apple Public Source License Version 1.1 (the | |
8 | * "License"). You may not use this file except in compliance with the | |
9 | * License. Please obtain a copy of the License at | |
10 | * http://www.apple.com/publicsource and read it before using this file. | |
11 | * | |
12 | * This Original Code and all software distributed under the License are | |
13 | * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER | |
14 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, | |
15 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, | |
16 | * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the | |
17 | * License for the specific language governing rights and limitations | |
18 | * under the License. | |
19 | * | |
20 | * @APPLE_LICENSE_HEADER_END@ | |
21 | */ | |
22 | /* | |
23 | * | |
24 | * ORIGINS: 82 | |
25 | * | |
26 | * (C) COPYRIGHT Apple Computer, Inc. 1992-1996 | |
27 | * All Rights Reserved | |
28 | * | |
29 | */ | |
30 | ||
31 | #ifndef _NETAT_ADSP_H_ | |
32 | #define _NETAT_ADSP_H_ | |
33 | ||
34 | /* ADSP flags for read, write, and close routines */ | |
35 | ||
36 | #define ADSP_EOM 0x01 /* Sent or received EOM with data */ | |
37 | #define ADSP_FLUSH 0x02 /* Send all data in send queue */ | |
38 | #define ADSP_WAIT 0x04 /* Graceful close, wait 'til snd queue emptys */ | |
39 | ||
40 | ||
41 | /* ADSP events to be fielded by the user event handler */ | |
42 | ||
43 | #define ADSP_EV_ATTN 0x02 /* Attention data recvd. */ | |
44 | #define ADSP_EV_RESET 0x04 /* Forward reset recvd. */ | |
45 | #define ADSP_EV_CLOSE 0x08 /* Close advice recvd. */ | |
46 | ||
47 | ||
48 | /* ADSP packet control codes */ | |
49 | ||
50 | #define ADSP_PROBEACK 0 /* Probe or acknowledgement */ | |
51 | #define ADSP_OPENCONREQUEST 1 /* Open connection request */ | |
52 | #define ADSP_OPENCONACK 2 /* Open connection acknowledgement */ | |
53 | #define ADSP_OPENCONREQACK 3 /* Open connection request + ack */ | |
54 | #define ADSP_OPENCONDENIAL 4 /* Open connection denial */ | |
55 | #define ADSP_CLOSEADVICE 5 /* Close connection advice */ | |
56 | #define ADSP_FORWARDRESET 6 /* Forward reset */ | |
57 | #define ADSP_FORWARDRESETACK 7 /* Forward reset acknowledgement */ | |
58 | #define ADSP_RETRANSADVICE 8 /* Retransmit advice */ | |
59 | ||
60 | ||
61 | /* Miscellaneous constants */ | |
62 | ||
63 | #define ADSP_MAXDATA 572 /* Maximum data bytes in ADSP packet */ | |
64 | #define ADSP_MAXATTNDATA 570 /* Maximum data bytes in attn msg */ | |
65 | #define ADSP_DDPTYPE 7 /* DDP protocol type for ADSP */ | |
66 | #define ADSP_VERSION 0x0100 /* ADSP version */ | |
67 | ||
68 | ||
69 | /* Some additional ADSP error codes */ | |
70 | ||
71 | #define EQUEWASEMP 10001 | |
72 | #define EONEENTQUE 10002 | |
73 | #define EQUEBLOCKED 10003 | |
74 | #define EFWDRESET 10004 | |
75 | #define EENDOFMSG 10005 | |
76 | #define EADDRNOTINUSE 10006 | |
77 | ||
78 | ||
79 | ||
80 | /* Tuning Parameter Block */ | |
81 | ||
82 | struct tpb { | |
83 | unsigned Valid : 1; /* Tuning parameter block is valid */ | |
84 | unsigned short TransThresh; /* Transmit threshold */ | |
85 | unsigned TransTimerIntrvl; /* Transmit timer interval */ | |
86 | unsigned short SndWdwCloThresh; /* Send window closing threshold */ | |
87 | unsigned SndWdwCloIntrvl; /* Send window closed interval */ | |
88 | unsigned char SndWdwCloBckoff; /* Send window closed backoff rate */ | |
89 | unsigned ReTransIntrvl; /* Retransmit interval */ | |
90 | unsigned char ReTransBckoff; /* Retransmit backoff rate */ | |
91 | unsigned RestartIntrvl; /* Restart sender interval */ | |
92 | unsigned char RestartBckoff; /* Restart sender backoff rate */ | |
93 | unsigned SndQBufSize; /* Send queue buffer size */ | |
94 | unsigned short RcvQMaxSize; /* Maximum size of the receive queue */ | |
95 | unsigned short RcvQCpyThresh; /* Receive queue copy threshold */ | |
96 | unsigned FwdRstIntrvl; /* Forward reset interval */ | |
97 | unsigned char FwdRstBckoff; /* Forward reset backoff rate */ | |
98 | unsigned AttnIntrvl; /* Retransmit attn msg interval */ | |
99 | unsigned char AttnBckoff; /* Retransmit attn msg backoff rate */ | |
100 | unsigned OpenIntrvl; /* Retransmit open request interval */ | |
101 | unsigned char OpenMaxRetry; /* Open request maximum retrys */ | |
102 | unsigned char RetransThresh; /* Retransmit advice threshold */ | |
103 | unsigned ProbeRetryMax; /* Maximum number of probes */ | |
104 | unsigned SndByteCntMax; /* Maximum number bytes in send queue */ | |
105 | }; | |
106 | ||
107 | ||
108 | /* Tuning Parameter Tags */ | |
109 | ||
110 | #define ADSP_TRANSTHRESH 1 /* Transmit threshold */ | |
111 | #define ADSP_TRANSTIMERINTRVL 2 /* Transmit timer interval */ | |
112 | #define ADSP_SNDWDWCLOTHRESH 3 /* Send window closing threshold */ | |
113 | #define ADSP_SNDWDWCLOINTRVL 4 /* Send window closed interval */ | |
114 | #define ADSP_SNDWDWCLOBCKOFF 5 /* Send window closed backoff rate */ | |
115 | #define ADSP_RETRANSINTRVL 6 /* Retransmit interval */ | |
116 | #define ADSP_RETRANSBCKOFF 7 /* Retransmit backoff rate */ | |
117 | #define ADSP_RESTARTINTRVL 8 /* Restart sender interval */ | |
118 | #define ADSP_RESTARTBCKOFF 9 /* Restart sender backoff rate */ | |
119 | #define ADSP_SNDQBUFSIZE 10 /* Send queue buffer size */ | |
120 | #define ADSP_RCVQMAXSIZE 11 /* Receive queue maximum size */ | |
121 | #define ADSP_RCVQCPYTHRESH 12 /* Receive queue copy threshold */ | |
122 | #define ADSP_FWDRSTINTRVL 13 /* Forward reset retransmit interval */ | |
123 | #define ADSP_FWDRSTBCKOFF 14 /* Forward reset backoff rate */ | |
124 | #define ADSP_ATTNINTRVL 15 /* Rexmit attention message interval */ | |
125 | #define ADSP_ATTNBCKOFF 16 /* Attention message backoff rate */ | |
126 | #define ADSP_OPENINTRVL 17 /* Retransmit open request interval */ | |
127 | #define ADSP_OPENMAXRETRY 18 /* Open request max retrys */ | |
128 | #define ADSP_RETRANSTHRESH 19 /* Retransmit advice threshold */ | |
129 | #define ADSP_PROBERETRYMAX 20 | |
130 | #define ADSP_SNDBYTECNTMAX 21 | |
131 | ||
132 | #define TuneParamCnt 21 /* The number of tuning parameters */ | |
133 | ||
134 | /* Connection Status Tags */ | |
135 | ||
136 | #define ADSP_STATE 1 /* The connection state */ | |
137 | #define ADSP_SNDSEQ 2 /* Send sequence number */ | |
138 | #define ADSP_FIRSTRTMTSEQ 3 /* First retransmit sequence number */ | |
139 | #define ADSP_SNDWDWSEQ 4 /* Send window sequence number */ | |
140 | #define ADSP_RCVSEQ 5 /* Receive sequence number */ | |
141 | #define ADSP_ATTNSNDSEQ 6 /* Attn msg send sequence number */ | |
142 | #define ADSP_ATTNRCVSEQ 7 /* Attn msg receive sequence number */ | |
143 | #define ADSP_RCVWDW 8 /* Receive window size */ | |
144 | #define ADSP_ATTNMSGWAIT 9 /* Attn msg is in the receive queue */ | |
145 | ||
146 | #define ConStatTagCnt 9 /* Number of connection status tags */ | |
147 | ||
148 | #define ADSP_INVALID 0 /* Invalid connection control block */ | |
149 | #define ADSP_LISTEN 1 /* Waiting for an open con req */ | |
150 | #define ADSP_OPENING 2 /* No state info, sending open req */ | |
151 | #define ADSP_MYHALFOPEN 4 /* His state info, sending open req */ | |
152 | #define ADSP_HISHALFOPEN 8 /* He has my state info, sndng op req */ | |
153 | #define ADSP_OPEN 16 /* Connection is operational */ | |
154 | #define ADSP_TORNDOWN 32 /* Probe timer has expired 4 times */ | |
155 | #define ADSP_CLOSING 64 /* Client close, emptying send Queues */ | |
156 | #define ADSP_CLOSED 128 /* Close adv rcvd, emptying rcv Queues */ | |
157 | ||
158 | /* Management Counters */ | |
159 | ||
160 | #define ADSP_ATTNACKRCVD 1 /* Attn msg ack received */ | |
161 | #define ADSP_ATTNACKACPTD 2 /* Attn msg ack accepted */ | |
162 | #define ADSP_PROBERCVD 3 /* Probe received */ | |
163 | #define ADSP_ACKRCVD 4 /* Explicit ack msg received */ | |
164 | #define ADSP_FWDRSTRCVD 5 /* Forward reset received */ | |
165 | #define ADSP_FWDRSTACPTD 6 /* Forward reset accepted */ | |
166 | #define ADSP_FWDRSTACKRCVD 7 /* Forward reset ack received */ | |
167 | #define ADSP_FWDRSTACKACPTD 8 /* Forward reset ack accepted */ | |
168 | #define ADSP_ATTNRCVD 9 /* Attn msg received */ | |
169 | #define ADSP_ATTNACPTD 10 /* Attn msg accepted */ | |
170 | #define ADSP_DATARCVD 11 /* Data msg received */ | |
171 | #define ADSP_DATAACPTD 12 /* Data msg Accepted */ | |
172 | #define ADSP_ACKFIELDCHKD 13 /* Ack field checked */ | |
173 | #define ADSP_ACKNRSFIELDACPTD 14 /* Next receive seq field accepted */ | |
174 | #define ADSP_ACKSWSFIELDACPTD 15 /* Send window seq field accepted */ | |
175 | #define ADSP_ACKREQSTD 16 /* Ack requested */ | |
176 | #define ADSP_LOWMEM 17 /* Low memory */ | |
177 | #define ADSP_OPNREQEXP 18 /* Open request timer expired */ | |
178 | #define ADSP_PROBEEXP 19 /* Probe timer expired */ | |
179 | #define ADSP_FWDRSTEXP 20 /* Forward reset timer expired */ | |
180 | #define ADSP_ATTNEXP 21 /* Attention timer expired */ | |
181 | #define ADSP_TRANSEXP 22 /* Transmit timer expired */ | |
182 | #define ADSP_RETRANSEXP 23 /* Retransmit timer expired */ | |
183 | #define ADSP_SNDWDWCLOEXP 24 /* Send window closed timer expired */ | |
184 | #define ADSP_RESTARTEXP 25 /* Restart sender timer expired */ | |
185 | #define ADSP_RESLOWEXP 26 /* Resources are low timer expired */ | |
186 | #define ADSP_RETRANSRCVD 27 /* Retransmit advice received */ | |
187 | ||
188 | #define InfoTagCnt 27 | |
189 | ||
190 | /* Length of the parameter and status lists */ | |
191 | ||
192 | #define ADSP_DEFLEN (TuneParamCnt * 6 + 1) | |
193 | #define ADSP_STALEN (ConStatTagCnt * 6 + 1) | |
194 | #define ADSP_INFOLEN (InfoTagCnt * 6 + 1) | |
195 | ||
196 | /* from h/ADSP.h */ | |
197 | ||
198 | /* result codes */ | |
199 | ||
200 | #define controlErr -17 /*I/O System Errors*/ | |
201 | ||
202 | #define errENOBUFS -1281 | |
203 | #define errRefNum -1280 /* bad connection refNum */ | |
204 | #define errAborted -1279 /* control call was aborted */ | |
205 | #define errState -1278 /* bad connection state for this operation */ | |
206 | #define errOpening -1277 /* open connection request failed */ | |
207 | #define errAttention -1276 /* attention message too long */ | |
208 | #define errFwdReset -1275 /* read terminated by forward reset */ | |
209 | #define errDSPQueueSize -1274 /* DSP Read/Write Queue Too small */ | |
210 | #define errOpenDenied -1273 /* open connection request was denied */ | |
211 | ||
212 | /* control codes */ | |
213 | ||
214 | #define dspInit 255 /* create a new connection end */ | |
215 | #define dspRemove 254 /* remove a connection end */ | |
216 | #define dspOpen 253 /* open a connection */ | |
217 | #define dspClose 252 /* close a connection */ | |
218 | #define dspCLInit 251 /* create a connection listener */ | |
219 | #define dspCLRemove 250 /* remove a connection listener */ | |
220 | #define dspCLListen 249 /* post a listener request */ | |
221 | #define dspCLDeny 248 /* deny an open connection request */ | |
222 | #define dspStatus 247 /* get status of connection end */ | |
223 | #define dspRead 246 /* read data from the connection */ | |
224 | #define dspWrite 245 /* write data on the connection */ | |
225 | #define dspAttention 244 /* send an attention message */ | |
226 | #define dspOptions 243 /* set connection end options */ | |
227 | #define dspReset 242 /* forward reset the connection */ | |
228 | #define dspNewCID 241 /* generate a cid for a connection end */ | |
229 | ||
230 | ||
231 | /* connection opening modes */ | |
232 | ||
233 | #define ocRequest 1 /* request a connection with remote */ | |
234 | #define ocPassive 2 /* wait for a connection request from remote */ | |
235 | #define ocAccept 3 /* accept request as delivered by listener */ | |
236 | #define ocEstablish 4 /* consider connection to be open */ | |
237 | ||
238 | ||
239 | /* connection end states */ | |
240 | ||
241 | #define sListening 1 /* for connection listeners */ | |
242 | #define sPassive 2 /* waiting for a connection request from remote */ | |
243 | #define sOpening 3 /* requesting a connection with remote */ | |
244 | #define sOpen 4 /* connection is open */ | |
245 | #define sClosing 5 /* connection is being torn down */ | |
246 | #define sClosed 6 /* connection end state is closed */ | |
247 | ||
248 | ||
249 | ||
250 | /* client event flags */ | |
251 | ||
252 | #define eClosed 0x80 /* received connection closed advice */ | |
253 | #define eTearDown 0x40 /* connection closed due to broken connection */ | |
254 | #define eAttention 0x20 /* received attention message */ | |
255 | #define eFwdReset 0x10 /* received forward reset advice */ | |
256 | ||
257 | /* miscellaneous constants */ | |
258 | ||
259 | #define attnBufSize 570 /* size of client attention buffer */ | |
260 | #define minDSPQueueSize 100 /* Minimum size of receive or send Queue */ | |
261 | #define defaultDSPQS 16384 /* random guess */ | |
262 | #define RecvQSize defaultDSPQS | |
263 | #define SendQSize defaultDSPQS | |
264 | ||
265 | /* *** Seems to be a problem in Mac OS X too *** */ | |
266 | /* Solaris defines u as (curproc->p_user) | |
267 | #if defined(u) | |
268 | #undef u | |
269 | #endif | |
270 | */ | |
271 | ||
272 | typedef long (*ProcPtr)(); | |
273 | typedef ProcPtr *ProcHandle; | |
274 | typedef char *Ptr; | |
275 | typedef Ptr *Handle; | |
276 | ||
277 | /* connection control block */ | |
278 | ||
279 | struct TRCCB { | |
280 | u_char *ccbLink; /* link to next ccb */ | |
281 | u_short refNum; /* user reference number */ | |
282 | u_short state; /* state of the connection end */ | |
283 | u_char userFlags; /* flags for unsolicited connection events */ | |
284 | u_char localSocket; /* socket number of this connection end */ | |
285 | at_inet_t remoteAddress; /* internet address of remote end */ | |
286 | u_short attnCode; /* attention code received */ | |
287 | u_short attnSize; /* size of received attention data */ | |
288 | u_char *attnPtr; /* ptr to received attention data */ | |
289 | u_char reserved[220]; /* for adsp internal use */ | |
290 | }; | |
291 | ||
292 | typedef struct TRCCB TRCCB; | |
293 | typedef TRCCB *TPCCB; | |
294 | ||
295 | /* init connection end parameters */ | |
296 | ||
297 | struct TRinitParams { | |
298 | TPCCB ccbPtr; /* pointer to connection control block */ | |
299 | ProcPtr userRoutine; /* client routine to call on event */ | |
300 | u_char *sendQueue; /* client passed send queue buffer */ | |
301 | u_char *recvQueue; /* client passed receive queue buffer */ | |
302 | u_char *attnPtr; /* client passed receive attention buffer */ | |
303 | u_short sendQSize; /* size of send queue (0..64K bytes) */ | |
304 | u_short recvQSize; /* size of receive queue (0..64K bytes) */ | |
305 | u_char localSocket; /* local socket number */ | |
306 | }; | |
307 | ||
308 | typedef struct TRinitParams TRinitParams; | |
309 | ||
310 | /* open connection parameters */ | |
311 | ||
312 | struct TRopenParams { | |
313 | u_short localCID; /* local connection id */ | |
314 | u_short remoteCID; /* remote connection id */ | |
315 | at_inet_t remoteAddress; /* address of remote end */ | |
316 | at_inet_t filterAddress; /* address filter */ | |
317 | unsigned long sendSeq; /* local send sequence number */ | |
318 | u_long recvSeq; /* receive sequence number */ | |
319 | u_long attnSendSeq; /* attention send sequence number */ | |
320 | u_long attnRecvSeq; /* attention receive sequence number */ | |
321 | u_short sendWindow; /* send window size */ | |
322 | u_char ocMode; /* open connection mode */ | |
323 | u_char ocInterval; /* open connection request retry interval */ | |
324 | u_char ocMaximum; /* open connection request retry maximum */ | |
325 | }; | |
326 | ||
327 | typedef struct TRopenParams TRopenParams; | |
328 | ||
329 | /* close connection parameters */ | |
330 | ||
331 | struct TRcloseParams { | |
332 | u_char abort; /* abort connection immediately if non-zero */ | |
333 | }; | |
334 | ||
335 | typedef struct TRcloseParams TRcloseParams; | |
336 | ||
337 | /* client status parameter block */ | |
338 | ||
339 | struct TRstatusParams { | |
340 | TPCCB ccbPtr; /* pointer to ccb */ | |
341 | u_short sendQPending; /* pending bytes in send queue */ | |
342 | u_short sendQFree; /* available buffer space in send queue */ | |
343 | u_short recvQPending; /* pending bytes in receive queue */ | |
344 | u_short recvQFree; /* available buffer space in receive queue */ | |
345 | }; | |
346 | ||
347 | typedef struct TRstatusParams TRstatusParams; | |
348 | ||
349 | /* read/write parameter block */ | |
350 | ||
351 | struct TRioParams { | |
352 | u_short reqCount; /* requested number of bytes */ | |
353 | u_short actCount; /* actual number of bytes */ | |
354 | u_char *dataPtr; /* pointer to data buffer */ | |
355 | u_char eom; /* indicates logical end of message */ | |
356 | u_char flush; /* send data now */ | |
357 | u_char dummy[2]; /*### LD */ | |
358 | }; | |
359 | ||
360 | typedef struct TRioParams TRioParams; | |
361 | ||
362 | /* attention parameter block */ | |
363 | ||
364 | struct TRattnParams { | |
365 | u_short attnCode; /* client attention code */ | |
366 | u_short attnSize; /* size of attention data */ | |
367 | u_char *attnData; /* pointer to attention data */ | |
368 | u_char attnInterval; /* retransmit timer in 10-tick intervals */ | |
369 | u_char dummy[3]; /* ### LD */ | |
370 | }; | |
371 | ||
372 | typedef struct TRattnParams TRattnParams; | |
373 | ||
374 | /* client send option parameter block */ | |
375 | ||
376 | struct TRoptionParams { | |
377 | u_short sendBlocking; /* quantum for data packets */ | |
378 | u_char sendTimer; /* send timer in 10-tick intervals */ | |
379 | u_char rtmtTimer; /* retransmit timer in 10-tick intervals */ | |
380 | u_char badSeqMax; /* threshold for sending retransmit advice */ | |
381 | u_char useCheckSum; /* use ddp packet checksum */ | |
382 | u_short filler; /* ### LD */ | |
383 | int newPID; /* ### Temp for backward compatibility 02/11/94 */ | |
384 | }; | |
385 | ||
386 | typedef struct TRoptionParams TRoptionParams; | |
387 | ||
388 | /* new cid parameters */ | |
389 | ||
390 | struct TRnewcidParams { | |
391 | u_short newcid; /* new connection id returned */ | |
392 | }; | |
393 | ||
394 | typedef struct TRnewcidParams TRnewcidParams; | |
395 | ||
396 | union adsp_command { | |
397 | TRinitParams initParams; /* dspInit, dspCLInit */ | |
398 | TRopenParams openParams; /* dspOpen, dspCLListen, dspCLDeny */ | |
399 | TRcloseParams closeParams; /* dspClose, dspRemove */ | |
400 | TRioParams ioParams; /* dspRead, dspWrite, dspAttnRead */ | |
401 | TRattnParams attnParams; /* dspAttention */ | |
402 | TRstatusParams statusParams; /* dspStatus */ | |
403 | TRoptionParams optionParams; /* dspOptions */ | |
404 | TRnewcidParams newCIDParams; /* dspNewCID */ | |
405 | }; | |
406 | ||
407 | /* ADSP CntrlParam ioQElement */ | |
408 | ||
409 | struct DSPParamBlock { | |
410 | struct QElem *qLink; | |
411 | short qType; | |
412 | short ioTrap; | |
413 | Ptr ioCmdAddr; | |
414 | ProcPtr ioCompletion; | |
415 | short ioResult; | |
416 | char *ioNamePtr; | |
417 | short ioVRefNum; | |
418 | short ioCRefNum; /* adsp driver refNum */ | |
419 | short csCode; /* adsp driver control code */ | |
420 | long qStatus; /* adsp internal use */ | |
421 | u_short ccbRefNum; /* connection end refNum */ | |
422 | union adsp_command u; | |
423 | }; | |
424 | ||
425 | typedef struct DSPParamBlock DSPParamBlock; | |
426 | typedef DSPParamBlock *DSPPBPtr; | |
427 | ||
428 | struct adspcmd { | |
429 | struct adspcmd *qLink; | |
430 | u_int ccbRefNum; | |
431 | caddr_t ioc; | |
432 | #ifdef KERNEL | |
433 | gref_t *gref; | |
434 | gbuf_t *mp; | |
435 | #else | |
436 | void *gref; | |
437 | void *mp; | |
438 | #endif | |
439 | short ioResult; | |
440 | u_short ioDirection; | |
441 | short csCode; | |
442 | u_short socket; | |
443 | union adsp_command u; | |
444 | }; | |
445 | ||
446 | /* from h/adsp_frames.h */ | |
447 | ||
448 | #ifdef NOT_USED | |
449 | /* | |
450 | * LAP Frame Information | |
451 | */ | |
452 | ||
453 | typedef struct { | |
454 | u_char lap_dest; | |
455 | u_char lap_src; | |
456 | u_char lap_type; | |
457 | u_char lap_data[1]; | |
458 | } LAP_FRAME; | |
459 | ||
460 | #define LAP_FRAME_LEN 3 | |
461 | ||
462 | #define MAX_FRAME_SIZE 603 | |
463 | ||
464 | #define LAP_DDP 0x01 | |
465 | #define LAP_DDPX 0x02 | |
466 | ||
467 | typedef struct { | |
468 | ua_short ddp_length; /* length of ddp fields */ | |
469 | u_char ddp_dest; /* destination socket */ | |
470 | u_char ddp_source; /* source socket */ | |
471 | u_char ddp_type; /* protocol type */ | |
472 | u_char ddp_data[1]; /* data field */ | |
473 | } DDP_FRAME; | |
474 | ||
475 | #define DDPS_FRAME_LEN 5 | |
476 | #endif NOT_USED | |
477 | ||
478 | typedef struct { | |
479 | ua_short ddpx_length; /* length and hop count */ | |
480 | ua_short ddpx_cksm; /* checksum */ | |
481 | at_net ddpx_dnet; /* destination network number */ | |
482 | at_net ddpx_snet; /* source network number */ | |
483 | u_char ddpx_dnode; /* destination node */ | |
484 | u_char ddpx_snode; /* source node */ | |
485 | u_char ddpx_dest; /* destination socket */ | |
486 | u_char ddpx_source; /* source socket */ | |
487 | u_char ddpx_type; /* protocol type */ | |
488 | u_char ddpx_data[1]; /* data field */ | |
489 | } DDPX_FRAME; | |
490 | ||
491 | #define DDPL_FRAME_LEN 13 | |
492 | ||
493 | #ifdef NOT_USED | |
494 | typedef struct { | |
495 | u_char nbp_ctrl_cnt; /* control and tuple count */ | |
496 | u_char nbp_id; /* enquiry/reply id */ | |
497 | u_char nbp_data[1]; /* tuple space */ | |
498 | } NBP_FRAME; | |
499 | ||
500 | #define NBP_TYPE_MASK 0xf0 /* mask of ctrl_cnt field */ | |
501 | #define NBP_CNT_MASK 0x0f /* mask for number of tuples */ | |
502 | #define NBP_BROADCAST 0x10 /* internet lookup */ | |
503 | #define NBP_LOOKUP 0x20 /* lookup request */ | |
504 | #define NBP_REPLY 0x30 /* response to lookup */ | |
505 | ||
506 | typedef struct { | |
507 | u_char atp_control; /* control field */ | |
508 | u_char atp_map; /* bitmap for acknowlegement */ | |
509 | ua_short atp_tid; /* transaction id */ | |
510 | union | |
511 | { | |
512 | u_char b[4]; /* user u_chars */ | |
513 | ua_long dw; | |
514 | } atp_ub; | |
515 | u_char atp_data[1]; /* data field */ | |
516 | } ATP_FRAME; | |
517 | ||
518 | #define ATP_FRAME_LEN 8 | |
519 | ||
520 | #define ATP_TREQ 0x40 /* transaction request */ | |
521 | #define ATP_TRESP 0x80 /* response packet */ | |
522 | #define ATP_TREL 0xc0 /* transaction release packet */ | |
523 | #define ATP_XO 0x20 /* exactly once flag */ | |
524 | #define ATP_EOM 0x10 /* end of message flag */ | |
525 | #define ATP_STS 0x08 /* send transaction status */ | |
526 | ||
527 | #define ATP_TYPE(x) ((x)->atp_control & 0xc0) | |
528 | ||
529 | typedef struct { | |
530 | at_net net1; | |
531 | u_char zonename[33]; | |
532 | } ZIP_1; | |
533 | ||
534 | typedef struct { | |
535 | at_net net1; | |
536 | at_net net2; | |
537 | u_char zonename[33]; | |
538 | } ZIP_2; | |
539 | ||
540 | typedef struct { | |
541 | u_char zip_command; /* zip command number */ | |
542 | u_char flags; /* Bit-mapped */ | |
543 | union | |
544 | { | |
545 | ZIP_1 o; /* Packet has one net number */ | |
546 | ZIP_2 r; /* Packet has cable range */ | |
547 | } u; | |
548 | } ZIP_FRAME; | |
549 | ||
550 | /* Flags in the ZIP GetNetInfo & NetInfoReply buffer */ | |
551 | ||
552 | #define ZIPF_BROADCAST 0x80 | |
553 | #define ZIPF_ZONE_INVALID 0x80 | |
554 | #define ZIPF_USE_BROADCAST 0x40 | |
555 | #define ZIPF_ONE_ZONE 0x20 | |
556 | ||
557 | #define ZIP_QUERY 1 /* ZIP Commands in zip frames */ | |
558 | #define ZIP_REPLY 2 | |
559 | #define ZIP_TAKEDOWN 3 | |
560 | #define ZIP_BRINGUP 4 | |
561 | #define ZIP_GETNETINFO 5 | |
562 | #define ZIP_NETINFOREPLY 6 | |
563 | #define ZIP_NOTIFY 7 | |
564 | ||
565 | #define ZIP_GETMYZONE 7 /* ZIP commands in atp user u_chars[0] */ | |
566 | #define ZIP_GETZONELIST 8 | |
567 | #define ZIP_GETLOCALZONES 9 | |
568 | #define ZIP_GETYOURZONE 10 | |
569 | ||
570 | /* | |
571 | * Response to Reponder Request type #1. | |
572 | * | |
573 | * The first 4 u_chars are actually the 4 ATP user u_chars | |
574 | * Following this structure are 4 PASCAL strings: | |
575 | * System Version String. (max 127) | |
576 | * Finder Version String. (max 127) | |
577 | * LaserWriter Version String. (max 127) | |
578 | * AppleShare Version String. (max 24) | |
579 | */ | |
580 | typedef struct | |
581 | { | |
582 | u_char UserU_Chars[2]; | |
583 | ua_short ResponderVersion; | |
584 | ua_short AtalkVersion; | |
585 | u_char ROMVersion; | |
586 | u_char SystemType; | |
587 | u_char SystemClass; | |
588 | u_char HdwrConfig; | |
589 | ua_short ROM85Version; | |
590 | u_char ResponderLevel; | |
591 | u_char ResponderLink; | |
592 | u_char data[1]; | |
593 | } RESPONDER_FRAME; | |
594 | #endif NOT_USED | |
595 | ||
596 | /* | |
597 | * ADSP Frame | |
598 | */ | |
599 | typedef struct { | |
600 | ua_short CID; | |
601 | ua_long pktFirstByteSeq; | |
602 | ua_long pktNextRecvSeq; | |
603 | ua_short pktRecvWdw; | |
604 | u_char descriptor; /* Bit-Mapped */ | |
605 | u_char data[1]; | |
606 | } ADSP_FRAME, *ADSP_FRAMEPtr; | |
607 | ||
608 | #define ADSP_FRAME_LEN 13 | |
609 | ||
610 | #define ADSP_CONTROL_BIT 0x80 | |
611 | #define ADSP_ACK_REQ_BIT 0x40 | |
612 | #define ADSP_EOM_BIT 0x20 | |
613 | #define ADSP_ATTENTION_BIT 0x10 | |
614 | #define ADSP_CONTROL_MASK 0x0F | |
615 | ||
616 | #define ADSP_CTL_PROBE 0x00 /* Probe or acknowledgement */ | |
617 | #define ADSP_CTL_OREQ 0x01 /* Open Connection Request */ | |
618 | #define ADSP_CTL_OACK 0x02 /* Open Request acknowledgment */ | |
619 | #define ADSP_CTL_OREQACK 0x03 /* Open Request and acknowledgement */ | |
620 | #define ADSP_CTL_ODENY 0x04 /* Open Request denial */ | |
621 | #define ADSP_CTL_CLOSE 0x05 /* Close connection advice */ | |
622 | #define ADSP_CTL_FRESET 0x06 /* Forward Reset */ | |
623 | #define ADSP_CTL_FRESET_ACK 0x07 /* Forward Reset Acknowledgement */ | |
624 | #define ADSP_CTL_RETRANSMIT 0x08 /* Retransmit advice */ | |
625 | ||
626 | typedef struct { | |
627 | ua_short version; /* Must be in network byte order */ | |
628 | ua_short dstCID; /* */ | |
629 | ua_long pktAttnRecvSeq; /* Must be in network byte order */ | |
630 | } ADSP_OPEN_DATA, *ADSP_OPEN_DATAPtr; | |
631 | ||
632 | #define ADSP_OPEN_FRAME_LEN 8 | |
633 | ||
634 | #define ADSP_MAX_DATA_LEN 572 | |
635 | ||
636 | /* from h/adsp_ioctl.h */ | |
637 | ||
638 | /* | |
639 | * Defines that correspond to atlog.h in the N & C Appletalk | |
640 | * sources. | |
641 | */ | |
642 | ||
643 | #define AT_MID_ADSP 212 | |
644 | ||
645 | /* Streams ioctl definitions */ | |
646 | ||
647 | #define ADSP_IOCTL(i) ((i>>8) == AT_MID_ADSP) | |
648 | #define ADSPATTNREAD ((AT_MID_ADSP<<8) | 254) /* read attention data */ | |
649 | #define ADSPOPEN ((AT_MID_ADSP<<8) | 253) /* open a connection */ | |
650 | #define ADSPCLOSE ((AT_MID_ADSP<<8) | 252) /* close a connection */ | |
651 | #define ADSPCLINIT ((AT_MID_ADSP<<8) | 251) /* create a conn listener */ | |
652 | #define ADSPCLREMOVE ((AT_MID_ADSP<<8) | 250) /* remove a conn listener */ | |
653 | #define ADSPCLLISTEN ((AT_MID_ADSP<<8) | 249) /* post a listener request */ | |
654 | #define ADSPCLDENY ((AT_MID_ADSP<<8) | 248) /* deny an open connection request */ | |
655 | #define ADSPSTATUS ((AT_MID_ADSP<<8) | 247) /* get status of conn end */ | |
656 | #define ADSPREAD ((AT_MID_ADSP<<8) | 246) /* read data from conn */ | |
657 | #define ADSPWRITE ((AT_MID_ADSP<<8) | 245) /* write data on the conn */ | |
658 | #define ADSPATTENTION ((AT_MID_ADSP<<8) | 244) /* send attention message */ | |
659 | #define ADSPOPTIONS ((AT_MID_ADSP<<8) | 243) /* set conn end options */ | |
660 | #define ADSPRESET ((AT_MID_ADSP<<8) | 242) /* forward reset connection */ | |
661 | #define ADSPNEWCID ((AT_MID_ADSP<<8) | 241) /* generate a cid conn end */ | |
662 | #define ADSPBINDREQ ((AT_MID_ADSP<<8) | 240) | |
663 | #define ADSPGETSOCK ((AT_MID_ADSP<<8) | 239) | |
664 | #define ADSPGETPEER ((AT_MID_ADSP<<8) | 238) | |
665 | ||
666 | #ifdef KERNEL | |
667 | ||
668 | /* from h/adsp_adsp.h */ | |
669 | ||
670 | /* Definitions from strgeneric.h (on AIX?) */ | |
671 | #define STR_IGNORE 0 | |
672 | #define STR_PUTNEXT 1 | |
673 | #define STR_PUTBACK 2 | |
674 | #define STR_QTIME (HZ >> 3) | |
675 | ||
676 | extern int adspInit(); | |
677 | extern int adspOpen(); | |
678 | extern int adspCLListen(); | |
679 | extern int adspClose(); | |
680 | extern int adspCLDeny(); | |
681 | extern int adspStatus(); | |
682 | extern int adspRead(); | |
683 | extern int adspWrite(); | |
684 | extern int adspAttention(); | |
685 | extern int adspOptions(); | |
686 | extern int adspReset(); | |
687 | extern int adspNewCID(); | |
688 | extern int adspPacket(); | |
689 | ||
690 | ||
691 | struct adsp_debug { | |
692 | int ad_time; | |
693 | int ad_seq; | |
694 | int ad_caller; | |
695 | int ad_descriptor; | |
696 | int ad_bits; | |
697 | short ad_sendCnt; | |
698 | short ad_sendMax; | |
699 | int ad_maxSendSeq; | |
700 | int ad_sendWdwSeq; | |
701 | }; | |
702 | ||
703 | #endif | |
704 | #endif /* _NETAT_ADSP_H_ */ |