Merge from vendor branch CVS:
[dragonfly.git] / sys / netproto / atalk / ddp.h
1 /*
2  * Copyright (c) 1990,1991 Regents of The University of Michigan.
3  * All Rights Reserved.
4  *
5  * Permission to use, copy, modify, and distribute this software and
6  * its documentation for any purpose and without fee is hereby granted,
7  * provided that the above copyright notice appears in all copies and
8  * that both that copyright notice and this permission notice appear
9  * in supporting documentation, and that the name of The University
10  * of Michigan not be used in advertising or publicity pertaining to
11  * distribution of the software without specific, written prior
12  * permission. This software is supplied as is without expressed or
13  * implied warranties of any kind.
14  *
15  *      Research Systems Unix Group
16  *      The University of Michigan
17  *      c/o Mike Clark
18  *      535 W. William Street
19  *      Ann Arbor, Michigan
20  *      +1-313-763-0525
21  *      netatalk@itd.umich.edu
22  */
23 #ifndef _NETATALK_DDP_H_
24 #define _NETATALK_DDP_H_ 1
25
26 /*
27  * <-1byte(8bits) ->
28  * +---------------+
29  * | 0 | hopc  |len|
30  * +---------------+
31  * | len (cont)    |
32  * +---------------+
33  * |               |
34  * +- DDP csum    -+
35  * |               |
36  * +---------------+
37  * |               |
38  * +- Dest NET    -+
39  * |               |
40  * +---------------+
41  * |               |
42  * +- Src NET     -+
43  * |               |
44  * +---------------+
45  * | Dest NODE     |
46  * +---------------+
47  * | Src NODE      |
48  * +---------------+
49  * | Dest PORT     |
50  * +---------------+
51  * | Src PORT      |
52  * +---------------+
53  *
54  * On Apples, there is also a ddp_type field, after src_port. However,
55  * under this unix implementation, user level processes need to be able
56  * to set the ddp_type. In later revisions, the ddp_type may only be
57  * available in a raw_appletalk interface.
58  */
59
60 struct elaphdr {
61     u_char      el_dnode;
62     u_char      el_snode;
63     u_char      el_type;
64 };
65
66 #define SZ_ELAPHDR      3
67
68 #define ELAP_DDPSHORT   0x01
69 #define ELAP_DDPEXTEND  0x02
70
71 /*
72  * Extended DDP header. Includes sickness for dealing with arbitrary
73  * bitfields on a little-endian arch.
74  */
75 struct ddpehdr {
76     union {
77         struct {
78 #if BYTE_ORDER == BIG_ENDIAN
79     unsigned            dub_pad:2;
80     unsigned            dub_hops:4;
81     unsigned            dub_len:10;
82     unsigned            dub_sum:16;
83 #endif
84 #if BYTE_ORDER == LITTLE_ENDIAN
85     unsigned            dub_sum:16;
86     unsigned            dub_len:10;
87     unsigned            dub_hops:4;
88     unsigned            dub_pad:2;
89 #endif
90         } du_bits;
91         unsigned        du_bytes;
92     } deh_u;
93 #define deh_pad         deh_u.du_bits.dub_pad
94 #define deh_hops        deh_u.du_bits.dub_hops
95 #define deh_len         deh_u.du_bits.dub_len
96 #define deh_sum         deh_u.du_bits.dub_sum
97 #define deh_bytes       deh_u.du_bytes
98     u_short             deh_dnet;
99     u_short             deh_snet;
100     u_char              deh_dnode;
101     u_char              deh_snode;
102     u_char              deh_dport;
103     u_char              deh_sport;
104 };
105
106 #define DDP_MAXHOPS     15
107
108 struct ddpshdr {
109     union {
110         struct {
111 #if BYTE_ORDER == BIG_ENDIAN
112     unsigned            dub_pad:6;
113     unsigned            dub_len:10;
114     unsigned            dub_dport:8;
115     unsigned            dub_sport:8;
116 #endif
117 #if BYTE_ORDER == LITTLE_ENDIAN
118     unsigned            dub_sport:8;
119     unsigned            dub_dport:8;
120     unsigned            dub_len:10;
121     unsigned            dub_pad:6;
122 #endif
123         } du_bits;
124         unsigned        du_bytes;
125     } dsh_u;
126 #define dsh_pad         dsh_u.du_bits.dub_pad
127 #define dsh_len         dsh_u.du_bits.dub_len
128 #define dsh_dport       dsh_u.du_bits.dub_dport
129 #define dsh_sport       dsh_u.du_bits.dub_sport
130 #define dsh_bytes       dsh_u.du_bytes
131 };
132
133 #endif /* _NETATALK_DDP_H_ */