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