5bf5cd24de
from toccata.fugue.com. Ported to netbsd by Bill Studenmund. Changes: - KNF - remove endian.h - adapt to the new arp code. - fix small biff's with spl/splx.
144 lines
3.6 KiB
C
144 lines
3.6 KiB
C
/* $NetBSD: ddp.h,v 1.1 1997/04/02 21:31:08 christos Exp $ */
|
|
|
|
/*
|
|
* Copyright (c) 1990,1991 Regents of The University of Michigan.
|
|
* All Rights Reserved.
|
|
*
|
|
* Permission to use, copy, modify, and distribute this software and
|
|
* its documentation for any purpose and without fee is hereby granted,
|
|
* provided that the above copyright notice appears in all copies and
|
|
* that both that copyright notice and this permission notice appear
|
|
* in supporting documentation, and that the name of The University
|
|
* of Michigan not be used in advertising or publicity pertaining to
|
|
* distribution of the software without specific, written prior
|
|
* permission. This software is supplied as is without expressed or
|
|
* implied warranties of any kind.
|
|
*
|
|
* This product includes software developed by the University of
|
|
* California, Berkeley and its contributors.
|
|
*
|
|
* Research Systems Unix Group
|
|
* The University of Michigan
|
|
* c/o Wesley Craig
|
|
* 535 W. William Street
|
|
* Ann Arbor, Michigan
|
|
* +1-313-764-2278
|
|
* netatalk@umich.edu
|
|
*/
|
|
|
|
#ifndef _NETATALK_DDP_H_
|
|
#define _NETATALK_DDP_H_ 1
|
|
|
|
#ifndef BYTE_ORDER
|
|
#error "Undefined Byte order"
|
|
#endif
|
|
|
|
/*
|
|
* <-1byte(8bits) ->
|
|
* +---------------+
|
|
* | 0 | hopc |len|
|
|
* +---------------+
|
|
* | len (cont) |
|
|
* +---------------+
|
|
* | |
|
|
* +- DDP csum -+
|
|
* | |
|
|
* +---------------+
|
|
* | |
|
|
* +- Dest NET -+
|
|
* | |
|
|
* +---------------+
|
|
* | |
|
|
* +- Src NET -+
|
|
* | |
|
|
* +---------------+
|
|
* | Dest NODE |
|
|
* +---------------+
|
|
* | Src NODE |
|
|
* +---------------+
|
|
* | Dest PORT |
|
|
* +---------------+
|
|
* | Src PORT |
|
|
* +---------------+
|
|
*
|
|
* On Apples, there is also a ddp_type field, after src_port. However,
|
|
* under this unix implementation, user level processes need to be able
|
|
* to set the ddp_type. In later revisions, the ddp_type may only be
|
|
* available in a raw_appletalk interface.
|
|
*/
|
|
|
|
struct elaphdr {
|
|
u_char el_dnode;
|
|
u_char el_snode;
|
|
u_char el_type;
|
|
};
|
|
|
|
#define SZ_ELAPHDR 3
|
|
|
|
#define ELAP_DDPSHORT 0x01
|
|
#define ELAP_DDPEXTEND 0x02
|
|
|
|
/*
|
|
* Extended DDP header. Includes sickness for dealing with arbitrary
|
|
* bitfields on a little-endian arch.
|
|
*/
|
|
struct ddpehdr {
|
|
union {
|
|
struct {
|
|
#if BYTE_ORDER == BIG_ENDIAN
|
|
unsigned dub_pad:2;
|
|
unsigned dub_hops:4;
|
|
unsigned dub_len:10;
|
|
unsigned dub_sum:16;
|
|
#endif
|
|
#if BYTE_ORDER == LITTLE_ENDIAN
|
|
unsigned dub_sum:16;
|
|
unsigned dub_len:10;
|
|
unsigned dub_hops:4;
|
|
unsigned dub_pad:2;
|
|
#endif
|
|
} du_bits;
|
|
unsigned du_bytes;
|
|
} deh_u;
|
|
#define deh_pad deh_u.du_bits.dub_pad
|
|
#define deh_hops deh_u.du_bits.dub_hops
|
|
#define deh_len deh_u.du_bits.dub_len
|
|
#define deh_sum deh_u.du_bits.dub_sum
|
|
#define deh_bytes deh_u.du_bytes
|
|
u_short deh_dnet;
|
|
u_short deh_snet;
|
|
u_char deh_dnode;
|
|
u_char deh_snode;
|
|
u_char deh_dport;
|
|
u_char deh_sport;
|
|
};
|
|
|
|
#define DDP_MAXHOPS 15
|
|
|
|
struct ddpshdr {
|
|
union {
|
|
struct {
|
|
#if BYTE_ORDER == BIG_ENDIAN
|
|
unsigned dub_pad:6;
|
|
unsigned dub_len:10;
|
|
unsigned dub_dport:8;
|
|
unsigned dub_sport:8;
|
|
#endif
|
|
#if BYTE_ORDER == LITTLE_ENDIAN
|
|
unsigned dub_sport:8;
|
|
unsigned dub_dport:8;
|
|
unsigned dub_len:10;
|
|
unsigned dub_pad:6;
|
|
#endif
|
|
} du_bits;
|
|
unsigned du_bytes;
|
|
} dsh_u;
|
|
#define dsh_pad dsh_u.du_bits.dub_pad
|
|
#define dsh_len dsh_u.du_bits.dub_len
|
|
#define dsh_dport dsh_u.du_bits.dub_dport
|
|
#define dsh_sport dsh_u.du_bits.dub_sport
|
|
#define dsh_bytes dsh_u.du_bytes
|
|
};
|
|
|
|
#endif /* _NETATALK_DDP_H_ */
|