/*++ 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