2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS TCP/IP protocol driver
5 * PURPOSE: LAN adapter definitions
10 /* NDIS version this driver supports */
11 #define NDIS_VERSION_MAJOR 4
12 #define NDIS_VERSION_MINOR 0
16 #define MIN(value1, value2) \
17 ((value1 < value2)? value1 : value2)
19 #define MAX(value1, value2) \
20 ((value1 > value2)? value1 : value2)
22 #define NDIS_BUFFER_TAG FOURCC('n','b','u','f')
23 #define NDIS_PACKET_TAG FOURCC('n','p','k','t')
25 /* Media we support */
30 #define IEEE_802_ADDR_LENGTH 6
32 /* Ethernet header layout */
33 typedef struct ETH_HEADER
{
34 UCHAR DstAddr
[IEEE_802_ADDR_LENGTH
]; /* Destination MAC address */
35 UCHAR SrcAddr
[IEEE_802_ADDR_LENGTH
]; /* Source MAC address */
36 USHORT EType
; /* Ethernet protocol type */
37 } ETH_HEADER
, *PETH_HEADER
;
39 #define MAX_MEDIA_ETH sizeof(ETH_HEADER)
42 #define BCAST_ETH_MASK 0x01
44 /* Broadcast values to check against */
45 #define BCAST_ETH_CHECK 0x01
47 /* Offset of broadcast address */
48 #define BCAST_ETH_OFFSET 0x00
50 typedef struct _LAN_ADDRESS_C
{
52 LAN_ADDRESS ClientPart
;
53 } LAN_ADDRESS_C
, *PLAN_ADDRESS_C
;
55 /* Per adapter information */
56 typedef struct LAN_ADAPTER
{
57 LIST_ENTRY ListEntry
; /* Entry on list */
58 LIST_ENTRY AddressList
; /* Addresses associated */
59 LIST_ENTRY ForeignList
; /* List of known addresses */
60 KSPIN_LOCK Lock
; /* Lock for this structure */
61 UINT Index
; /* Adapter Index */
62 UCHAR State
; /* State of the adapter */
63 KEVENT Event
; /* Opening event */
64 PVOID Context
; /* Upper layer context information */
65 NDIS_HANDLE NdisHandle
; /* NDIS binding handle */
66 NDIS_STATUS NdisStatus
; /* NDIS status of last request */
67 NDIS_MEDIUM Media
; /* Media type */
68 UCHAR HWAddress
[IEEE_802_ADDR_LENGTH
]; /* Local HW address */
69 UINT HWAddressLength
; /* Length of HW address */
70 UCHAR BCastMask
; /* Mask for checking broadcast */
71 UCHAR BCastCheck
; /* Value to check against */
72 UCHAR BCastOffset
; /* Offset in frame to check against */
73 UCHAR HeaderSize
; /* Size of link-level header */
74 USHORT MTU
; /* Maximum Transfer Unit */
75 UINT MinFrameSize
; /* Minimum frame size in bytes */
76 UINT MaxPacketSize
; /* Maximum packet size when sending */
77 UINT MaxSendPackets
; /* Maximum number of packets per send */
78 UINT MacOptions
; /* MAC options for NIC driver/adapter */
79 UINT Speed
; /* Link speed */
80 UINT PacketFilter
; /* Packet filter for this adapter */
81 UINT Lookahead
; /* Lookahead for adapter */
82 UNICODE_STRING RegistryPath
; /* Registry path for later query */
83 } LAN_ADAPTER
, *PLAN_ADAPTER
;
85 typedef struct _LAN_PACKET
{
86 PNDIS_PACKET NdisPacket
;
87 PETH_HEADER EthHeader
;
89 } LAN_PACKET
, *PLAN_PACKET
;
91 typedef struct _LAN_PROTOCOL
{
93 LIST_ENTRY ReadIrpListHead
;
99 } LAN_PROTOCOL
, *PLAN_PROTOCOL
;
101 typedef struct _LAN_DEVICE_EXT
{
102 NDIS_HANDLE NdisProtocolHandle
;
104 LIST_ENTRY AdapterListHead
;
105 LIST_ENTRY ProtocolListHead
;
108 } LAN_DEVICE_EXT
, *PLAN_DEVICE_EXT
;
110 /* LAN adapter state constants */
111 #define LAN_STATE_OPENING 0
112 #define LAN_STATE_RESETTING 1
113 #define LAN_STATE_STARTED 2
114 #define LAN_STATE_STOPPED 3
116 /* Size of out lookahead buffer */
117 #define LOOKAHEAD_SIZE 128
119 /* Ethernet types. We swap constants so we can compare values at runtime
120 without swapping them there */
121 #define ETYPE_IPv4 WH2N(0x0800)
122 #define ETYPE_IPv6 WH2N(0x86DD)
123 #define ETYPE_ARP WH2N(0x0806)
126 #define LAN_PROTO_IPv4 0x0000 /* Internet Protocol version 4 */
127 #define LAN_PROTO_IPv6 0x0001 /* Internet Protocol version 6 */
128 #define LAN_PROTO_ARP 0x0002 /* Address Resolution Protocol */
131 NDIS_STATUS
LANRegisterAdapter(
132 PNDIS_STRING AdapterName
,
133 PNDIS_STRING RegistryPath
);
135 NDIS_STATUS
LANUnregisterAdapter(PLAN_ADAPTER Adapter
);
137 NTSTATUS
LANRegisterProtocol(PNDIS_STRING Name
);
139 VOID
LANUnregisterProtocol(VOID
);
141 NDIS_STATUS
NDISCall(
142 PLAN_ADAPTER Adapter
,
143 NDIS_REQUEST_TYPE Type
,
148 void GetDataPtr( PNDIS_PACKET Packet
,
153 NDIS_STATUS
AllocatePacketWithBufferX( PNDIS_PACKET
*NdisPacket
,
154 PCHAR Data
, UINT Len
,
155 PCHAR File
, UINT Line
);
157 VOID
FreeNdisPacketX( PNDIS_PACKET Packet
, PCHAR File
, UINT Line
);
159 NDIS_STATUS
InitNdisPools();
160 VOID
CloseNdisPools();
162 PLAN_ADAPTER
FindAdapterByIndex( PLAN_DEVICE_EXT DeviceExt
, UINT Index
);