if_hippi.h
4.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
* INET An implementation of the TCP/IP protocol suite for the LINUX
* operating system. INET is implemented using the BSD Socket
* interface as the means of communication with the user level.
*
* Global definitions for the HIPPI interface.
*
* Version: @(#)if_hippi.h 1.0.0 05/26/97
*
* Author: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
* Donald Becker, <becker@super.org>
* Alan Cox, <alan@lxorguk.ukuu.org.uk>
* Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk>
* Jes Sorensen, <Jes.Sorensen@cern.ch>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
#ifndef _LINUX_IF_HIPPI_H
#define _LINUX_IF_HIPPI_H
#include <linux/types.h>
#include <asm/byteorder.h>
/*
* HIPPI magic constants.
*/
#define HIPPI_ALEN 6 /* Bytes in one HIPPI hw-addr */
#define HIPPI_HLEN sizeof(struct hippi_hdr)
#define HIPPI_ZLEN 0 /* Min. bytes in frame without FCS */
#define HIPPI_DATA_LEN 65280 /* Max. bytes in payload */
#define HIPPI_FRAME_LEN (HIPPI_DATA_LEN + HIPPI_HLEN)
/* Max. bytes in frame without FCS */
/*
* Define LLC and SNAP constants.
*/
#define HIPPI_EXTENDED_SAP 0xAA
#define HIPPI_UI_CMD 0x03
/*
* Do we need to list some sort of ID's here?
*/
/*
* HIPPI statistics collection data.
*/
struct hipnet_statistics {
int rx_packets; /* total packets received */
int tx_packets; /* total packets transmitted */
int rx_errors; /* bad packets received */
int tx_errors; /* packet transmit problems */
int rx_dropped; /* no space in linux buffers */
int tx_dropped; /* no space available in linux */
/* detailed rx_errors: */
int rx_length_errors;
int rx_over_errors; /* receiver ring buff overflow */
int rx_crc_errors; /* recved pkt with crc error */
int rx_frame_errors; /* recv'd frame alignment error */
int rx_fifo_errors; /* recv'r fifo overrun */
int rx_missed_errors; /* receiver missed packet */
/* detailed tx_errors */
int tx_aborted_errors;
int tx_carrier_errors;
int tx_fifo_errors;
int tx_heartbeat_errors;
int tx_window_errors;
};
struct hippi_fp_hdr {
#if 0
__u8 ulp; /* must contain 4 */
#if defined (__BIG_ENDIAN_BITFIELD)
__u8 d1_data_present:1; /* must be 1 */
__u8 start_d2_burst_boundary:1; /* must be zero */
__u8 reserved:6; /* must be zero */
#if 0
__u16 reserved1:5;
__u16 d1_area_size:8; /* must be 3 */
__u16 d2_offset:3; /* must be zero */
#endif
#elif defined(__LITTLE_ENDIAN_BITFIELD)
__u8 reserved:6; /* must be zero */
__u8 start_d2_burst_boundary:1; /* must be zero */
__u8 d1_data_present:1; /* must be 1 */
#if 0
__u16 d2_offset:3; /* must be zero */
__u16 d1_area_size:8; /* must be 3 */
__u16 reserved1:5; /* must be zero */
#endif
#else
#error "Please fix <asm/byteorder.h>"
#endif
#else
__be32 fixed;
#endif
__be32 d2_size;
} __attribute__((packed));
struct hippi_le_hdr {
#if defined (__BIG_ENDIAN_BITFIELD)
__u8 fc:3;
__u8 double_wide:1;
__u8 message_type:4;
#elif defined(__LITTLE_ENDIAN_BITFIELD)
__u8 message_type:4;
__u8 double_wide:1;
__u8 fc:3;
#endif
__u8 dest_switch_addr[3];
#if defined (__BIG_ENDIAN_BITFIELD)
__u8 dest_addr_type:4,
src_addr_type:4;
#elif defined(__LITTLE_ENDIAN_BITFIELD)
__u8 src_addr_type:4,
dest_addr_type:4;
#endif
__u8 src_switch_addr[3];
__u16 reserved;
__u8 daddr[HIPPI_ALEN];
__u16 locally_administered;
__u8 saddr[HIPPI_ALEN];
} __attribute__((packed));
#define HIPPI_OUI_LEN 3
/*
* Looks like the dsap and ssap fields have been swapped by mistake in
* RFC 2067 "IP over HIPPI".
*/
struct hippi_snap_hdr {
__u8 dsap; /* always 0xAA */
__u8 ssap; /* always 0xAA */
__u8 ctrl; /* always 0x03 */
__u8 oui[HIPPI_OUI_LEN]; /* organizational universal id (zero)*/
__be16 ethertype; /* packet type ID field */
} __attribute__((packed));
struct hippi_hdr {
struct hippi_fp_hdr fp;
struct hippi_le_hdr le;
struct hippi_snap_hdr snap;
} __attribute__((packed));
#endif /* _LINUX_IF_HIPPI_H */