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 * @(#) $Header: /tcpdump/master/tcpdump/appletalk.h,v 1.16 2004-05-01 09:41:50 hannes Exp $ (LBL)
24 */
25
26struct LAP {
27	u_int8_t	dst;
28	u_int8_t	src;
29	u_int8_t	type;
30};
31#define lapShortDDP	1	/* short DDP type */
32#define lapDDP		2	/* DDP type */
33#define lapKLAP		'K'	/* Kinetics KLAP type */
34
35/* Datagram Delivery Protocol */
36
37struct atDDP {
38	u_int16_t	length;
39	u_int16_t	checksum;
40	u_int16_t	dstNet;
41	u_int16_t	srcNet;
42	u_int8_t	dstNode;
43	u_int8_t	srcNode;
44	u_int8_t	dstSkt;
45	u_int8_t	srcSkt;
46	u_int8_t	type;
47};
48
49struct atShortDDP {
50	u_int16_t	length;
51	u_int8_t	dstSkt;
52	u_int8_t	srcSkt;
53	u_int8_t	type;
54};
55
56#define	ddpMaxWKS	0x7F
57#define	ddpMaxData	586
58#define	ddpLengthMask	0x3FF
59#define	ddpHopShift	10
60#define	ddpSize		13	/* size of DDP header (avoid struct padding) */
61#define	ddpSSize	5
62#define	ddpWKS		128	/* boundary of DDP well known sockets */
63#define	ddpRTMP		1	/* RTMP type */
64#define	ddpRTMPrequest	5	/* RTMP request type */
65#define	ddpNBP		2	/* NBP type */
66#define	ddpATP		3	/* ATP type */
67#define	ddpECHO		4	/* ECHO type */
68#define	ddpIP		22	/* IP type */
69#define	ddpARP		23	/* ARP type */
70#define ddpEIGRP        88      /* EIGRP over Appletalk */
71#define	ddpKLAP		0x4b	/* Kinetics KLAP type */
72
73
74/* AppleTalk Transaction Protocol */
75
76struct atATP {
77	u_int8_t	control;
78	u_int8_t	bitmap;
79	u_int16_t	transID;
80	int32_t userData;
81};
82
83#define	atpReqCode	0x40
84#define	atpRspCode	0x80
85#define	atpRelCode	0xC0
86#define	atpXO		0x20
87#define	atpEOM		0x10
88#define	atpSTS		0x08
89#define	atpFlagMask	0x3F
90#define	atpControlMask	0xF8
91#define	atpMaxNum	8
92#define	atpMaxData	578
93
94
95/* AppleTalk Echo Protocol */
96
97struct atEcho {
98	u_int8_t	echoFunction;
99	u_int8_t	*echoData;
100};
101
102#define echoSkt		4		/* the echoer socket */
103#define echoSize	1		/* size of echo header */
104#define echoRequest	1		/* echo request */
105#define echoReply	2		/* echo request */
106
107
108/* Name Binding Protocol */
109
110struct atNBP {
111	u_int8_t	control;
112	u_int8_t	id;
113};
114
115struct atNBPtuple {
116	u_int16_t	net;
117	u_int8_t	node;
118	u_int8_t	skt;
119	u_int8_t	enumerator;
120};
121
122#define	nbpBrRq		0x10
123#define	nbpLkUp		0x20
124#define	nbpLkUpReply	0x30
125
126#define	nbpNIS		2
127#define	nbpTupleMax	15
128
129#define	nbpHeaderSize	2
130#define nbpTupleSize	5
131
132#define nbpSkt		2		/* NIS */
133
134
135/* Routing Table Maint. Protocol */
136
137#define	rtmpSkt		1	/* number of RTMP socket */
138#define	rtmpSize	4	/* minimum size */
139#define	rtmpTupleSize	3
140
141
142/* Zone Information Protocol */
143
144struct zipHeader {
145	u_int8_t	command;
146	u_int8_t	netcount;
147};
148
149#define	zipHeaderSize	2
150#define	zipQuery	1
151#define	zipReply	2
152#define	zipTakedown	3
153#define	zipBringup	4
154#define	ddpZIP		6
155#define	zipSkt		6
156#define	GetMyZone	7
157#define	GetZoneList	8
158
159/*
160 * UDP port range used for ddp-in-udp encapsulation is 16512-16639
161 * for client sockets (128-255) and 200-327 for server sockets
162 * (0-127).  We also try to recognize the pre-April 88 server
163 * socket range of 768-895.
164 */
165#define atalk_port(p) \
166	(((unsigned)((p) - 16512) < 128) || \
167	 ((unsigned)((p) - 200) < 128) || \
168	 ((unsigned)((p) - 768) < 128))
169