diff options
Diffstat (limited to '')
-rw-r--r-- | private/inc/ipxtfflt.h | 227 |
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 |