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