1/* 2 * Copyright (c) 1988, 1989, 1990, 1993, 1994, 1995, 1996 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that: (1) source code distributions 7 * retain the above copyright notice and this paragraph in its entirety, (2) 8 * distributions including binary code include the above copyright notice and 9 * this paragraph in its entirety in the documentation or other materials 10 * provided with the distribution, and (3) all advertising materials mentioning 11 * features or use of this software display the following acknowledgement: 12 * ``This product includes software developed by the University of California, 13 * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 14 * the University nor the names of its contributors may be used to endorse 15 * or promote products derived from this software without specific prior 16 * written permission. 17 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 18 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 20 * 21 * AppleTalk protocol formats (courtesy Bill Croft of Stanford/SUMEX). 22 */ 23 24struct LAP { 25 uint8_t dst; 26 uint8_t src; 27 uint8_t type; 28}; 29#define lapShortDDP 1 /* short DDP type */ 30#define lapDDP 2 /* DDP type */ 31#define lapKLAP 'K' /* Kinetics KLAP type */ 32 33/* Datagram Delivery Protocol */ 34 35struct atDDP { 36 uint16_t length; 37 uint16_t checksum; 38 uint16_t dstNet; 39 uint16_t srcNet; 40 uint8_t dstNode; 41 uint8_t srcNode; 42 uint8_t dstSkt; 43 uint8_t srcSkt; 44 uint8_t type; 45}; 46 47struct atShortDDP { 48 uint16_t length; 49 uint8_t dstSkt; 50 uint8_t srcSkt; 51 uint8_t type; 52}; 53 54#define ddpMaxWKS 0x7F 55#define ddpMaxData 586 56#define ddpLengthMask 0x3FF 57#define ddpHopShift 10 58#define ddpSize 13 /* size of DDP header (avoid struct padding) */ 59#define ddpSSize 5 60#define ddpWKS 128 /* boundary of DDP well known sockets */ 61#define ddpRTMP 1 /* RTMP type */ 62#define ddpRTMPrequest 5 /* RTMP request type */ 63#define ddpNBP 2 /* NBP type */ 64#define ddpATP 3 /* ATP type */ 65#define ddpECHO 4 /* ECHO type */ 66#define ddpIP 22 /* IP type */ 67#define ddpARP 23 /* ARP type */ 68#define ddpEIGRP 88 /* EIGRP over Appletalk */ 69#define ddpKLAP 0x4b /* Kinetics KLAP type */ 70 71 72/* AppleTalk Transaction Protocol */ 73 74struct atATP { 75 uint8_t control; 76 uint8_t bitmap; 77 uint16_t transID; 78 int32_t userData; 79}; 80 81#define atpReqCode 0x40 82#define atpRspCode 0x80 83#define atpRelCode 0xC0 84#define atpXO 0x20 85#define atpEOM 0x10 86#define atpSTS 0x08 87#define atpFlagMask 0x3F 88#define atpControlMask 0xF8 89#define atpMaxNum 8 90#define atpMaxData 578 91 92 93/* AppleTalk Echo Protocol */ 94 95struct atEcho { 96 uint8_t echoFunction; 97 uint8_t *echoData; 98}; 99 100#define echoSkt 4 /* the echoer socket */ 101#define echoSize 1 /* size of echo header */ 102#define echoRequest 1 /* echo request */ 103#define echoReply 2 /* echo request */ 104 105 106/* Name Binding Protocol */ 107 108struct atNBP { 109 uint8_t control; 110 uint8_t id; 111}; 112 113struct atNBPtuple { 114 uint16_t net; 115 uint8_t node; 116 uint8_t skt; 117 uint8_t enumerator; 118}; 119 120#define nbpBrRq 0x10 121#define nbpLkUp 0x20 122#define nbpLkUpReply 0x30 123 124#define nbpNIS 2 125#define nbpTupleMax 15 126 127#define nbpHeaderSize 2 128#define nbpTupleSize 5 129 130#define nbpSkt 2 /* NIS */ 131 132 133/* Routing Table Maint. Protocol */ 134 135#define rtmpSkt 1 /* number of RTMP socket */ 136#define rtmpSize 4 /* minimum size */ 137#define rtmpTupleSize 3 138 139 140/* Zone Information Protocol */ 141 142struct zipHeader { 143 uint8_t command; 144 uint8_t netcount; 145}; 146 147#define zipHeaderSize 2 148#define zipQuery 1 149#define zipReply 2 150#define zipTakedown 3 151#define zipBringup 4 152#define ddpZIP 6 153#define zipSkt 6 154#define GetMyZone 7 155#define GetZoneList 8 156 157/* 158 * UDP port range used for ddp-in-udp encapsulation is 16512-16639 159 * for client sockets (128-255) and 200-327 for server sockets 160 * (0-127). We also try to recognize the pre-April 88 server 161 * socket range of 768-895. 162 */ 163#define atalk_port(p) \ 164 (((unsigned)((p) - 16512) < 128) || \ 165 ((unsigned)((p) - 200) < 128) || \ 166 ((unsigned)((p) - 768) < 128)) 167