141c99275SPeter Avalos /* 241c99275SPeter Avalos * Copyright (c) 1988, 1989, 1990, 1993, 1994, 1995, 1996 341c99275SPeter Avalos * The Regents of the University of California. All rights reserved. 441c99275SPeter Avalos * 541c99275SPeter Avalos * Redistribution and use in source and binary forms, with or without 641c99275SPeter Avalos * modification, are permitted provided that: (1) source code distributions 741c99275SPeter Avalos * retain the above copyright notice and this paragraph in its entirety, (2) 841c99275SPeter Avalos * distributions including binary code include the above copyright notice and 941c99275SPeter Avalos * this paragraph in its entirety in the documentation or other materials 1041c99275SPeter Avalos * provided with the distribution, and (3) all advertising materials mentioning 1141c99275SPeter Avalos * features or use of this software display the following acknowledgement: 1241c99275SPeter Avalos * ``This product includes software developed by the University of California, 1341c99275SPeter Avalos * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 1441c99275SPeter Avalos * the University nor the names of its contributors may be used to endorse 1541c99275SPeter Avalos * or promote products derived from this software without specific prior 1641c99275SPeter Avalos * written permission. 1741c99275SPeter Avalos * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 1841c99275SPeter Avalos * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 1941c99275SPeter Avalos * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 2041c99275SPeter Avalos * 2141c99275SPeter Avalos * AppleTalk protocol formats (courtesy Bill Croft of Stanford/SUMEX). 2241c99275SPeter Avalos */ 2341c99275SPeter Avalos 2441c99275SPeter Avalos struct LAP { 25*ed775ee7SAntonio Huete Jimenez nd_uint8_t dst; 26*ed775ee7SAntonio Huete Jimenez nd_uint8_t src; 27*ed775ee7SAntonio Huete Jimenez nd_uint8_t type; 2841c99275SPeter Avalos }; 2941c99275SPeter Avalos #define lapShortDDP 1 /* short DDP type */ 3041c99275SPeter Avalos #define lapDDP 2 /* DDP type */ 3141c99275SPeter Avalos #define lapKLAP 'K' /* Kinetics KLAP type */ 3241c99275SPeter Avalos 3341c99275SPeter Avalos /* Datagram Delivery Protocol */ 3441c99275SPeter Avalos 3541c99275SPeter Avalos struct atDDP { 36*ed775ee7SAntonio Huete Jimenez nd_uint16_t length; 37*ed775ee7SAntonio Huete Jimenez nd_uint16_t checksum; 38*ed775ee7SAntonio Huete Jimenez nd_uint16_t dstNet; 39*ed775ee7SAntonio Huete Jimenez nd_uint16_t srcNet; 40*ed775ee7SAntonio Huete Jimenez nd_uint8_t dstNode; 41*ed775ee7SAntonio Huete Jimenez nd_uint8_t srcNode; 42*ed775ee7SAntonio Huete Jimenez nd_uint8_t dstSkt; 43*ed775ee7SAntonio Huete Jimenez nd_uint8_t srcSkt; 44*ed775ee7SAntonio Huete Jimenez nd_uint8_t type; 4541c99275SPeter Avalos }; 4641c99275SPeter Avalos 4741c99275SPeter Avalos struct atShortDDP { 48*ed775ee7SAntonio Huete Jimenez nd_uint16_t length; 49*ed775ee7SAntonio Huete Jimenez nd_uint8_t dstSkt; 50*ed775ee7SAntonio Huete Jimenez nd_uint8_t srcSkt; 51*ed775ee7SAntonio Huete Jimenez nd_uint8_t type; 5241c99275SPeter Avalos }; 5341c99275SPeter Avalos 5441c99275SPeter Avalos #define ddpMaxWKS 0x7F 5541c99275SPeter Avalos #define ddpMaxData 586 5641c99275SPeter Avalos #define ddpLengthMask 0x3FF 5741c99275SPeter Avalos #define ddpHopShift 10 5841c99275SPeter Avalos #define ddpSize 13 /* size of DDP header (avoid struct padding) */ 5941c99275SPeter Avalos #define ddpSSize 5 6041c99275SPeter Avalos #define ddpWKS 128 /* boundary of DDP well known sockets */ 6141c99275SPeter Avalos #define ddpRTMP 1 /* RTMP type */ 6241c99275SPeter Avalos #define ddpRTMPrequest 5 /* RTMP request type */ 6341c99275SPeter Avalos #define ddpNBP 2 /* NBP type */ 6441c99275SPeter Avalos #define ddpATP 3 /* ATP type */ 6541c99275SPeter Avalos #define ddpECHO 4 /* ECHO type */ 6641c99275SPeter Avalos #define ddpIP 22 /* IP type */ 6741c99275SPeter Avalos #define ddpARP 23 /* ARP type */ 6841c99275SPeter Avalos #define ddpEIGRP 88 /* EIGRP over Appletalk */ 6941c99275SPeter Avalos #define ddpKLAP 0x4b /* Kinetics KLAP type */ 7041c99275SPeter Avalos 7141c99275SPeter Avalos 7241c99275SPeter Avalos /* AppleTalk Transaction Protocol */ 7341c99275SPeter Avalos 7441c99275SPeter Avalos struct atATP { 75*ed775ee7SAntonio Huete Jimenez nd_uint8_t control; 76*ed775ee7SAntonio Huete Jimenez nd_uint8_t bitmap; 77*ed775ee7SAntonio Huete Jimenez nd_uint16_t transID; 78*ed775ee7SAntonio Huete Jimenez nd_uint32_t userData; 7941c99275SPeter Avalos }; 8041c99275SPeter Avalos 8141c99275SPeter Avalos #define atpReqCode 0x40 8241c99275SPeter Avalos #define atpRspCode 0x80 8341c99275SPeter Avalos #define atpRelCode 0xC0 8441c99275SPeter Avalos #define atpXO 0x20 8541c99275SPeter Avalos #define atpEOM 0x10 8641c99275SPeter Avalos #define atpSTS 0x08 8741c99275SPeter Avalos #define atpFlagMask 0x3F 8841c99275SPeter Avalos #define atpControlMask 0xF8 8941c99275SPeter Avalos #define atpMaxNum 8 9041c99275SPeter Avalos #define atpMaxData 578 9141c99275SPeter Avalos 9241c99275SPeter Avalos 9341c99275SPeter Avalos /* AppleTalk Echo Protocol */ 9441c99275SPeter Avalos 9541c99275SPeter Avalos struct atEcho { 96*ed775ee7SAntonio Huete Jimenez nd_uint8_t echoFunction; 97*ed775ee7SAntonio Huete Jimenez nd_uint8_t echoData[1]; /* Should be [], C99-style */ 9841c99275SPeter Avalos }; 9941c99275SPeter Avalos 10041c99275SPeter Avalos #define echoSkt 4 /* the echoer socket */ 10141c99275SPeter Avalos #define echoSize 1 /* size of echo header */ 10241c99275SPeter Avalos #define echoRequest 1 /* echo request */ 10341c99275SPeter Avalos #define echoReply 2 /* echo request */ 10441c99275SPeter Avalos 10541c99275SPeter Avalos 10641c99275SPeter Avalos /* Name Binding Protocol */ 10741c99275SPeter Avalos 10841c99275SPeter Avalos struct atNBP { 109*ed775ee7SAntonio Huete Jimenez nd_uint8_t control; 110*ed775ee7SAntonio Huete Jimenez nd_uint8_t id; 11141c99275SPeter Avalos }; 11241c99275SPeter Avalos 11341c99275SPeter Avalos struct atNBPtuple { 114*ed775ee7SAntonio Huete Jimenez nd_uint16_t net; 115*ed775ee7SAntonio Huete Jimenez nd_uint8_t node; 116*ed775ee7SAntonio Huete Jimenez nd_uint8_t skt; 117*ed775ee7SAntonio Huete Jimenez nd_uint8_t enumerator; 11841c99275SPeter Avalos }; 11941c99275SPeter Avalos 12041c99275SPeter Avalos #define nbpBrRq 0x10 12141c99275SPeter Avalos #define nbpLkUp 0x20 12241c99275SPeter Avalos #define nbpLkUpReply 0x30 12341c99275SPeter Avalos 12441c99275SPeter Avalos #define nbpNIS 2 12541c99275SPeter Avalos #define nbpTupleMax 15 12641c99275SPeter Avalos 12741c99275SPeter Avalos #define nbpHeaderSize 2 12841c99275SPeter Avalos #define nbpTupleSize 5 12941c99275SPeter Avalos 13041c99275SPeter Avalos #define nbpSkt 2 /* NIS */ 13141c99275SPeter Avalos 13241c99275SPeter Avalos 13341c99275SPeter Avalos /* Routing Table Maint. Protocol */ 13441c99275SPeter Avalos 13541c99275SPeter Avalos #define rtmpSkt 1 /* number of RTMP socket */ 13641c99275SPeter Avalos #define rtmpSize 4 /* minimum size */ 13741c99275SPeter Avalos #define rtmpTupleSize 3 13841c99275SPeter Avalos 13941c99275SPeter Avalos 14041c99275SPeter Avalos /* Zone Information Protocol */ 14141c99275SPeter Avalos 14241c99275SPeter Avalos struct zipHeader { 143*ed775ee7SAntonio Huete Jimenez nd_uint8_t command; 144*ed775ee7SAntonio Huete Jimenez nd_uint8_t netcount; 14541c99275SPeter Avalos }; 14641c99275SPeter Avalos 14741c99275SPeter Avalos #define zipHeaderSize 2 14841c99275SPeter Avalos #define zipQuery 1 14941c99275SPeter Avalos #define zipReply 2 15041c99275SPeter Avalos #define zipTakedown 3 15141c99275SPeter Avalos #define zipBringup 4 15241c99275SPeter Avalos #define ddpZIP 6 15341c99275SPeter Avalos #define zipSkt 6 15441c99275SPeter Avalos #define GetMyZone 7 15541c99275SPeter Avalos #define GetZoneList 8 15641c99275SPeter Avalos 15741c99275SPeter Avalos /* 15841c99275SPeter Avalos * UDP port range used for ddp-in-udp encapsulation is 16512-16639 15941c99275SPeter Avalos * for client sockets (128-255) and 200-327 for server sockets 16041c99275SPeter Avalos * (0-127). We also try to recognize the pre-April 88 server 16141c99275SPeter Avalos * socket range of 768-895. 16241c99275SPeter Avalos */ 16341c99275SPeter Avalos #define atalk_port(p) \ 16441c99275SPeter Avalos (((unsigned)((p) - 16512) < 128) || \ 16541c99275SPeter Avalos ((unsigned)((p) - 200) < 128) || \ 16641c99275SPeter Avalos ((unsigned)((p) - 768) < 128)) 167