diff options
Diffstat (limited to '')
-rw-r--r-- | private/ntos/tdi/isn/inc/ipxfltif.h | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/private/ntos/tdi/isn/inc/ipxfltif.h b/private/ntos/tdi/isn/inc/ipxfltif.h new file mode 100644 index 000000000..e02591e61 --- /dev/null +++ b/private/ntos/tdi/isn/inc/ipxfltif.h @@ -0,0 +1,151 @@ +/*++ + +Copyright (c) 1995 Microsoft Corporation + +Module Name: + + private\inc\ipxfltif.h + +Abstract: + IPX Filter driver interface with forwarder + + +Author: + + Vadim Eydelman + +Revision History: + +--*/ + +#ifndef _IPXFLTIF_ +#define _IPXFLTIF_ + + // No filter context means that packets should not + // be passed for filtering +#define NO_FILTER_CONTEXT ((PVOID)0) + + + // Forwarder Driver Entry Points: + // ============================== +/*++ + S E T _ I F _ I N _ C O N T E X T _ H A N D L E R + +Routine Description: + Associates filter driver context with + the packets received on the interface +Arguments: + InterfaceIndex - index of the interface + ifInContext - filter driver context +Return Value: + STATUS_SUCCESS - context associated ok + STATUS_UNSUCCESSFUL - interface does not exist +--*/ +typedef +NTSTATUS +(*PSET_IF_IN_CONTEXT_HANDLER) ( + IN ULONG InterfaceIndex, + IN PVOID ifInContext + ); + +/*++ + S E T _ I F _ O U T _ C O N T E X T _ H A N D L E R + +Routine Description: + Associates filter driver context with + the packets sent on the interface +Arguments: + InterfaceIndex - index of the interface + ifOutContext - filter driver context +Return Value: + STATUS_SUCCESS - context associated ok + STATUS_UNSUCCESSFUL - interface does not exist +--*/ +typedef +NTSTATUS +(*PSET_IF_OUT_CONTEXT_HANDLER) ( + IN ULONG InterfaceIndex, + IN PVOID ifOutContext + ); + +typedef enum { + FILTER_DENY_IN = -2, + FILTER_DENY_OUT = -1, + FILTER_DENY = 1, + FILTER_PERMIT = 0 +} FILTER_ACTION; +#define NOT_FILTER_ACTION(action) (!action) +#define IS_FILTERED(action) (action!=FILTER_PERMIT) + + + // Forwarder Driver Entry Points: + // ============================== +/*++ + F i l t e r H a n d l e r + +Routine Description: + + Filters the packet supplied by the forwarder + +Arguments: + ipxHdr - pointer to packet header + ipxHdrLength - size of the header buffer (must be at least 30) + ifInContext - context associated with interface on which packet + was received + ifOutContext - context associated with interface on which packet + will be sent +Return Value: + FILTER_PERMIT - packet should be passed on by the forwarder + FILTER_DENY_IN - packet should be dropped because of input filter + FILTER_DENY_OUT - packet should be dropped because of output filter + +--*/ +typedef +FILTER_ACTION +(*PFILTER_HANDLER) ( + IN PUCHAR ipxHdr, + IN ULONG ipxHdrLength, + IN PVOID ifInContext, + IN PVOID ifOutContex + ); + +/*++ + I n t e r f a c e D e l e t e d H a n d l e r + +Routine Description: + + Frees interface filters blocks when forwarder indicates that + interface is deleted +Arguments: + ifInContext - context associated with input filters block + ifOutContext - context associated with output filters block +Return Value: + None + +--*/ +typedef +VOID +(*PINTERFACE_DELETED_HANDLER) ( + IN PVOID ifInContext, + IN PVOID ifOutContext + ); + +// Binds filter driver to forwarder +// IPX_FLT_BIND_INPUT should be passed in the input buffer and +// IPX_FLT_BINF_OUTPUT will be returned in the output buffer +#define IOCTL_FWD_INTERNAL_BIND_FILTER \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+16,METHOD_BUFFERED,FILE_ANY_ACCESS) + +typedef struct _IPX_FLT_BIND_INPUT { + PFILTER_HANDLER FilterHandler; + PINTERFACE_DELETED_HANDLER InterfaceDeletedHandler; +} IPX_FLT_BIND_INPUT, *PIPX_FLT_BIND_INPUT; + +typedef struct _IPX_FLT_BIND_OUTPUT { + ULONG Size; + PSET_IF_IN_CONTEXT_HANDLER SetIfInContextHandler; + PSET_IF_OUT_CONTEXT_HANDLER SetIfOutContextHandler; +} IPX_FLT_BIND_OUTPUT, *PIPX_FLT_BIND_OUTPUT; + +#endif + |