• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/ap/gpl/timemachine/netatalk-2.2.0/sys/netatalk/
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
48struct 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 */
63struct 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
101struct 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 */
128