Reactos
at listview 164 lines 5.4 kB view raw
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 8#pragma once 9 10/* NDIS version this driver supports */ 11#define NDIS_VERSION_MAJOR 4 12#define NDIS_VERSION_MINOR 0 13 14/* Macros */ 15 16#define MIN(value1, value2) \ 17 ((value1 < value2)? value1 : value2) 18 19#define MAX(value1, value2) \ 20 ((value1 > value2)? value1 : value2) 21 22#define NDIS_BUFFER_TAG FOURCC('n','b','u','f') 23#define NDIS_PACKET_TAG FOURCC('n','p','k','t') 24 25/* Media we support */ 26#define MEDIA_ETH 0 27 28#define MAX_MEDIA 1 29 30#define IEEE_802_ADDR_LENGTH 6 31 32/* Ethernet header layout */ 33typedef 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; 38 39#define MAX_MEDIA_ETH sizeof(ETH_HEADER) 40 41/* Broadcast masks */ 42#define BCAST_ETH_MASK 0x01 43 44/* Broadcast values to check against */ 45#define BCAST_ETH_CHECK 0x01 46 47/* Offset of broadcast address */ 48#define BCAST_ETH_OFFSET 0x00 49 50typedef struct _LAN_ADDRESS_C { 51 LIST_ENTRY ListEntry; 52 LAN_ADDRESS ClientPart; 53} LAN_ADDRESS_C, *PLAN_ADDRESS_C; 54 55/* Per adapter information */ 56typedef 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; 84 85typedef struct _LAN_PACKET { 86 PNDIS_PACKET NdisPacket; 87 PETH_HEADER EthHeader; 88 UINT TotalSize; 89} LAN_PACKET, *PLAN_PACKET; 90 91typedef struct _LAN_PROTOCOL { 92 LIST_ENTRY ListEntry; 93 LIST_ENTRY ReadIrpListHead; 94 UINT Id; 95 UINT LastServicePass; 96 UINT Buffered; 97 UINT NumEtherTypes; 98 USHORT EtherType[1]; 99} LAN_PROTOCOL, *PLAN_PROTOCOL; 100 101typedef struct _LAN_DEVICE_EXT { 102 NDIS_HANDLE NdisProtocolHandle; 103 KSPIN_LOCK Lock; 104 LIST_ENTRY AdapterListHead; 105 LIST_ENTRY ProtocolListHead; 106 UINT AdapterId; 107 UINT ProtoId; 108} LAN_DEVICE_EXT, *PLAN_DEVICE_EXT; 109 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 115 116/* Size of out lookahead buffer */ 117#define LOOKAHEAD_SIZE 128 118 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) 124 125/* Protocols */ 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 */ 129 130 131NDIS_STATUS LANRegisterAdapter( 132 PNDIS_STRING AdapterName, 133 PNDIS_STRING RegistryPath); 134 135NDIS_STATUS LANUnregisterAdapter(PLAN_ADAPTER Adapter); 136 137NTSTATUS LANRegisterProtocol(PNDIS_STRING Name); 138 139VOID LANUnregisterProtocol(VOID); 140 141NDIS_STATUS NDISCall( 142 PLAN_ADAPTER Adapter, 143 NDIS_REQUEST_TYPE Type, 144 NDIS_OID OID, 145 PVOID Buffer, 146 UINT Length); 147 148void GetDataPtr( PNDIS_PACKET Packet, 149 UINT Offset, 150 PCHAR *DataOut, 151 PUINT Size ); 152 153NDIS_STATUS AllocatePacketWithBufferX( PNDIS_PACKET *NdisPacket, 154 PCHAR Data, UINT Len, 155 PCHAR File, UINT Line ); 156 157VOID FreeNdisPacketX( PNDIS_PACKET Packet, PCHAR File, UINT Line ); 158 159NDIS_STATUS InitNdisPools(VOID); 160VOID CloseNdisPools(VOID); 161 162PLAN_ADAPTER FindAdapterByIndex( PLAN_DEVICE_EXT DeviceExt, UINT Index ); 163 164/* EOF */