1 | /* $NetBSD: ddp.h,v 1.2 2005/12/10 23:29:05 elad 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_ |
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 | |