29
29
#ifndef __TETHER_H__
30
30
#define __TETHER_H__
32
#include <linux/etherdevice.h>
34
35
/*--------------------- Export Definitions -------------------------*/
38
#define U_ETHER_ADDR_LEN 6 // Ethernet address length
39
#define U_TYPE_LEN 2 //
40
#define U_CRC_LEN 4 //
41
#define U_HEADER_LEN (U_ETHER_ADDR_LEN * 2 + U_TYPE_LEN)
42
#define U_ETHER_ADDR_STR_LEN (U_ETHER_ADDR_LEN * 2 + 1)
39
#define U_ETHER_ADDR_STR_LEN (ETH_ALEN * 2 + 1)
43
40
// Ethernet address string length
45
#define MIN_DATA_LEN 46 // min data length
46
#define MAX_DATA_LEN 1500 // max data length
48
#define MIN_PACKET_LEN (MIN_DATA_LEN + U_HEADER_LEN)
50
// min total packet length (tx)
51
#define MAX_PACKET_LEN (MAX_DATA_LEN + U_HEADER_LEN)
53
// max total packet length (tx)
55
#define MAX_LOOKAHEAD_SIZE MAX_PACKET_LEN
42
#define MAX_LOOKAHEAD_SIZE ETH_FRAME_LEN
57
44
#define U_MULTI_ADDR_LEN 8 // multicast address length
167
154
// Ethernet packet
169
156
typedef struct tagSEthernetHeader {
170
BYTE abyDstAddr[U_ETHER_ADDR_LEN];
171
BYTE abySrcAddr[U_ETHER_ADDR_LEN];
157
unsigned char abyDstAddr[ETH_ALEN];
158
unsigned char abySrcAddr[ETH_ALEN];
159
unsigned short wType;
173
160
}__attribute__ ((__packed__))
174
161
SEthernetHeader, *PSEthernetHeader;
180
167
typedef struct tagS802_3Header {
181
BYTE abyDstAddr[U_ETHER_ADDR_LEN];
182
BYTE abySrcAddr[U_ETHER_ADDR_LEN];
168
unsigned char abyDstAddr[ETH_ALEN];
169
unsigned char abySrcAddr[ETH_ALEN];
184
171
}__attribute__ ((__packed__))
185
172
S802_3Header, *PS802_3Header;
190
177
typedef struct tagS802_11Header {
193
BYTE abyAddr1[U_ETHER_ADDR_LEN];
194
BYTE abyAddr2[U_ETHER_ADDR_LEN];
195
BYTE abyAddr3[U_ETHER_ADDR_LEN];
197
BYTE abyAddr4[U_ETHER_ADDR_LEN];
178
unsigned short wFrameCtl;
179
unsigned short wDurationID;
180
unsigned char abyAddr1[ETH_ALEN];
181
unsigned char abyAddr2[ETH_ALEN];
182
unsigned char abyAddr3[ETH_ALEN];
183
unsigned short wSeqCtl;
184
unsigned char abyAddr4[ETH_ALEN];
198
185
}__attribute__ ((__packed__))
199
186
S802_11Header, *PS802_11Header;
201
188
/*--------------------- Export Macros ------------------------------*/
204
#define IS_MULTICAST_ADDRESS(pbyEtherAddr) \
205
((*(PBYTE)(pbyEtherAddr) & 0x01) == 1)
207
#define IS_BROADCAST_ADDRESS(pbyEtherAddr) ( \
208
(*(PDWORD)(pbyEtherAddr) == 0xFFFFFFFFL) && \
209
(*(PWORD)((PBYTE)(pbyEtherAddr) + 4) == 0xFFFF) \
212
#define IS_NULL_ADDRESS(pbyEtherAddr) ( \
213
(*(PDWORD)(pbyEtherAddr) == 0L) && \
214
(*(PWORD)((PBYTE)(pbyEtherAddr) + 4) == 0) \
217
#define IS_ETH_ADDRESS_EQUAL(pbyAddr1, pbyAddr2) ( \
218
(*(PDWORD)(pbyAddr1) == *(PDWORD)(pbyAddr2)) && \
219
(*(PWORD)((PBYTE)(pbyAddr1) + 4) == \
220
*(PWORD)((PBYTE)(pbyAddr2) + 4)) \
223
190
/*--------------------- Export Classes ----------------------------*/
227
194
/*--------------------- Export Functions --------------------------*/
229
BYTE ETHbyGetHashIndexByCrc32(PBYTE pbyMultiAddr);
230
//BYTE ETHbyGetHashIndexByCrc(PBYTE pbyMultiAddr);
231
BOOL ETHbIsBufferCrc32Ok(PBYTE pbyBuffer, UINT cbFrameLength);
196
unsigned char ETHbyGetHashIndexByCrc32(unsigned char *pbyMultiAddr);
197
//unsigned char ETHbyGetHashIndexByCrc(unsigned char *pbyMultiAddr);
198
bool ETHbIsBufferCrc32Ok(unsigned char *pbyBuffer, unsigned int cbFrameLength);
233
200
#endif // __TETHER_H__