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