Added networking code from Casper Hornstrup
[reactos.git] / reactos / drivers / net / tcpip / include / lan.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS TCP/IP protocol driver
4 * FILE: include/lan.h
5 * PURPOSE: LAN adapter definitions
6 */
7 #ifndef __LAN_H
8 #define __LAN_H
9
10
11 /* Medias we support */
12 #define MEDIA_ETH 0
13
14 #define MAX_MEDIA 1
15
16 #define IEEE_802_ADDR_LENGTH 6
17
18 /* Ethernet header layout */
19 typedef struct ETH_HEADER {
20 UCHAR DstAddr[IEEE_802_ADDR_LENGTH]; /* Destination MAC address */
21 UCHAR SrcAddr[IEEE_802_ADDR_LENGTH]; /* Source MAC address */
22 USHORT EType; /* Ethernet protocol type */
23 } ETH_HEADER, *PETH_HEADER;
24
25 #define MAX_MEDIA_ETH sizeof(ETH_HEADER)
26
27 /* Broadcast masks */
28 #define BCAST_ETH_MASK 0x01
29
30 /* Broadcast values to check against */
31 #define BCAST_ETH_CHECK 0x01
32
33 /* Offset of broadcast address */
34 #define BCAST_ETH_OFFSET 0x00
35
36 /* Per adapter information */
37 typedef struct LAN_ADAPTER {
38 struct LAN_ADAPTER *Next; /* Pointer to next adapter */
39 KSPIN_LOCK Lock; /* Lock for this structure */
40 UCHAR State; /* State of the adapter */
41 KEVENT Event; /* Opening event */
42 PVOID Context; /* Upper layer context information */
43 NDIS_HANDLE NdisHandle; /* NDIS binding handle */
44 NDIS_STATUS NdisStatus; /* NDIS status of last request */
45 NDIS_MEDIUM Media; /* Media type */
46 UCHAR HWAddress[IEEE_802_ADDR_LENGTH]; /* Local HW address */
47 UINT HWAddressLength; /* Length of HW address */
48 UCHAR BCastMask; /* Mask for checking broadcast */
49 UCHAR BCastCheck; /* Value to check against */
50 UCHAR BCastOffset; /* Offset in frame to check against */
51 UCHAR HeaderSize; /* Size of link-level header */
52 USHORT MTU; /* Maximum Transfer Unit */
53 UINT MinFrameSize; /* Minimum frame size in bytes */
54 UINT MaxPacketSize; /* Maximum packet size when sending */
55 UINT MaxSendPackets; /* Maximum number of packets per send */
56 UINT MacOptions; /* MAC options for NIC driver/adapter */
57 UINT Speed; /* Link speed */
58 UINT PacketFilter; /* Packet filter for this adapter */
59 PNDIS_PACKET TDPackets; /* Transfer Data packets */
60 } LAN_ADAPTER, *PLAN_ADAPTER;
61
62 /* LAN adapter state constants */
63 #define LAN_STATE_OPENING 0
64 #define LAN_STATE_RESETTING 1
65 #define LAN_STATE_STARTED 2
66 #define LAN_STATE_STOPPED 3
67
68 /* Size of out lookahead buffer */
69 #define LOOKAHEAD_SIZE 128
70
71 /* Ethernet types. We swap constants so we can compare values at runtime
72 without swapping them */
73 #define ETYPE_IPv4 WH2N(0x0800)
74 #define ETYPE_IPv6 WH2N(0x0000) /* FIXME */
75 #define ETYPE_ARP WH2N(0x0806)
76
77 /* Protocols */
78 #define LAN_PROTO_IPv4 0x0000 /* Internet Protocol version 4 */
79 #define LAN_PROTO_IPv6 0x0001 /* Internet Protocol version 6 */
80 #define LAN_PROTO_ARP 0x0002 /* Address Resolution Protocol */
81
82 extern PLAN_ADAPTER Adapters;
83
84
85 NDIS_STATUS LANRegisterAdapter(
86 PNDIS_STRING AdapterName,
87 PLAN_ADAPTER *Adapter);
88
89 NDIS_STATUS LANUnregisterAdapter(
90 PLAN_ADAPTER Adapter);
91
92 NTSTATUS LANRegisterProtocol(
93 STRING *Name);
94
95 VOID LANUnregisterProtocol(
96 VOID);
97
98 #endif /* __LAN_H */
99
100 /* EOF */