ddp.h revision 15885
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 60struct 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 */ 75struct 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 108struct 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_ */ 134