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 24 struct 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 35 struct 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 47 struct 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 74 struct 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 95 struct 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 108 struct atNBP { 109 uint8_t control; 110 uint8_t id; 111 }; 112 113 struct 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 142 struct 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