1 /*	$OpenBSD: ddp.h,v 1.1 1997/07/23 03:39:53 denny 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		dub_pad:2;
129     unsigned		dub_hops:4;
130     unsigned		dub_len:10;
131     unsigned		dub_sum:16;
132 #endif
133 #if BYTE_ORDER == LITTLE_ENDIAN
134     unsigned		dub_sum:16;
135     unsigned		dub_len:10;
136     unsigned		dub_hops:4;
137     unsigned		dub_pad:2;
138 #endif
139 	} du_bits;
140 	unsigned	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		dub_pad:6;
162     unsigned		dub_len:10;
163     unsigned		dub_dport:8;
164     unsigned		dub_sport:8;
165 #endif
166 #if BYTE_ORDER == LITTLE_ENDIAN
167     unsigned		dub_sport:8;
168     unsigned		dub_dport:8;
169     unsigned		dub_len:10;
170     unsigned		dub_pad:6;
171 #endif
172 	} du_bits;
173 	unsigned	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_ */
182