130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * INET		An implementation of the TCP/IP protocol suite for the LINUX
330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		operating system.  INET is implemented using the  BSD Socket
430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		interface as the means of communication with the user level.
530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		Global definitions for the HIPPI interface.
730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Version:	@(#)if_hippi.h	1.0.0	05/26/97
930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Author:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		Donald Becker, <becker@super.org>
1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		Alan Cox, <alan@lxorguk.ukuu.org.uk>
1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk>
1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		Jes Sorensen, <Jes.Sorensen@cern.ch>
1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		This program is free software; you can redistribute it and/or
1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		modify it under the terms of the GNU General Public License
1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		as published by the Free Software Foundation; either version
1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		2 of the License, or (at your option) any later version.
2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _LINUX_IF_HIPPI_H
2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _LINUX_IF_HIPPI_H
2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h>
2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <asm/byteorder.h>
2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	HIPPI magic constants.
3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define HIPPI_ALEN	6		/* Bytes in one HIPPI hw-addr	   */
3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define HIPPI_HLEN	sizeof(struct hippi_hdr)
3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define HIPPI_ZLEN	0		/* Min. bytes in frame without FCS */
3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define HIPPI_DATA_LEN	65280		/* Max. bytes in payload	   */
3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define HIPPI_FRAME_LEN	(HIPPI_DATA_LEN + HIPPI_HLEN)
3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng					/* Max. bytes in frame without FCS */
3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Define LLC and SNAP constants.
4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define HIPPI_EXTENDED_SAP	0xAA
4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define HIPPI_UI_CMD		0x03
4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	Do we need to list some sort of ID's here?
4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	HIPPI statistics collection data.
5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
5430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct hipnet_statistics {
5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	rx_packets;		/* total packets received	*/
5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	tx_packets;		/* total packets transmitted	*/
5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	rx_errors;		/* bad packets received		*/
5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	tx_errors;		/* packet transmit problems	*/
5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	rx_dropped;		/* no space in linux buffers	*/
6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	tx_dropped;		/* no space available in linux	*/
6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* detailed rx_errors: */
6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	rx_length_errors;
6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	rx_over_errors;		/* receiver ring buff overflow	*/
6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	rx_crc_errors;		/* recved pkt with crc error	*/
6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	rx_frame_errors;	/* recv'd frame alignment error */
6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	rx_fifo_errors;		/* recv'r fifo overrun		*/
6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	rx_missed_errors;	/* receiver missed packet	*/
6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* detailed tx_errors */
7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	tx_aborted_errors;
7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	tx_carrier_errors;
7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	tx_fifo_errors;
7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	tx_heartbeat_errors;
7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	tx_window_errors;
7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
7930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct hippi_fp_hdr {
8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#if 0
8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		ulp;				/* must contain 4 */
8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#if defined (__BIG_ENDIAN_BITFIELD)
8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		d1_data_present:1;		/* must be 1 */
8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		start_d2_burst_boundary:1;	/* must be zero */
8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		reserved:6;			/* must be zero */
8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#if 0
8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16		reserved1:5;
8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16		d1_area_size:8;			/* must be 3 */
8930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16		d2_offset:3;			/* must be zero */
9030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif
9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#elif defined(__LITTLE_ENDIAN_BITFIELD)
9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		reserved:6;			/* must be zero */
9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	 	start_d2_burst_boundary:1;	/* must be zero */
9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		d1_data_present:1;		/* must be 1 */
9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#if 0
9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16		d2_offset:3;			/* must be zero */
9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16		d1_area_size:8;			/* must be 3 */
9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16		reserved1:5;			/* must be zero */
9930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif
10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#else
10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#error	"Please fix <asm/byteorder.h>"
10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif
10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#else
10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be32		fixed;
10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif
10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be32		d2_size;
10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
10930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct hippi_le_hdr {
11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#if defined (__BIG_ENDIAN_BITFIELD)
11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fc:3;
11230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		double_wide:1;
11330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		message_type:4;
11430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#elif defined(__LITTLE_ENDIAN_BITFIELD)
11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		message_type:4;
11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		double_wide:1;
11730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fc:3;
11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif
11930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		dest_switch_addr[3];
12030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#if defined (__BIG_ENDIAN_BITFIELD)
12130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		dest_addr_type:4,
12230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			src_addr_type:4;
12330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#elif defined(__LITTLE_ENDIAN_BITFIELD)
12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		src_addr_type:4,
12530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			dest_addr_type:4;
12630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif
12730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		src_switch_addr[3];
12830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16		reserved;
12930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		daddr[HIPPI_ALEN];
13030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16		locally_administered;
13130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		saddr[HIPPI_ALEN];
13230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
13330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
13430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define HIPPI_OUI_LEN	3
13530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
13630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Looks like the dsap and ssap fields have been swapped by mistake in
13730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * RFC 2067 "IP over HIPPI".
13830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
13930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct hippi_snap_hdr {
14030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	dsap;			/* always 0xAA */
14130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	ssap;			/* always 0xAA */
14230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	ctrl;			/* always 0x03 */
14330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	oui[HIPPI_OUI_LEN];	/* organizational universal id (zero)*/
14430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be16	ethertype;		/* packet type ID field */
14530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
14630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
14730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct hippi_hdr {
14830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct hippi_fp_hdr	fp;
14930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct hippi_le_hdr	le;
15030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct hippi_snap_hdr	snap;
15130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
15230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
15330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif	/* _LINUX_IF_HIPPI_H */
154