summaryrefslogtreecommitdiffstats
path: root/private/inc/ipxtfflt.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--private/inc/ipxtfflt.h227
1 files changed, 227 insertions, 0 deletions
diff --git a/private/inc/ipxtfflt.h b/private/inc/ipxtfflt.h
new file mode 100644
index 000000000..313e67a7a
--- /dev/null
+++ b/private/inc/ipxtfflt.h
@@ -0,0 +1,227 @@
+/*++
+
+Copyright (c) 1995 Microsoft Corporation
+
+Module Name:
+
+ private\inc\ipxtfflt.h
+
+Abstract:
+ Interface with ipx filter driver
+ Filter structure definitions
+
+Author:
+
+ Vadim Eydelman
+
+Revision History:
+
+--*/
+
+#ifndef _IPXTFFLT_
+#define _IPXTFFLT_
+
+//*** IPX Traffic Filters ***
+
+typedef struct _IPX_TRAFFIC_FILTER_GLOBAL_INFO {
+ ULONG FilterAction; // Action if there is a match with
+ // any filter on the interface
+ } IPX_TRAFFIC_FILTER_GLOBAL_INFO, *PIPX_TRAFFIC_FILTER_GLOBAL_INFO;
+
+// FilterAction
+
+#define IPX_TRAFFIC_FILTER_ACTION_PERMIT 1
+#define IPX_TRAFFIC_FILTER_ACTION_DENY 2
+
+
+// general traffic filter info structure
+
+typedef struct _IPX_TRAFFIC_FILTER_INFO {
+
+ ULONG FilterDefinition;
+ UCHAR DestinationNetwork[4];
+ UCHAR DestinationNetworkMask[4];
+ UCHAR DestinationNode[6];
+ UCHAR DestinationSocket[2];
+ UCHAR SourceNetwork[4];
+ UCHAR SourceNetworkMask[4];
+ UCHAR SourceNode[6];
+ UCHAR SourceSocket[2];
+ UCHAR PacketType;
+ } IPX_TRAFFIC_FILTER_INFO, *PIPX_TRAFFIC_FILTER_INFO;
+
+// FilterDefinition - Flags to specify relevant IPX address fields to filter on
+
+#define IPX_TRAFFIC_FILTER_ON_SRCNET 0x00000001
+#define IPX_TRAFFIC_FILTER_ON_SRCNODE 0x00000002
+#define IPX_TRAFFIC_FILTER_ON_SRCSOCKET 0x00000004
+
+#define IPX_TRAFFIC_FILTER_ON_DSTNET 0x00000010
+#define IPX_TRAFFIC_FILTER_ON_DSTNODE 0x00000020
+#define IPX_TRAFFIC_FILTER_ON_DSTSOCKET 0x00000040
+
+#define IPX_TRAFFIC_FILTER_ON_PKTTYPE 0x00000100
+#define IPX_TRAFFIC_FILTER_LOG_MATCHES 0x80000000
+
+ // Filter driver exported device object name
+#define IPXFLT_NAME L"\\Device\\NwLnkFlt"
+ // Networks device (implies certain admin access privilegies)
+#define FILE_DEVICE_IPXFLT FILE_DEVICE_NETWORK
+
+
+ // All our IOCLTS are custom (private to this driver only)
+#define IPXFWD_IOCTL_INDEX (ULONG)0x00000800
+
+
+// Starts the driver
+// Parameters:
+// IN InputBuffer - NULL
+// IN InputBufferSize - 0
+// IN OutputBuffer - NULL
+// IN OutputBufferSize - 0
+// Returns:
+// Status:
+// STATUS_SUCCESS - driver was started ok
+// STATUS_INVALID_PARAMETER - invalid input parameter
+// STATUS_INSUFFICIENT_RESOURCES - not enough resources to allocate
+// all internal structures
+#define IOCTL_FLT_START \
+ CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+0,METHOD_IN_DIRECT,FILE_ANY_ACCESS)
+
+// Sets input filters on interface
+// Parameters:
+// IN InputBuffer - FLT_IF_SET_PARAMS
+// IN InputBufferSize - sizeof (FLT_IF_SET_PARAMS)
+// IN OutputBuffer - array of TRAFFIC_FILTER_INFO blocks
+// IN OutputBufferSize - size of the OutputBuffer
+// Returns:
+// Status:
+// STATUS_SUCCESS - filters were set ok
+// STATUS_INVALID_PARAMETER - invalid input parameter
+// STATUS_INSUFFICIENT_RESOURCES - not enough memory to allocate
+// filter description block
+#define IOCTL_FLT_IF_SET_IN_FILTERS \
+ CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+1,METHOD_IN_DIRECT,FILE_ANY_ACCESS)
+
+// Sets output filters on interface
+// Parameters:
+// IN InputBuffer - FLT_IF_SET_PARAMS
+// IN InputBufferSize - sizeof (FLT_IF_SET_PARAMS)
+// IN OutputBuffer - array of TRAFFIC_FILTER_INFO blocks
+// IN OutputBufferSize - size of the OutputBuffer
+// Returns:
+// Status:
+// STATUS_SUCCESS - filters were set ok
+// STATUS_INVALID_PARAMETER - invalid input parameter
+// STATUS_INSUFFICIENT_RESOURCES - not enough memory to allocate
+// filter description block
+#define IOCTL_FLT_IF_SET_OUT_FILTERS \
+ CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+2,METHOD_IN_DIRECT,FILE_ANY_ACCESS)
+
+
+// Resets (deletes) all input filters on interface
+// Parameters:
+// IN InputBuffer - interface index
+// IN InputBufferSize - sizeof (ULONG)
+// IN OutputBuffer - NULL
+// IN OutputBufferSize - 0
+// Returns:
+// Status:
+// STATUS_SUCCESS - filters were reset ok
+// STATUS_INVALID_PARAMETER - invalid input parameter
+#define IOCTL_FLT_IF_RESET_IN_FILTERS \
+ CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+3,METHOD_BUFFERED,FILE_ANY_ACCESS)
+
+// Resets (deletes) all output filters on interface
+// Parameters:
+// IN InputBuffer - interface index
+// IN InputBufferSize - sizeof (ULONG)
+// IN OutputBuffer - NULL
+// IN OutputBufferSize - 0
+// Returns:
+// Status:
+// STATUS_SUCCESS - filters were reset ok
+// STATUS_INVALID_PARAMETER - invalid input parameter
+#define IOCTL_FLT_IF_RESET_OUT_FILTERS \
+ CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+4,METHOD_BUFFERED,FILE_ANY_ACCESS)
+
+// Returns input filters on interface
+// Parameters:
+// IN InputBuffer - interface index
+// IN InputBufferSize - sizeof (ULONG)
+// OUT OutputBuffer - buffer to receive FLT_IF_GET_PARAMS followed
+// by the TRAFFIC_FILTER_INFO array
+// IN OutputBufferSize - at least sizeof (FLT_IF_GET_PARAMS)
+// Returns:
+// Status:
+// STATUS_SUCCESS - all filters on interface were returned in
+// the output buffer
+// STATUS_BUFFER_OVERFLOW - out but buffer is too small to return
+// all the filters, only those that fit were
+// placed in the buffer
+// STATUS_INVALID_PARAMETER - invalid input parameter
+// Information:
+// Total number of bytes placed in the output buffer
+#define IOCTL_FLT_IF_GET_IN_FILTERS \
+ CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+5,METHOD_OUT_DIRECT,FILE_ANY_ACCESS)
+
+// Returns input filters on interface
+// Parameters:
+// IN InputBuffer - interface index
+// IN InputBufferSize - sizeof (ULONG)
+// OUT OutputBuffer - buffer to receive FLT_IF_GET_PARAMS followed
+// by the TRAFFIC_FILTER_INFO array
+// IN OutputBufferSize - at least sizeof (FLT_IF_GET_PARAMS)
+// Returns:
+// Status:
+// STATUS_SUCCESS - all filters on interface were returned in
+// the output buffer
+// STATUS_BUFFER_OVERFLOW - out but buffer is too small to return
+// all the filters, only those that fit were
+// placed in the buffer
+// STATUS_INVALID_PARAMETER - invalid input parameter
+// Information:
+// Total number of bytes placed in the output buffer
+#define IOCTL_FLT_IF_GET_OUT_FILTERS \
+ CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+6,METHOD_OUT_DIRECT,FILE_ANY_ACCESS)
+
+// Returns logged packets
+// Parameters:
+// IN InputBuffer - NULL
+// IN InputBufferSize - 0
+// OUT OutputBuffer - buffer to receive logged packets
+// IN OutputBufferSize - at least sizeof (FLT_PACKET_LOG)
+// Returns:
+// Status:
+// STATUS_SUCCESS - all filters on interface were returned in
+// the output buffer
+// STATUS_INVALID_PARAMETER - invalid input parameter
+// Information:
+// Total number of bytes placed in the output buffer
+#define IOCTL_FLT_GET_LOGGED_PACKETS \
+ CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+7,METHOD_OUT_DIRECT,FILE_ANY_ACCESS)
+
+typedef struct _FLT_IF_SET_PARAMS {
+ ULONG InterfaceIndex; // Index of the interface
+ ULONG FilterAction; // Filter action
+ ULONG FilterSize; // sizeof (IPX_TRAFFIC_FILTER_INFO)
+} FLT_IF_SET_PARAMS, *PFLT_IF_SET_PARAMS;
+
+typedef struct _FLT_IF_GET_PARAMS {
+ ULONG FilterAction; // Filter action
+ ULONG FilterSize; // sizeof (IPX_TRAFFIC_FILTER_INFO)
+ ULONG TotalSize; // Total size of filter description
+ // array
+} FLT_IF_GET_PARAMS, *PFLT_IF_GET_PARAMS;
+
+typedef struct _FLT_PACKET_LOG {
+ ULONG SrcIfIdx; // Index of source if (-1 - unknown)
+ ULONG DstIfIdx; // Index of dest if (-1 - unknown)
+ USHORT DataSize; // Total size of the data (at least 30)
+ USHORT SeqNum; // Sequence number to account for
+ // packets lost to lack of buffer space
+ UCHAR Header[30]; // IPX packet header followed by the
+ // data if any
+} FLT_PACKET_LOG, *PFLT_PACKET_LOG;
+
+#endif