xref: /freebsd/contrib/tcpdump/appletalk.h (revision a9e8641da961bcf3d24afc85fd657f2083a872a2)
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 
26 struct 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 
37 struct 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 
49 struct 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 
76 struct 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 
97 struct 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 
110 struct atNBP {
111 	u_int8_t	control;
112 	u_int8_t	id;
113 };
114 
115 struct 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 
144 struct 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