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