diff options
Diffstat (limited to '')
-rw-r--r-- | private/inc/ipxfwd.h | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/private/inc/ipxfwd.h b/private/inc/ipxfwd.h new file mode 100644 index 000000000..a7fa1c523 --- /dev/null +++ b/private/inc/ipxfwd.h @@ -0,0 +1,253 @@ +/*++ + +Copyright (c) 1995 Microsoft Corporation + +Module Name: + + private\inc\ipxfwd.h + +Abstract: + Router Manager Interface to IPX Forwarder Driver + + +Author: + + Vadim Eydelman + +Revision History: + +--*/ + +#ifndef _IPXFWD_ +#define _IPXFWD_ + +#define FWD_INTERNAL_INTERFACE_INDEX 0 + +// Forwarder interface statistic structure +typedef struct _FWD_IF_STATS { + ULONG OperationalState; // Real state of the interface +#define FWD_OPER_STATE_UP 0 +#define FWD_OPER_STATE_DOWN 1 +#define FWD_OPER_STATE_SLEEPING 2 + ULONG MaxPacketSize; // Maximum packet size allowed on the intf + ULONG InHdrErrors; // Num. of packets received with header errors + ULONG InFiltered; // Num. of received packets that were filtered out + ULONG InNoRoutes; // Num, of received packets with unknonw dest. + ULONG InDiscards; // Num. of received packets discarded for other reasons + ULONG InDelivers; // Num. of received packets delivered to dest + ULONG OutFiltered; // Num. of sent packets fitered out + ULONG OutDiscards; // Num. of sent packets discarded for other reasons + ULONG OutDelivers; // Num. of sent packets delivered to dest + ULONG NetbiosReceived; // Num. of received Netbios packets + ULONG NetbiosSent; // Num. of sent Netbios packets + } FWD_IF_STATS, *PFWD_IF_STATS; + + +typedef struct _FWD_ADAPTER_BINDING_INFO { + ULONG AdapterIndex; + ULONG Network; + UCHAR LocalNode[6]; + UCHAR RemoteNode[6]; + ULONG MaxPacketSize; + ULONG LinkSpeed; + } FWD_ADAPTER_BINDING_INFO, *PFWD_ADAPTER_BINDING_INFO; + +typedef struct FWD_NB_NAME { + UCHAR Name[16]; +} FWD_NB_NAME, *PFWD_NB_NAME; + +typedef struct _FWD_PERFORMANCE { + LONGLONG TotalPacketProcessingTime; + LONGLONG TotalNbPacketProcessingTime; + LONGLONG MaxPacketProcessingTime; + LONGLONG MaxNbPacketProcessingTime; + LONG PacketCounter; + LONG NbPacketCounter; +} FWD_PERFORMANCE, *PFWD_PERFORMANCE; + +typedef struct _FWD_DIAL_REQUEST { + ULONG IfIndex; + UCHAR Packet[30]; +} FWD_DIAL_REQUEST, *PFWD_DIAL_REQUEST; + +#define IPXFWD_NAME L"\\Device\\NwLnkFwd" + +// +// Define the various device type values. Note that values used by Microsoft +// Corporation are in the range 0-32767, and 32768-65535 are reserved for use +// by customers. +// + +#define FILE_DEVICE_IPXFWD FILE_DEVICE_NETWORK + + + +// +// Macro definition for defining IOCTL and FSCTL function control codes. Note +// that function codes 0-2047 are reserved for Microsoft Corporation, and +// 2048-4095 are reserved for customers. +// + +#define IPXFWD_IOCTL_INDEX (ULONG)0x00000800 + +// +// Define our own private IOCTLs +// + +// Adds interface to the forwarder table, FWD_IF_SET_PARAMS should be passed in +// the input buffer +#define IOCTL_FWD_CREATE_INTERFACE \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+1,METHOD_BUFFERED,FILE_ANY_ACCESS) + +// Deletes interface from the forwarder table, Interface index should be passed in +// the input buffer +#define IOCTL_FWD_DELETE_INTERFACE \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+2,METHOD_BUFFERED,FILE_ANY_ACCESS) + +// Sets interface parameters, FWD_IF_SET_PARAMS should be passed in +// the input buffer +#define IOCTL_FWD_SET_INTERFACE \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+3,METHOD_BUFFERED,FILE_ANY_ACCESS) + +// Gets interface parameters, FWD_IF_GET_PARAMS will be returned in +// the input buffer +#define IOCTL_FWD_GET_INTERFACE \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+4,METHOD_BUFFERED,FILE_ANY_ACCESS) + +// Binds interface to physical adapter, FWD_IF_BIND_PARAMS should be passed in +// the input buffer +#define IOCTL_FWD_BIND_INTERFACE \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+5,METHOD_BUFFERED,FILE_ANY_ACCESS) + +// Unbinds interface from the adapter, Interface index should be passed in +// the input buffer +#define IOCTL_FWD_UNBIND_INTERFACE \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+6,METHOD_BUFFERED,FILE_ANY_ACCESS) + +// Disables forwarder operations in the interface, Interface index should be +// passed in the input buffer +#define IOCTL_FWD_DISABLE_INTERFACE \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+7,METHOD_BUFFERED,FILE_ANY_ACCESS) + +// Enables forwarder operations in the interface, Interface index should be +// passed in the input buffer +#define IOCTL_FWD_ENABLE_INTERFACE \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+8,METHOD_BUFFERED,FILE_ANY_ACCESS) + +// Sets netbios names in to resolve netbios broadcasts to this interface, +// Interface index should be passed in the input buffer, +// FWD_NB_NAMES_PARAMS structure should be passed in the output buffer +#define IOCTL_FWD_SET_NB_NAMES \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+9,METHOD_IN_DIRECT,FILE_ANY_ACCESS) + +// Resets netbios names on the interface (deletes all of them). +// Interface index should be passed in the input buffer, +#define IOCTL_FWD_RESET_NB_NAMES \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+9,METHOD_BUFFERED,FILE_ANY_ACCESS) + +// Sets netbios names in to resolve netbios broadcasts to this interface, +// Interface index should be passed in the input buffer, +// FWD_NB_NAMES_PARAMS structure will be returned in the output buffer +#define IOCTL_FWD_GET_NB_NAMES \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+10,METHOD_OUT_DIRECT,FILE_ANY_ACCESS) + +// Adds/deletes/updates routes in forwarder table, array of FWD_ROUTE_SET_PARAMS +// should be passed in the input buffer. Returns number of processed routes in the +// ioStatus.Information field +#define IOCTL_FWD_SET_ROUTES \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+11,METHOD_BUFFERED,FILE_ANY_ACCESS) + +// Returns forwarder dial requests, FWD_DIAL_REQUEST_PARAMS structure +// for interfaces for which connection should be established returned +// in the output buffer (number of bytest returned is placed in the +// Information field of IO_STATUS block) +#define IOCTL_FWD_GET_DIAL_REQUEST \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+12,METHOD_BUFFERED,FILE_ANY_ACCESS) + +// Informs forwarder that its connection request could not be satisfied, +// Interface index should be passed in the input buffer +#define IOCTL_FWD_DIAL_REQUEST_FAILED \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+13,METHOD_BUFFERED,FILE_ANY_ACCESS) + +// Initializes and start forwarder +// FWD_START_PARAMS structure should be passed in the input buffer +#define IOCTL_FWD_START \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+14,METHOD_BUFFERED,FILE_ANY_ACCESS) + +#define IOCTL_FWD_GET_PERF_COUNTERS \ + CTL_CODE(FILE_DEVICE_IPXFWD,IPXFWD_IOCTL_INDEX+15,METHOD_BUFFERED,FILE_ANY_ACCESS) + +// Structure passed with IOCTL_FWD_CREATE_INTERFACE call +typedef struct _FWD_IF_CREATE_PARAMS { + ULONG Index; // Interface index + BOOLEAN NetbiosAccept; // Whether to accept nb packets + UCHAR NetbiosDeliver; // NB deliver mode +// Forwarder netbios broadcast delivery options +#define FWD_NB_DONT_DELIVER 0 +#define FWD_NB_DELIVER_STATIC 1 +#define FWD_NB_DELIVER_IF_UP 2 +#define FWD_NB_DELIVER_ALL 3 + UCHAR InterfaceType; // Interface type +// Forwarder interface types +#define FWD_IF_PERMANENT 0 +#define FWD_IF_DEMAND_DIAL 1 +#define FWD_IF_LOCAL_WORKSTATION 2 +#define FWD_IF_REMOTE_WORKSTATION 3 +} FWD_IF_CREATE_PARAMS, *PFWD_IF_CREATE_PARAMS; + +// Structure passed with IOCTL_FWD_SET_INTERFACE call +typedef struct _FWD_IF_SET_PARAMS { + ULONG Index; // Interface index + BOOLEAN NetbiosAccept; // Whether to accept nb packets + UCHAR NetbiosDeliver; // NB deliver mode +} FWD_IF_SET_PARAMS, *PFWD_IF_SET_PARAMS; + +// Structure returned in IOCTL_FWD_GET_INTERFACE call +typedef struct _FWD_IF_GET_PARAMS { + FWD_IF_STATS Stats; // Interface statistics + BOOLEAN NetbiosAccept; // Whether to accept nb packets + UCHAR NetbiosDeliver; // NB deliver mode +} FWD_IF_GET_PARAMS, *PFWD_IF_GET_PARAMS; + +// Structure returned in IOCTL_FWD_BIND_INTERFACE call +typedef struct _FWD_IF_BIND_PARAMS { + ULONG Index; // Interface index + FWD_ADAPTER_BINDING_INFO Info; // Interface binding information +} FWD_IF_BIND_PARAMS, *PFWD_IF_BIND_PARAMS; + +// Structure passed with IOCTL_FWD_SET_ROUTES call +typedef struct _FWD_ROUTE_SET_PARAMS { + ULONG Network; // Route's destination network + UCHAR NextHopAddress[6]; // Node address of the next hop + // router if network is not + // connected directly + USHORT TickCount; + USHORT HopCount; + ULONG InterfaceIndex; // Interface to use to route to + // the dest network + ULONG Action; // Action to take with the route: +#define FWD_ADD_ROUTE 0 // route should be added to the table +#define FWD_DELETE_ROUTE 1 // route should be deleted from the table +#define FWD_UPDATE_ROUTE 2 // route should be updated +} FWD_ROUTE_SET_PARAMS, *PFWD_ROUTE_SET_PARAMS; + +typedef struct _FWD_START_PARAMS { + ULONG RouteHashTableSize; // Size of route hash table + BOOLEAN ThisMachineOnly; // allow access to this machine only + // for dialin clients +#define FWD_SMALL_ROUTE_HASH_SIZE 31 +#define FWD_MEDIUM_ROUTE_HASH_SIZE 257 +#define FWD_LARGE_ROUTE_HASH_SIZE 1027 +} FWD_START_PARAMS, *PFWD_START_PARAMS; + +typedef struct _FWD_NB_NAMES_PARAMS { + ULONG TotalCount; + FWD_NB_NAME Names[1]; +} FWD_NB_NAMES_PARAMS, *PFWD_NB_NAMES_PARAMS; + +typedef struct _FWD_PERFORMANCE FWD_PERFORMANCE_PARAMS, *PFWD_PERFORMANCE_PARAMS; + + + +#endif + |