1 /* $NetBSD: ddp.h,v 1.1 1997/04/02 21:31:08 christos Exp $ */ 2 3 /* 4 * Copyright (c) 1990,1991 Regents of The University of Michigan. 5 * All Rights Reserved. 6 * 7 * Permission to use, copy, modify, and distribute this software and 8 * its documentation for any purpose and without fee is hereby granted, 9 * provided that the above copyright notice appears in all copies and 10 * that both that copyright notice and this permission notice appear 11 * in supporting documentation, and that the name of The University 12 * of Michigan not be used in advertising or publicity pertaining to 13 * distribution of the software without specific, written prior 14 * permission. This software is supplied as is without expressed or 15 * implied warranties of any kind. 16 * 17 * This product includes software developed by the University of 18 * California, Berkeley and its contributors. 19 * 20 * Research Systems Unix Group 21 * The University of Michigan 22 * c/o Wesley Craig 23 * 535 W. William Street 24 * Ann Arbor, Michigan 25 * +1-313-764-2278 26 * netatalk@umich.edu 27 */ 28 29 #ifndef _NETATALK_DDP_H_ 30 #define _NETATALK_DDP_H_ 1 31 32 #ifndef BYTE_ORDER 33 #error "Undefined Byte order" 34 #endif 35 36 /* 37 * <-1byte(8bits) -> 38 * +---------------+ 39 * | 0 | hopc |len| 40 * +---------------+ 41 * | len (cont) | 42 * +---------------+ 43 * | | 44 * +- DDP csum -+ 45 * | | 46 * +---------------+ 47 * | | 48 * +- Dest NET -+ 49 * | | 50 * +---------------+ 51 * | | 52 * +- Src NET -+ 53 * | | 54 * +---------------+ 55 * | Dest NODE | 56 * +---------------+ 57 * | Src NODE | 58 * +---------------+ 59 * | Dest PORT | 60 * +---------------+ 61 * | Src PORT | 62 * +---------------+ 63 * 64 * On Apples, there is also a ddp_type field, after src_port. However, 65 * under this unix implementation, user level processes need to be able 66 * to set the ddp_type. In later revisions, the ddp_type may only be 67 * available in a raw_appletalk interface. 68 */ 69 70 struct elaphdr { 71 u_char el_dnode; 72 u_char el_snode; 73 u_char el_type; 74 }; 75 76 #define SZ_ELAPHDR 3 77 78 #define ELAP_DDPSHORT 0x01 79 #define ELAP_DDPEXTEND 0x02 80 81 /* 82 * Extended DDP header. Includes sickness for dealing with arbitrary 83 * bitfields on a little-endian arch. 84 */ 85 struct ddpehdr { 86 union { 87 struct { 88 #if BYTE_ORDER == BIG_ENDIAN 89 unsigned dub_pad:2; 90 unsigned dub_hops:4; 91 unsigned dub_len:10; 92 unsigned dub_sum:16; 93 #endif 94 #if BYTE_ORDER == LITTLE_ENDIAN 95 unsigned dub_sum:16; 96 unsigned dub_len:10; 97 unsigned dub_hops:4; 98 unsigned dub_pad:2; 99 #endif 100 } du_bits; 101 unsigned du_bytes; 102 } deh_u; 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 u_short deh_dnet; 109 u_short deh_snet; 110 u_char deh_dnode; 111 u_char deh_snode; 112 u_char deh_dport; 113 u_char deh_sport; 114 }; 115 116 #define DDP_MAXHOPS 15 117 118 struct ddpshdr { 119 union { 120 struct { 121 #if BYTE_ORDER == BIG_ENDIAN 122 unsigned dub_pad:6; 123 unsigned dub_len:10; 124 unsigned dub_dport:8; 125 unsigned dub_sport:8; 126 #endif 127 #if BYTE_ORDER == LITTLE_ENDIAN 128 unsigned dub_sport:8; 129 unsigned dub_dport:8; 130 unsigned dub_len:10; 131 unsigned dub_pad:6; 132 #endif 133 } du_bits; 134 unsigned du_bytes; 135 } dsh_u; 136 #define dsh_pad dsh_u.du_bits.dub_pad 137 #define dsh_len dsh_u.du_bits.dub_len 138 #define dsh_dport dsh_u.du_bits.dub_dport 139 #define dsh_sport dsh_u.du_bits.dub_sport 140 #define dsh_bytes dsh_u.du_bytes 141 }; 142 143 #endif /* _NETATALK_DDP_H_ */ 144