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