]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - sys/netatalk/ddp.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / sys / netatalk / 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  * $FreeBSD$
24  */
25
26 #ifndef _NETATALK_DDP_H_
27 #define _NETATALK_DDP_H_
28
29 /*-
30  * <-1byte(8bits) ->
31  * +---------------+
32  * | 0 | hopc  |len|
33  * +---------------+
34  * | len (cont)    |
35  * +---------------+
36  * |               |
37  * +- DDP csum    -+
38  * |               |
39  * +---------------+
40  * |               |
41  * +- Dest NET    -+
42  * |               |
43  * +---------------+
44  * |               |
45  * +- Src NET     -+
46  * |               |
47  * +---------------+
48  * | Dest NODE     |
49  * +---------------+
50  * | Src NODE      |
51  * +---------------+
52  * | Dest PORT     |
53  * +---------------+
54  * | Src PORT      |
55  * +---------------+
56  *
57  * On Apples, there is also a ddp_type field, after src_port.  However, under
58  * this unix implementation, user level processes need to be able to set the
59  * ddp_type.  In later revisions, the ddp_type may only be available in a
60  * raw_appletalk interface.
61  */
62
63 struct elaphdr {
64         u_char  el_dnode;
65         u_char  el_snode;
66         u_char  el_type;
67 } __packed;
68
69 #define SZ_ELAPHDR      3
70
71 #define ELAP_DDPSHORT   0x01
72 #define ELAP_DDPEXTEND  0x02
73
74 /*
75  * Extended DDP header. Includes sickness for dealing with arbitrary
76  * bitfields on a little-endian arch.
77  */
78 struct ddpehdr {
79         union {
80                 struct {
81 #if BYTE_ORDER == BIG_ENDIAN
82                         unsigned        dub_pad:2;
83                         unsigned        dub_hops:4;
84                         unsigned        dub_len:10;
85                         unsigned        dub_sum:16;
86 #endif
87 #if BYTE_ORDER == LITTLE_ENDIAN
88                         unsigned        dub_sum:16;
89                         unsigned        dub_len:10;
90                         unsigned        dub_hops:4;
91                         unsigned        dub_pad:2;
92 #endif
93                 } __packed du_bits;
94                 unsigned        du_bytes;
95         } deh_u;
96         u_short deh_dnet;
97         u_short deh_snet;
98         u_char  deh_dnode;
99         u_char  deh_snode;
100         u_char  deh_dport;
101         u_char  deh_sport;
102 } __packed;
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
109 #define DDP_MAXHOPS     15
110
111 struct ddpshdr {
112         union {
113                 struct {
114 #if BYTE_ORDER == BIG_ENDIAN
115                         unsigned        dub_pad:6;
116                         unsigned        dub_len:10;
117                         unsigned        dub_dport:8;
118                         unsigned        dub_sport:8;
119 #endif
120 #if BYTE_ORDER == LITTLE_ENDIAN
121                         unsigned        dub_sport:8;
122                         unsigned        dub_dport:8;
123                         unsigned        dub_len:10;
124                         unsigned        dub_pad:6;
125 #endif
126                 } __packed du_bits;
127                 unsigned        du_bytes;
128         } dsh_u;
129 } __packed;
130
131 #define dsh_pad         dsh_u.du_bits.dub_pad
132 #define dsh_len         dsh_u.du_bits.dub_len
133 #define dsh_dport       dsh_u.du_bits.dub_dport
134 #define dsh_sport       dsh_u.du_bits.dub_sport
135 #define dsh_bytes       dsh_u.du_bytes
136
137 #endif /* _NETATALK_DDP_H_ */