ReactOS  0.4.14-dev-342-gdc047f9
efilter.c
Go to the documentation of this file.
1 /*
2  * COPYRIGHT: See COPYING in the top level directory
3  * PROJECT: ReactOS NDIS library
4  * FILE: ndis/efilter.c
5  * PURPOSE: Ethernet filter functions
6  * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
7  * Vizzini (vizzini@plasmic.com)
8  * REVISIONS:
9  * CSH 01/08-2000 Created
10  */
11 
12 #include "ndissys.h"
13 
14 BOOLEAN
15 NTAPI
17  IN UINT MaximumMulticastAddresses,
18  IN PUCHAR AdapterAddress,
20 /*
21  * FUNCTION: Construct an ethernet filter
22  * ARGUMENTS:
23  * MaximumMulticastAddresses: Maximum number of multicast addresses.
24  * AdapterAddress: Current ethernet address of the adapter.
25  * Filter: The created filter on successful return.
26  * RETURNS:
27  * TRUE if the filter was created
28  * FALSE otherwise
29  * NOTE:
30  * - This function is no longer exported and intentionally doesn't
31  * follow the W2K prototype. It was deprecated since NDIS 4 so it
32  * shouldn't be problem.
33  */
34 {
35  PETHI_FILTER NewFilter;
36 
37  NewFilter = ExAllocatePool(NonPagedPool, sizeof(ETHI_FILTER));
38  if (NewFilter != NULL)
39  {
40  RtlZeroMemory(NewFilter, sizeof(ETHI_FILTER));
41  NewFilter->MaxMulticastAddresses = MaximumMulticastAddresses;
42  RtlCopyMemory(NewFilter->AdapterAddress, AdapterAddress, ETH_LENGTH_OF_ADDRESS);
43  *Filter = (PETH_FILTER)NewFilter;
44  return TRUE;
45  }
46  else
47  {
48  NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources\n"));
49  *Filter = NULL;
50  return FALSE;
51  }
52 }
53 
54 
55 VOID
56 EXPORT
59 {
61 }
62 
63 
64 /*
65  * @implemented
66  */
67 VOID
68 EXPORT
71  IN NDIS_HANDLE MacReceiveContext,
73  IN PVOID HeaderBuffer,
74  IN UINT HeaderBufferSize,
75  IN PVOID LookaheadBuffer,
76  IN UINT LookaheadBufferSize,
78 /*
79  * FUNCTION: Receive indication function for Ethernet devices
80  * ARGUMENTS:
81  * MiniportAdapter = Miniport Adapter Handle (PLOGICAL_ADAPTER)
82  * MacReceiveContext = MAC receive context handle
83  * Address = Pointer to destination Ethernet address
84  * HeaderBuffer = Pointer to Ethernet header buffer
85  * HeaderBufferSize = Size of Ethernet header buffer
86  * LookaheadBuffer = Pointer to lookahead buffer
87  * LookaheadBufferSize = Size of lookahead buffer
88  * PacketSize = Total size of received packet
89  */
90 {
91  /* Not sure if this is a valid thing to do, but we do arrive here early
92  * in the boot process with Filter NULL. We need to investigate whether
93  * this should be handled or not allowed. */
94  if( !Filter ) {
95  NDIS_DbgPrint(MIN_TRACE, ("Filter is NULL\n"));
96  return;
97  }
99  MacReceiveContext,
100  HeaderBuffer,
101  HeaderBufferSize,
102  LookaheadBuffer,
103  LookaheadBufferSize,
104  PacketSize);
105 }
106 
107 
108 /*
109  * @implemented
110  */
111 VOID
112 EXPORT
115 /*
116  * FUNCTION: Receive indication complete function for Ethernet devices
117  * ARGUMENTS:
118  * Filter = Pointer to Ethernet filter
119  */
120 {
121  PLIST_ENTRY CurrentEntry;
122  PLOGICAL_ADAPTER Adapter;
123  PADAPTER_BINDING AdapterBinding;
124 
125  NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
126 
127  if( !Filter ) {
128  NDIS_DbgPrint(MIN_TRACE, ("Filter is NULL\n"));
129  return;
130  }
131 
132  Adapter = (PLOGICAL_ADAPTER)((PETHI_FILTER)Filter)->Miniport;
133 
134  NDIS_DbgPrint(MAX_TRACE, ("acquiring miniport block lock\n"));
136  {
137  CurrentEntry = Adapter->ProtocolListHead.Flink;
138 
139  while (CurrentEntry != &Adapter->ProtocolListHead)
140  {
141  AdapterBinding = CONTAINING_RECORD(CurrentEntry, ADAPTER_BINDING, AdapterListEntry);
142 
143  (*AdapterBinding->ProtocolBinding->Chars.ReceiveCompleteHandler)(
144  AdapterBinding->NdisOpenBlock.ProtocolBindingContext);
145 
146  CurrentEntry = CurrentEntry->Flink;
147  }
148  }
150 }
151 
152 /* EOF */
signed char * PCHAR
Definition: retypes.h:7
UCHAR AdapterAddress[ETH_LENGTH_OF_ADDRESS]
Definition: efilter.h:35
#define IN
Definition: typedefs.h:38
#define TRUE
Definition: types.h:120
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
NDIS_OPEN_BLOCK NdisOpenBlock
Definition: protocol.h:22
BOOLEAN NTAPI EthCreateFilter(IN UINT MaximumMulticastAddresses, IN PUCHAR AdapterAddress, OUT PETH_FILTER *Filter)
Definition: efilter.c:16
VOID EXPORT EthFilterDprIndicateReceive(IN PETH_FILTER Filter, IN NDIS_HANDLE MacReceiveContext, IN PCHAR Address, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookaheadBuffer, IN UINT LookaheadBufferSize, IN UINT PacketSize)
Definition: efilter.c:69
VOID MiniIndicateData(PLOGICAL_ADAPTER Adapter, NDIS_HANDLE MacReceiveContext, PVOID HeaderBuffer, UINT HeaderBufferSize, PVOID LookaheadBuffer, UINT LookaheadBufferSize, UINT PacketSize)
Definition: miniport.c:175
unsigned char * PUCHAR
Definition: retypes.h:3
VOID NTAPI KeAcquireSpinLockAtDpcLevel(IN PKSPIN_LOCK SpinLock)
Definition: spinlock.c:192
#define DEBUG_MINIPORT
Definition: debug.h:17
RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler
Definition: ndis.h:1892
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
Definition: fltkernel.h:1802
unsigned char BOOLEAN
smooth NULL
Definition: ftsmooth.c:416
static WCHAR Address[46]
Definition: ping.c:68
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
PPROTOCOL_BINDING ProtocolBinding
Definition: protocol.h:28
struct _LIST_ENTRY * Flink
Definition: typedefs.h:119
VOID EXPORT EthFilterDprIndicateReceiveComplete(IN PETH_FILTER Filter)
Definition: efilter.c:113
NDIS_MINIPORT_BLOCK NdisMiniportBlock
Definition: miniport.h:89
VOID NTAPI KeReleaseSpinLockFromDpcLevel(IN PKSPIN_LOCK SpinLock)
Definition: spinlock.c:215
LIST_ENTRY ProtocolListHead
Definition: miniport.h:94
VOID EXPORT EthDeleteFilter(IN PETH_FILTER Filter)
Definition: efilter.c:57
struct _LOGICAL_ADAPTER * PLOGICAL_ADAPTER
#define ExAllocatePool(type, size)
Definition: fbtusb.h:44
struct _X_FILTER * PETH_FILTER
Definition: ndis.h:2266
Definition: typedefs.h:117
#define MAX_TRACE
Definition: debug.h:16
_In_ USHORT PacketSize
Definition: iofuncs.h:1056
KSPIN_LOCK Lock
Definition: ndis.h:2520
#define ETH_LENGTH_OF_ADDRESS
Definition: efilter.h:16
unsigned int UINT
Definition: ndis.h:50
#define NDIS_DbgPrint(_t_, _x_)
Definition: debug.h:40
#define OUT
Definition: typedefs.h:39
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:261
#define MIN_TRACE
Definition: debug.h:14
#define ExFreePool(addr)
Definition: env_spec_w32.h:352
NDIS_PROTOCOL_CHARACTERISTICS Chars
Definition: protocol.h:13
UINT MaxMulticastAddresses
Definition: efilter.h:33