ReactOS 0.4.15-dev-8348-gc1b9bb5
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
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
55VOID
59{
61}
62
63
64/*
65 * @implemented
66 */
67VOID
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 */
111VOID
112EXPORT
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 */
unsigned char BOOLEAN
#define MIN_TRACE
Definition: debug.h:14
#define MAX_TRACE
Definition: debug.h:16
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NDIS_DbgPrint(_t_, _x_)
Definition: debug.h:40
#define DEBUG_MINIPORT
Definition: debug.h:17
struct _LOGICAL_ADAPTER * PLOGICAL_ADAPTER
VOID MiniIndicateData(PLOGICAL_ADAPTER Adapter, NDIS_HANDLE MacReceiveContext, PVOID HeaderBuffer, UINT HeaderBufferSize, PVOID LookaheadBuffer, UINT LookaheadBufferSize, UINT PacketSize)
Definition: miniport.c:175
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
BOOLEAN NTAPI EthCreateFilter(IN UINT MaximumMulticastAddresses, IN PUCHAR AdapterAddress, OUT PETH_FILTER *Filter)
Definition: efilter.c:16
VOID EXPORT EthFilterDprIndicateReceiveComplete(IN PETH_FILTER Filter)
Definition: efilter.c:113
VOID EXPORT EthDeleteFilter(IN PETH_FILTER Filter)
Definition: efilter.c:57
#define ETH_LENGTH_OF_ADDRESS
Definition: efilter.h:16
#define ExFreePool(addr)
Definition: env_spec_w32.h:352
#define NonPagedPool
Definition: env_spec_w32.h:307
#define ExAllocatePool(type, size)
Definition: fbtusb.h:44
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
Definition: fltkernel.h:1801
struct _X_FILTER * PETH_FILTER
Definition: ndis.h:2266
unsigned int UINT
Definition: ndis.h:50
static WCHAR Address[46]
Definition: ping.c:68
#define KeAcquireSpinLockAtDpcLevel(SpinLock)
Definition: ke.h:125
#define KeReleaseSpinLockFromDpcLevel(SpinLock)
Definition: ke.h:135
UINT MaxMulticastAddresses
Definition: efilter.h:33
UCHAR AdapterAddress[ETH_LENGTH_OF_ADDRESS]
Definition: efilter.h:35
NDIS_OPEN_BLOCK NdisOpenBlock
Definition: protocol.h:22
PPROTOCOL_BINDING ProtocolBinding
Definition: protocol.h:28
Definition: typedefs.h:120
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
LIST_ENTRY ProtocolListHead
Definition: miniport.h:94
NDIS_MINIPORT_BLOCK NdisMiniportBlock
Definition: miniport.h:89
RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler
Definition: ndis.h:1892
KSPIN_LOCK Lock
Definition: ndis.h:2520
NDIS_PROTOCOL_CHARACTERISTICS Chars
Definition: protocol.h:13
#define NTAPI
Definition: typedefs.h:36
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define IN
Definition: typedefs.h:39
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
unsigned char * PUCHAR
Definition: typedefs.h:53
#define OUT
Definition: typedefs.h:40
char * PCHAR
Definition: typedefs.h:51
_In_ USHORT PacketSize
Definition: iofuncs.h:1058