|
|
1.1 root 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_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.