From c3fdc3326665ce85b40ce683dfcfa3320ea8539c Mon Sep 17 00:00:00 2001 From: Ralf Corsepius Date: Thu, 12 May 2005 12:37:11 +0000 Subject: Update from FreeBSD, add __packed. --- cpukit/libnetworking/net/if_llc.h | 105 +++++++++++++++++++++++--------------- 1 file changed, 63 insertions(+), 42 deletions(-) (limited to 'cpukit/libnetworking') diff --git a/cpukit/libnetworking/net/if_llc.h b/cpukit/libnetworking/net/if_llc.h index 3cdf652167..5923e3abfc 100644 --- a/cpukit/libnetworking/net/if_llc.h +++ b/cpukit/libnetworking/net/if_llc.h @@ -10,10 +10,6 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. @@ -31,12 +27,24 @@ * SUCH DAMAGE. * * @(#)if_llc.h 8.1 (Berkeley) 6/10/93 + * $FreeBSD: src/sys/net/if_llc.h,v 1.11 2005/01/07 01:45:34 imp Exp $ + */ + +/* * $Id$ */ #ifndef _NET_IF_LLC_H_ #define _NET_IF_LLC_H_ +#ifndef __packed +#if defined(__GNUC__) +#define __packed __attribute__((packed)) +#else +#define __packed +#endif +#endif + /* * IEEE 802.2 Link Level Control headers, for use in conjunction with * 802.{3,4,5} media access control methods. @@ -46,55 +54,67 @@ */ struct llc { - u_char llc_dsap; - u_char llc_ssap; + u_int8_t llc_dsap; + u_int8_t llc_ssap; union { struct { - u_char control; - u_char format_id; - u_char class; - u_char window_x2; - } type_u; + u_int8_t control; + u_int8_t format_id; + u_int8_t class; + u_int8_t window_x2; + } type_u __packed; struct { - u_char num_snd_x2; - u_char num_rcv_x2; - } type_i; + u_int8_t num_snd_x2; + u_int8_t num_rcv_x2; + } type_i __packed; struct { - u_char control; - u_char num_rcv_x2; - } type_s; + u_int8_t control; + u_int8_t num_rcv_x2; + } type_s __packed; struct { - u_char control; - struct frmrinfo { - u_char rej_pdu_0; - u_char rej_pdu_1; - u_char frmr_control; - u_char frmr_control_ext; - u_char frmr_cause; - } frmrinfo; - } type_frmr; + u_int8_t control; + /* + * We cannot put the following fields in a structure because + * the structure rounding might cause padding. + */ + u_int8_t frmr_rej_pdu0; + u_int8_t frmr_rej_pdu1; + u_int8_t frmr_control; + u_int8_t frmr_control_ext; + u_int8_t frmr_cause; + } type_frmr __packed; struct { - u_char control; - u_char org_code[3]; - u_short ether_type; - } type_snap; + u_int8_t control; + u_int8_t org_code[3]; + u_int16_t ether_type; + } type_snap __packed; struct { - u_char control; - u_char control_ext; - } type_raw; - } llc_un; -}; + u_int8_t control; + u_int8_t control_ext; + } type_raw __packed; + } llc_un /* XXX __packed ??? */; +} __packed; + +struct frmrinfo { + u_int8_t frmr_rej_pdu0; + u_int8_t frmr_rej_pdu1; + u_int8_t frmr_control; + u_int8_t frmr_control_ext; + u_int8_t frmr_cause; +} __packed; + #define llc_control llc_un.type_u.control #define llc_control_ext llc_un.type_raw.control_ext #define llc_fid llc_un.type_u.format_id #define llc_class llc_un.type_u.class #define llc_window llc_un.type_u.window_x2 -#define llc_frmrinfo llc_un.type_frmr.frmrinfo -#define llc_frmr_pdu0 llc_un.type_frmr.frmrinfo.rej_pdu0 -#define llc_frmr_pdu1 llc_un.type_frmr.frmrinfo.rej_pdu1 -#define llc_frmr_control llc_un.type_frmr.frmrinfo.frmr_control -#define llc_frmr_control_ext llc_un.type_frmr.frmrinfo.frmr_control_ext -#define llc_frmr_cause llc_un.type_frmr.frmrinfo.frmr_control_ext +#define llc_frmrinfo llc_un.type_frmr.frmr_rej_pdu0 +#define llc_frmr_pdu0 llc_un.type_frmr.frmr_rej_pdu0 +#define llc_frmr_pdu1 llc_un.type_frmr.frmr_rej_pdu1 +#define llc_frmr_control llc_un.type_frmr.frmr_control +#define llc_frmr_control_ext llc_un.type_frmr.frmr_control_ext +#define llc_frmr_cause llc_un.type_frmr.frmr_cause +#define llc_snap llc_un.type_snap /* * Don't use sizeof(struct llc_un) for LLC header sizes @@ -102,6 +122,7 @@ struct llc { #define LLC_ISFRAMELEN 4 #define LLC_UFRAMELEN 3 #define LLC_FRMRLEN 7 +#define LLC_SNAPFRAMELEN 8 /* * Unnumbered LLC format commands @@ -142,4 +163,4 @@ struct llc { #define LLC_SNAP_LSAP 0xaa #define LLC_ISO_LSAP 0xfe -#endif +#endif /* _NET_IF_LLC_H_ */ -- cgit v1.2.3