]> arthur.barton.de Git - netatalk.git/blob - sys/netatalk/ddp.h
Remove bdb env on exit
[netatalk.git] / sys / netatalk / ddp.h
1 /*
2  * $Id: ddp.h,v 1.2 2001-06-29 14:14:47 rufustfirefly Exp $
3  *
4  * Copyright (c) 1990,1991 Regents of The University of Michigan.
5  * All Rights Reserved. See COPYRIGHT.
6  *
7  */
8
9 /*
10  * <-1byte(8bits) ->
11  * +---------------+
12  * | 0 | hopc  |len|
13  * +---------------+
14  * | len (cont)    |
15  * +---------------+
16  * |               |
17  * +- DDP csum    -+
18  * |               |
19  * +---------------+
20  * |               |
21  * +- Dest NET    -+
22  * |               |
23  * +---------------+
24  * |               |
25  * +- Src NET     -+
26  * |               |
27  * +---------------+
28  * | Dest NODE     |
29  * +---------------+
30  * | Src NODE      |
31  * +---------------+
32  * | Dest PORT     |
33  * +---------------+
34  * | Src PORT      |
35  * +---------------+
36  *
37  * On Apples, there is also a ddp_type field, after src_port. However,
38  * under this unix implementation, user level processes need to be able
39  * to set the ddp_type. In later revisions, the ddp_type may only be
40  * available in a raw_appletalk interface.
41  */
42
43 #ifndef _NETATALK_DDP_H
44 #define _NETATALK_DDP_H 1
45
46 #include <netatalk/endian.h>
47
48 struct elaphdr {
49     u_char      el_dnode;
50     u_char      el_snode;
51     u_char      el_type;
52 };
53
54 #define SZ_ELAPHDR      3
55
56 #define ELAP_DDPSHORT   0x01
57 #define ELAP_DDPEXTEND  0x02
58
59 /*
60  * Extended DDP header. Includes sickness for dealing with arbitrary
61  * bitfields on a little-endian arch.
62  */
63 struct ddpehdr {
64     union {
65         struct {
66 #if BYTE_ORDER == BIG_ENDIAN
67     unsigned            dub_pad:2;
68     unsigned            dub_hops:4;
69     unsigned            dub_len:10;
70     unsigned            dub_sum:16;
71 #else /* BYTE_ORDER == BIG_ENDIAN */
72 #if BYTE_ORDER == LITTLE_ENDIAN
73     unsigned            dub_sum:16;
74     unsigned            dub_len:10;
75     unsigned            dub_hops:4;
76     unsigned            dub_pad:2;
77 #else /* BYTE_ORDER == LITTLE_ENDIAN */
78     OOPS!
79 #endif /* BYTE_ORDER == LITTLE_ENDIAN */
80 #endif /* BYTE_ORDER == BIG_ENDIAN */
81         } du_bits;
82         unsigned        du_bytes;
83     } deh_u;
84 #define deh_pad         deh_u.du_bits.dub_pad
85 #define deh_hops        deh_u.du_bits.dub_hops
86 #define deh_len         deh_u.du_bits.dub_len
87 #define deh_sum         deh_u.du_bits.dub_sum
88 #define deh_bytes       deh_u.du_bytes
89     u_short             deh_dnet;
90     u_short             deh_snet;
91     u_char              deh_dnode;
92     u_char              deh_snode;
93     u_char              deh_dport;
94     u_char              deh_sport;
95 };
96
97 #define SZ_DDPEHDR      12
98
99 #define DDP_MAXHOPS     15
100
101 struct ddpshdr {
102     union {
103         struct {
104 #if BYTE_ORDER == BIG_ENDIAN
105     unsigned            dub_pad:6;
106     unsigned            dub_len:10;
107     unsigned            dub_dport:8;
108     unsigned            dub_sport:8;
109 #endif /* BYTE_ORDER == BIG_ENDIAN */
110 #if BYTE_ORDER == LITTLE_ENDIAN
111     unsigned            dub_sport:8;
112     unsigned            dub_dport:8;
113     unsigned            dub_len:10;
114     unsigned            dub_pad:6;
115 #endif /* BYTE_ORDER == LITTLE_ENDIAN */
116         } du_bits;
117         unsigned        du_bytes;
118     } dsh_u;
119 #define dsh_pad         dsh_u.du_bits.dub_pad
120 #define dsh_len         dsh_u.du_bits.dub_len
121 #define dsh_dport       dsh_u.du_bits.dub_dport
122 #define dsh_sport       dsh_u.du_bits.dub_sport
123 #define dsh_bytes       dsh_u.du_bytes
124 };
125 #define SZ_DDPSHDR      4
126
127 #endif /* netatalk/ddp.h */