xref: /netbsd/sys/netatalk/ddp.h (revision bf9ec67e)
1 /*	$NetBSD: ddp.h,v 1.1 1997/04/02 21:31:08 christos 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  * This product includes software developed by the University of
18  * California, Berkeley and its contributors.
19  *
20  *	Research Systems Unix Group
21  *	The University of Michigan
22  *	c/o Wesley Craig
23  *	535 W. William Street
24  *	Ann Arbor, Michigan
25  *	+1-313-764-2278
26  *	netatalk@umich.edu
27  */
28 
29 #ifndef _NETATALK_DDP_H_
30 #define _NETATALK_DDP_H_ 1
31 
32 #ifndef BYTE_ORDER
33   #error "Undefined Byte order"
34 #endif
35 
36 /*
37  * <-1byte(8bits) ->
38  * +---------------+
39  * | 0 | hopc  |len|
40  * +---------------+
41  * | len (cont)    |
42  * +---------------+
43  * |               |
44  * +- DDP csum    -+
45  * |               |
46  * +---------------+
47  * |               |
48  * +- Dest NET    -+
49  * |               |
50  * +---------------+
51  * |               |
52  * +- Src NET     -+
53  * |               |
54  * +---------------+
55  * | Dest NODE     |
56  * +---------------+
57  * | Src NODE      |
58  * +---------------+
59  * | Dest PORT     |
60  * +---------------+
61  * | Src PORT      |
62  * +---------------+
63  *
64  * On Apples, there is also a ddp_type field, after src_port. However,
65  * under this unix implementation, user level processes need to be able
66  * to set the ddp_type. In later revisions, the ddp_type may only be
67  * available in a raw_appletalk interface.
68  */
69 
70 struct elaphdr {
71 	u_char          el_dnode;
72 	u_char          el_snode;
73 	u_char          el_type;
74 };
75 
76 #define	SZ_ELAPHDR	3
77 
78 #define ELAP_DDPSHORT	0x01
79 #define ELAP_DDPEXTEND	0x02
80 
81 /*
82  * Extended DDP header. Includes sickness for dealing with arbitrary
83  * bitfields on a little-endian arch.
84  */
85 struct ddpehdr {
86 	union {
87 		struct {
88 #if BYTE_ORDER == BIG_ENDIAN
89 			unsigned        dub_pad:2;
90 			unsigned        dub_hops:4;
91 			unsigned        dub_len:10;
92 			unsigned        dub_sum:16;
93 #endif
94 #if BYTE_ORDER == LITTLE_ENDIAN
95 			unsigned        dub_sum:16;
96 			unsigned        dub_len:10;
97 			unsigned        dub_hops:4;
98 			unsigned        dub_pad:2;
99 #endif
100 		} 		du_bits;
101 		unsigned        du_bytes;
102 	}               deh_u;
103 #define deh_pad		deh_u.du_bits.dub_pad
104 #define deh_hops	deh_u.du_bits.dub_hops
105 #define deh_len		deh_u.du_bits.dub_len
106 #define deh_sum		deh_u.du_bits.dub_sum
107 #define deh_bytes	deh_u.du_bytes
108 	u_short         deh_dnet;
109 	u_short         deh_snet;
110 	u_char          deh_dnode;
111 	u_char          deh_snode;
112 	u_char          deh_dport;
113 	u_char          deh_sport;
114 };
115 
116 #define DDP_MAXHOPS	15
117 
118 struct ddpshdr {
119 	union {
120 		struct {
121 #if BYTE_ORDER == BIG_ENDIAN
122 			unsigned        dub_pad:6;
123 			unsigned        dub_len:10;
124 			unsigned        dub_dport:8;
125 			unsigned        dub_sport:8;
126 #endif
127 #if BYTE_ORDER == LITTLE_ENDIAN
128 			unsigned        dub_sport:8;
129 			unsigned        dub_dport:8;
130 			unsigned        dub_len:10;
131 			unsigned        dub_pad:6;
132 #endif
133 		}               du_bits;
134 		unsigned        du_bytes;
135 	}               dsh_u;
136 #define dsh_pad		dsh_u.du_bits.dub_pad
137 #define dsh_len		dsh_u.du_bits.dub_len
138 #define dsh_dport	dsh_u.du_bits.dub_dport
139 #define dsh_sport	dsh_u.du_bits.dub_sport
140 #define dsh_bytes	dsh_u.du_bytes
141 };
142 
143 #endif /* _NETATALK_DDP_H_ */
144