FreeBSD/Linux Kernel Cross Reference
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_ */
Cache object: 77ad26ff5e5c1b34329b7a5fd40e0919
|