00001
00006
#ifndef _w32_PCSED_H
00007
#define _w32_PCSED_H
00008
00012
#define HW_TYPE_ETHER 1
00013
#define HW_TYPE_ETHER_3MB 2
00014
#define HW_TYPE_AX25 3
00015
#define HW_TYPE_TOKEN 6
00016
#define HW_TYPE_ARCNET 7
00017
#define HW_TYPE_APPLETALK 8
00018
#define HW_TYPE_FDDI 10
00019
00020
#include <sys/pack_on.h>
00021
00026 typedef struct eth_Header {
00027
eth_address destination;
00028
eth_address source;
00029
WORD type;
00030 }
eth_Header;
00031
00036 typedef struct eth_Packet {
00037
eth_Header head;
00038
BYTE data [ETH_MAX_DATA];
00039 }
eth_Packet;
00040
00041
00046 typedef struct vlan_Header {
00047
eth_address destination;
00048
eth_address source;
00049
WORD proto;
00050
WORD tci;
00051
WORD encap_proto;
00052 }
vlan_Header;
00053
00058 typedef struct vlan_Packet {
00059
vlan_Header head;
00060
BYTE data [VLAN_MAX_DATA];
00061 }
vlan_Packet;
00062
00063
00068 typedef struct tok_Header {
00069
00070
00071
BYTE accessCtrl;
00072
BYTE frameCtrl;
00073 mac_address destination;
00074 mac_address source;
00075
00076
00077
00078
00079
00080
00081
00082
BYTE DSAP;
00083
BYTE SSAP;
00084
BYTE ctrl;
00085
00086
00087
00088
BYTE org[3];
00089
WORD type;
00090 }
tok_Header;
00091
00096 typedef struct tok_Packet {
00097
tok_Header head;
00098
BYTE data [TOK_MAX_DATA];
00099 }
tok_Packet;
00100
00105 typedef struct llc_Header {
00106
BYTE DSAP;
00107
BYTE SSAP;
00108
union {
00109
BYTE u_ctl;
00110
WORD is_ctl;
00111
struct {
00112
BYTE snap_ui;
00113
BYTE snap_pi[5];
00114 } snap;
00115
struct {
00116
BYTE snap_ui;
00117
BYTE snap_orgcode[3];
00118
BYTE snap_ethertype[2];
00119 } snap_ether;
00120 } ctl;
00121 }
llc_Header;
00122
00126
#define TR_AC 0x10
00127
#define TR_FC 0x40
00128
#define TR_DSAP 0xAA
00129
#define TR_SSAP 0xAA
00130
#define TR_CTRL 0x03
00131
#define TR_ORG 0x00
00132
00133
00138 typedef struct fddi_Header {
00139
BYTE frameCtrl;
00140
eth_address destination;
00141
eth_address source;
00142
BYTE DSAP;
00143
BYTE SSAP;
00144
BYTE ctrl;
00145
BYTE org[3];
00146
WORD type;
00147 }
fddi_Header;
00148
00153 typedef struct fddi_Packet {
00154
fddi_Header head;
00155
BYTE data [FDDI_MAX_DATA];
00156 }
fddi_Packet;
00157
00158
#define FDDI_FC 0x40
00159
#define FDDI_DSAP 0xAA
00160
#define FDDI_SSAP 0xAA
00161
#define FDDI_CTRL 0x03
00162
#define FDDI_ORG 0x00
00163
00164
00169 typedef struct arcnet_Header {
00170
BYTE source;
00171
BYTE destination;
00172
BYTE type;
00173
BYTE flags;
00174
WORD sequence;
00175
00176
00177
00178
BYTE type2;
00179
BYTE flags2;
00180
WORD sequence2;
00181 }
arcnet_Header;
00182
00183
#define ARC_HDRLEN 6
00184
#define ARC_TYPE_OFS 2
00185
00190 typedef struct arcnet_Packet {
00191
arcnet_Header head;
00192
BYTE data [ARCNET_MAX_DATA];
00193 }
arcnet_Packet;
00194
00195
00200 typedef union link_Packet {
00201
struct eth_Packet eth;
00202
struct tok_Packet tok;
00203
struct fddi_Packet fddi;
00204
struct arcnet_Packet arc;
00205
struct ip_Packet ip;
00206
struct vlan_Packet vlan;
00207 }
link_Packet;
00208
00209
#include <sys/pack_off.h>
00210
00211
struct _eth_last_info {
00212
struct {
00213
unsigned size;
00214
struct ulong_long tstamp;
00215 } tx;
00216
struct {
00217
unsigned size;
00218
struct ulong_long tstamp;
00219 } rx;
00220 };
00221
00222
extern struct _eth_last_info
_eth_last;
00223
00224
extern BOOL
_ip_recursion,
_eth_is_init;
00225
extern BOOL
_eth_ndis3pkt,
_eth_SwsVpkt,
_eth_airpcap;
00226
extern BYTE _eth_mac_len;
00227
extern const char *_eth_not_init;
00228
00229 W32_DATA mac_address
_eth_addr;
00230 W32_DATA mac_address
_eth_real_addr;
00231 W32_DATA mac_address
_eth_loop_addr;
00232 W32_DATA mac_address
_eth_brdcast;
00233
00234 W32_DATA
void *(*_eth_recv_hook) (
WORD *type);
00235 W32_DATA int (*_eth_recv_peek) (
void *mac_buf);
00236 W32_DATA int (*_eth_xmit_hook) (
const void *mac_buf,
unsigned len);
00237
00238 W32_FUNC
int _eth_init (
void);
00239 W32_FUNC
void _eth_release (
void);
00240 W32_FUNC
int _eth_send (
WORD len,
const void *sock,
const char *file,
unsigned line);
00241 W32_FUNC
int _eth_set_addr (
const void *addr);
00242 W32_FUNC
void *
_eth_formatpacket (
const void *mac_dest,
WORD mac_type);
00243 W32_FUNC
void _eth_free (
const void *pkt);
00244 W32_FUNC
void *
_eth_arrived (
WORD *type, BOOL *brdcast);
00245 W32_FUNC
BYTE _eth_get_hwtype (
BYTE *hwtype,
BYTE *hwlen);
00246
00247
#if defined(USE_MULTICAST)
00248
#include "pcmulti.h"
00249
00250 W32_FUNC BOOL
_eth_join_mcast_group (
const struct MultiCast *mc);
00251 W32_FUNC BOOL
_eth_leave_mcast_group (
const struct MultiCast *mc);
00252
#endif
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
#if defined(USE_DEBUG) && 0
00280
extern void *
_eth_mac_hdr (
const in_Header *ip) ATTR_NORETURN();
00281
extern void *
_eth_mac_dst (
const in_Header *ip) ATTR_NORETURN();
00282
extern void *
_eth_mac_src (
const in_Header *ip) ATTR_NORETURN();
00283
extern WORD _eth_mac_typ (
const in_Header *ip) ATTR_NORETURN();
00284
00285
#define MAC_HDR(ip) _eth_mac_hdr(ip)
00286
#define MAC_DST(ip) _eth_mac_dst(ip)
00287
#define MAC_SRC(ip) _eth_mac_src(ip)
00288
#define MAC_TYP(ip) _eth_mac_typ(ip)
00289
#else
00290
#define MAC_HDR(ip) (void*) ((BYTE*)(ip) - _pkt_ip_ofs)
00291
00292
#define MAC_DST(ip) (void*) ((BYTE*)(ip) - \
00293
(_pktdevclass == PDCLASS_TOKEN ? _pkt_ip_ofs-2 : \
00294
_pktdevclass == PDCLASS_ARCNET ? _pkt_ip_ofs-1 : \
00295
_pktdevclass == PDCLASS_FDDI ? _pkt_ip_ofs-5 : \
00296
_pkt_ip_ofs))
00297
00298
#define MAC_SRC(ip) (void*) ((BYTE*)(ip) - \
00299
(_pktdevclass == PDCLASS_TOKEN ? _pkt_ip_ofs-8 : \
00300
_pktdevclass == PDCLASS_ARCNET ? _pkt_ip_ofs : \
00301
_pktdevclass == PDCLASS_FDDI ? _pkt_ip_ofs-7 : \
00302
_pkt_ip_ofs-6))
00303
00304
#define MAC_TYP(ip) (*(WORD*) ((BYTE*)(ip) - \
00305
(_pktdevclass == PDCLASS_ARCNET ? _pkt_ip_ofs-2 : 2)))
00306
#endif
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
#define SET_PEER_MAC_ADDR(tcb,ip) do { \
00317
if (!_pktserial) \
00318
memcpy (&(tcb)->his_ethaddr[0], MAC_SRC(ip), 6); \
00319
} while (0)
00320
00321
#define CLR_PEER_MAC_ADDR(tcb) do { \
00322
if (!_pktserial) \
00323
memset (&(tcb)->his_ethaddr[0], 0, 6); \
00324
} while (0)
00325
00326
#endif