1 /* $OpenBSD: ddp.h,v 1.2 2005/12/11 17:21:53 deraadt Exp $ */
2
3 /*
4 * Copyright (c) 1990,1991 Regents of The University of Michigan.
5 * All Rights Reserved.
6 *
7 * Permission to use, copy, modify, and distribute this software and
8 * its documentation for any purpose and without fee is hereby granted,
9 * provided that the above copyright notice appears in all copies and
10 * that both that copyright notice and this permission notice appear
11 * in supporting documentation, and that the name of The University
12 * of Michigan not be used in advertising or publicity pertaining to
13 * distribution of the software without specific, written prior
14 * permission. This software is supplied as is without expressed or
15 * implied warranties of any kind.
16 *
17 * Research Systems Unix Group
18 * The University of Michigan
19 * c/o Mike Clark
20 * 535 W. William Street
21 * Ann Arbor, Michigan
22 * +1-313-763-0525
23 * netatalk@itd.umich.edu
24 */
25
26 /*
27 * The following is the contents of the COPYRIGHT file from the
28 * netatalk-1.4a2 distribution, from which this file is derived.
29 */
30 /*
31 * Copyright (c) 1990,1996 Regents of The University of Michigan.
32 *
33 * All Rights Reserved.
34 *
35 * Permission to use, copy, modify, and distribute this software and
36 * its documentation for any purpose and without fee is hereby granted,
37 * provided that the above copyright notice appears in all copies and
38 * that both that copyright notice and this permission notice appear
39 * in supporting documentation, and that the name of The University
40 * of Michigan not be used in advertising or publicity pertaining to
41 * distribution of the software without specific, written prior
42 * permission. This software is supplied as is without expressed or
43 * implied warranties of any kind.
44 *
45 * This product includes software developed by the University of
46 * California, Berkeley and its contributors.
47 *
48 * Solaris code is encumbered by the following:
49 *
50 * Copyright (C) 1996 by Sun Microsystems Computer Co.
51 *
52 * Permission to use, copy, modify, and distribute this software and
53 * its documentation for any purpose and without fee is hereby
54 * granted, provided that the above copyright notice appear in all
55 * copies and that both that copyright notice and this permission
56 * notice appear in supporting documentation. This software is
57 * provided "as is" without express or implied warranty.
58 *
59 * Research Systems Unix Group
60 * The University of Michigan
61 * c/o Wesley Craig
62 * 535 W. William Street
63 * Ann Arbor, Michigan
64 * +1-313-764-2278
65 * netatalk@umich.edu
66 */
67 /*
68 * None of the Solaris code mentioned is included in OpenBSD.
69 * This code also relies heavily on previous effort in FreeBSD and NetBSD.
70 */
71
72 #ifndef _NETATALK_DDP_H_
73 #define _NETATALK_DDP_H_ 1
74
75 /*
76 * <-1byte(8bits) ->
77 * +---------------+
78 * | 0 | hopc |len|
79 * +---------------+
80 * | len (cont) |
81 * +---------------+
82 * | |
83 * +- DDP csum -+
84 * | |
85 * +---------------+
86 * | |
87 * +- Dest NET -+
88 * | |
89 * +---------------+
90 * | |
91 * +- Src NET -+
92 * | |
93 * +---------------+
94 * | Dest NODE |
95 * +---------------+
96 * | Src NODE |
97 * +---------------+
98 * | Dest PORT |
99 * +---------------+
100 * | Src PORT |
101 * +---------------+
102 *
103 * On Apples, there is also a ddp_type field, after src_port. However,
104 * under this unix implementation, user level processes need to be able
105 * to set the ddp_type. In later revisions, the ddp_type may only be
106 * available in a raw_appletalk interface.
107 */
108
109 struct elaphdr {
110 u_char el_dnode;
111 u_char el_snode;
112 u_char el_type;
113 };
114
115 #define SZ_ELAPHDR 3
116
117 #define ELAP_DDPSHORT 0x01
118 #define ELAP_DDPEXTEND 0x02
119
120 /*
121 * Extended DDP header. Includes sickness for dealing with arbitrary
122 * bitfields on a little-endian arch.
123 */
124 struct ddpehdr {
125 union {
126 struct {
127 #if BYTE_ORDER == BIG_ENDIAN
128 unsigned int dub_pad:2;
129 unsigned int dub_hops:4;
130 unsigned int dub_len:10;
131 unsigned int dub_sum:16;
132 #endif
133 #if BYTE_ORDER == LITTLE_ENDIAN
134 unsigned int dub_sum:16;
135 unsigned int dub_len:10;
136 unsigned int dub_hops:4;
137 unsigned int dub_pad:2;
138 #endif
139 } du_bits;
140 unsigned int du_bytes;
141 } deh_u;
142 #define deh_pad deh_u.du_bits.dub_pad
143 #define deh_hops deh_u.du_bits.dub_hops
144 #define deh_len deh_u.du_bits.dub_len
145 #define deh_sum deh_u.du_bits.dub_sum
146 #define deh_bytes deh_u.du_bytes
147 u_short deh_dnet;
148 u_short deh_snet;
149 u_char deh_dnode;
150 u_char deh_snode;
151 u_char deh_dport;
152 u_char deh_sport;
153 };
154
155 #define DDP_MAXHOPS 15
156
157 struct ddpshdr {
158 union {
159 struct {
160 #if BYTE_ORDER == BIG_ENDIAN
161 unsigned int dub_pad:6;
162 unsigned int dub_len:10;
163 unsigned int dub_dport:8;
164 unsigned int dub_sport:8;
165 #endif
166 #if BYTE_ORDER == LITTLE_ENDIAN
167 unsigned int dub_sport:8;
168 unsigned int dub_dport:8;
169 unsigned int dub_len:10;
170 unsigned int dub_pad:6;
171 #endif
172 } du_bits;
173 unsigned int du_bytes;
174 } dsh_u;
175 #define dsh_pad dsh_u.du_bits.dub_pad
176 #define dsh_len dsh_u.du_bits.dub_len
177 #define dsh_dport dsh_u.du_bits.dub_dport
178 #define dsh_sport dsh_u.du_bits.dub_sport
179 #define dsh_bytes dsh_u.du_bytes
180 };
181 #endif /* _NETATALK_DDP_H_ */