Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/*
2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3 * All rights reserved.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * File: tether.h
20 *
21 * Purpose:
22 *
23 * Author: Tevin Chen
24 *
25 * Date: Jan. 28, 1997
26 *
27 */
28
29#ifndef __TETHER_H__
30#define __TETHER_H__
31
32#include <linux/etherdevice.h>
33#include "ttype.h"
34
35/*--------------------- Export Definitions -------------------------*/
36//
37// constants
38//
39#define U_ETHER_ADDR_STR_LEN (ETH_ALEN * 2 + 1)
40 // Ethernet address string length
41
42#define MAX_LOOKAHEAD_SIZE ETH_FRAME_LEN
43
44#define U_MULTI_ADDR_LEN 8 // multicast address length
45
46
47#ifdef __BIG_ENDIAN
48
49#define TYPE_PKT_IP 0x0800 //
50#define TYPE_PKT_ARP 0x0806 //
51#define TYPE_PKT_RARP 0x8035 //
52#define TYPE_PKT_IPX 0x8137 //
53#define TYPE_PKT_802_1x 0x888e
54#define TYPE_PKT_PreAuth 0x88C7
55
56#define TYPE_PKT_PING_M_REQ 0x8011 // master reguest
57#define TYPE_PKT_PING_S_GNT 0x8022 // slave grant
58#define TYPE_PKT_PING_M 0x8077 // pingpong master packet
59#define TYPE_PKT_PING_S 0x8088 // pingpong slave packet
60#define TYPE_PKT_WOL_M_REQ 0x8033 // WOL waker request
61#define TYPE_PKT_WOL_S_GNT 0x8044 // WOL sleeper grant
62#define TYPE_MGMT_PROBE_RSP 0x5000
63#define TYPE_PKT_VNT_DIAG 0x8011 // Diag Pkt
64#define TYPE_PKT_VNT_PER 0x8888 // Diag PER Pkt
65//
66// wFrameCtl field in the S802_11Header
67//
68// NOTE....
69// in network byte order, high byte is going first
70#define FC_TODS 0x0001
71#define FC_FROMDS 0x0002
72#define FC_MOREFRAG 0x0004
73#define FC_RETRY 0x0008
74#define FC_POWERMGT 0x0010
75#define FC_MOREDATA 0x0020
76#define FC_WEP 0x0040
77#define TYPE_802_11_ATIM 0x9000
78
79#define TYPE_802_11_DATA 0x0800
80#define TYPE_802_11_CTL 0x0400
81#define TYPE_802_11_MGMT 0x0000
82#define TYPE_802_11_MASK 0x0C00
83#define TYPE_SUBTYPE_MASK 0xFC00
84#define TYPE_802_11_NODATA 0x4000
85#define TYPE_DATE_NULL 0x4800
86
87#define TYPE_CTL_PSPOLL 0xa400
88#define TYPE_CTL_RTS 0xb400
89#define TYPE_CTL_CTS 0xc400
90#define TYPE_CTL_ACK 0xd400
91
92
93#else //if LITTLE_ENDIAN
94//
95// wType field in the SEthernetHeader
96//
97// NOTE....
98// in network byte order, high byte is going first
99#define TYPE_PKT_IP 0x0008 //
100#define TYPE_PKT_ARP 0x0608 //
101#define TYPE_PKT_RARP 0x3580 //
102#define TYPE_PKT_IPX 0x3781 //
103
104#define TYPE_PKT_802_1x 0x8e88
105#define TYPE_PKT_PreAuth 0xC788
106
107#define TYPE_PKT_PING_M_REQ 0x1180 // master reguest
108#define TYPE_PKT_PING_S_GNT 0x2280 // slave grant
109#define TYPE_PKT_PING_M 0x7780 // pingpong master packet
110#define TYPE_PKT_PING_S 0x8880 // pingpong slave packet
111#define TYPE_PKT_WOL_M_REQ 0x3380 // WOL waker request
112#define TYPE_PKT_WOL_S_GNT 0x4480 // WOL sleeper grant
113#define TYPE_MGMT_PROBE_RSP 0x0050
114#define TYPE_PKT_VNT_DIAG 0x1180 // Diag Pkt
115#define TYPE_PKT_VNT_PER 0x8888 // Diag PER Pkt
116//
117// wFrameCtl field in the S802_11Header
118//
119// NOTE....
120// in network byte order, high byte is going first
121#define FC_TODS 0x0100
122#define FC_FROMDS 0x0200
123#define FC_MOREFRAG 0x0400
124#define FC_RETRY 0x0800
125#define FC_POWERMGT 0x1000
126#define FC_MOREDATA 0x2000
127#define FC_WEP 0x4000
128#define TYPE_802_11_ATIM 0x0090
129
130#define TYPE_802_11_DATA 0x0008
131#define TYPE_802_11_CTL 0x0004
132#define TYPE_802_11_MGMT 0x0000
133#define TYPE_802_11_MASK 0x000C
134#define TYPE_SUBTYPE_MASK 0x00FC
135#define TYPE_802_11_NODATA 0x0040
136#define TYPE_DATE_NULL 0x0048
137
138#define TYPE_CTL_PSPOLL 0x00a4
139#define TYPE_CTL_RTS 0x00b4
140#define TYPE_CTL_CTS 0x00c4
141#define TYPE_CTL_ACK 0x00d4
142
143
144
145#endif //#ifdef __BIG_ENDIAN
146
147#define WEP_IV_MASK 0x00FFFFFF
148
149/*--------------------- Export Types ------------------------------*/
150//
151// Ethernet packet
152//
153typedef struct tagSEthernetHeader {
154 unsigned char abyDstAddr[ETH_ALEN];
155 unsigned char abySrcAddr[ETH_ALEN];
156 unsigned short wType;
157}__attribute__ ((__packed__))
158SEthernetHeader, *PSEthernetHeader;
159
160
161//
162// 802_3 packet
163//
164typedef struct tagS802_3Header {
165 unsigned char abyDstAddr[ETH_ALEN];
166 unsigned char abySrcAddr[ETH_ALEN];
167 unsigned short wLen;
168}__attribute__ ((__packed__))
169S802_3Header, *PS802_3Header;
170
171//
172// 802_11 packet
173//
174typedef struct tagS802_11Header {
175 unsigned short wFrameCtl;
176 unsigned short wDurationID;
177 unsigned char abyAddr1[ETH_ALEN];
178 unsigned char abyAddr2[ETH_ALEN];
179 unsigned char abyAddr3[ETH_ALEN];
180 unsigned short wSeqCtl;
181 unsigned char abyAddr4[ETH_ALEN];
182}__attribute__ ((__packed__))
183S802_11Header, *PS802_11Header;
184
185/*--------------------- Export Macros ------------------------------*/
186
187/*--------------------- Export Classes ----------------------------*/
188
189/*--------------------- Export Variables --------------------------*/
190
191/*--------------------- Export Functions --------------------------*/
192
193unsigned char ETHbyGetHashIndexByCrc32(unsigned char *pbyMultiAddr);
194//unsigned char ETHbyGetHashIndexByCrc(unsigned char *pbyMultiAddr);
195bool ETHbIsBufferCrc32Ok(unsigned char *pbyBuffer, unsigned int cbFrameLength);
196
197#endif // __TETHER_H__
198
199
200