509 lines
13 KiB
C
509 lines
13 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1995 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
net\routing\ipx\sap\intfdb.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Header file for interface maintenance module.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Vadim Eydelman 05-15-1995
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
#ifndef _SAP_INTFDB_
|
||
|
#define _SAP_INTFDB_
|
||
|
|
||
|
#define INTERNAL_INTERFACE_INDEX 0L
|
||
|
#define INTERNAL_ADAPTER_INDEX 0L
|
||
|
#define INVALID_ADAPTER_INDEX 0xFFFFFFFFL
|
||
|
#define INVALID_INTERFACE_INDEX 0xFFFFFFFFL
|
||
|
|
||
|
// Number of additional recv requests to post when binding the interface
|
||
|
// that has listen enabled
|
||
|
extern ULONG NewRequestsPerInterface;
|
||
|
|
||
|
// Default filtering mode (for standalone service only)
|
||
|
extern UCHAR FilterOutMode;
|
||
|
|
||
|
// Externally visible part of interface control block
|
||
|
typedef struct _INTERFACE_DATA {
|
||
|
LPWSTR name; // Name
|
||
|
ULONG index; // Unique index
|
||
|
BOOLEAN enabled; // enabled flag
|
||
|
UCHAR filterOut; // supply filtering node
|
||
|
UCHAR filterIn; // listen filtering node
|
||
|
#define SAP_DONT_FILTER 0
|
||
|
#define SAP_FILTER_PERMIT IPX_SERVICE_FILTER_PERMIT
|
||
|
#define SAP_FILTER_DENY IPX_SERVICE_FILTER_DENY
|
||
|
|
||
|
#if ((SAP_DONT_FILTER==SAP_FILTER_PERMIT) || (SAP_DONT_FILTER==SAP_FILTER_DENY))
|
||
|
#error "Sap filter constant mismatch!!!!"
|
||
|
#endif
|
||
|
|
||
|
SAP_IF_INFO info; // Configuration info
|
||
|
IPX_ADAPTER_BINDING_INFO adapter; // Net params of adapter
|
||
|
// to which interface is bound
|
||
|
SAP_IF_STATS stats; // Interface statistics
|
||
|
} INTERFACE_DATA, *PINTERFACE_DATA;
|
||
|
|
||
|
// Exported internal network parameters
|
||
|
extern UCHAR INTERNAL_IF_NODE[6];
|
||
|
extern UCHAR INTERNAL_IF_NET[4];
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
C r e a t e I n t e r f a c e T a b l e
|
||
|
|
||
|
Routine Description:
|
||
|
Allocates resources for interface table
|
||
|
|
||
|
Arguments:
|
||
|
None
|
||
|
Return Value:
|
||
|
NO_ERROR - resources were allocated successfully
|
||
|
other - reason of failure (windows error code)
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
DWORD
|
||
|
CreateInterfaceTable (
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
S h u t d o w n I n t e r f a c e s
|
||
|
|
||
|
Routine Description:
|
||
|
Initiates orderly shutdown of SAP interfaces
|
||
|
Stop reception of new packets
|
||
|
Arguments:
|
||
|
None
|
||
|
Return Value:
|
||
|
None
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
VOID
|
||
|
ShutdownInterfaces (
|
||
|
HANDLE doneEvent
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
S t o p I n t e r f a c e s
|
||
|
|
||
|
Routine Description:
|
||
|
Stops all sap interfaces if not already stopped.
|
||
|
Arguments:
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
None
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
VOID
|
||
|
StopInterfaces (
|
||
|
void
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
D e l e t e I n t e r f a c e T a b l e
|
||
|
|
||
|
Routine Description:
|
||
|
Release all resources associated with interface table
|
||
|
|
||
|
Arguments:
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
NO_ERROR - operation completed OK
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
VOID
|
||
|
DeleteInterfaceTable (
|
||
|
void
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
S a p C r e a t e S a p I n t e r f a c e
|
||
|
|
||
|
Routine Description:
|
||
|
Add interface control block for new interface
|
||
|
|
||
|
Arguments:
|
||
|
InterfaceIndex - unique number that indentifies new interface
|
||
|
SapIfConfig - interface configuration info
|
||
|
|
||
|
Return Value:
|
||
|
NO_ERROR - interface was created OK
|
||
|
ERROR_ALREADY_EXISTS - interface with this index already exists
|
||
|
other - operation failed (windows error code)
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
DWORD
|
||
|
SapCreateSapInterface (
|
||
|
LPWSTR InterfaceName,
|
||
|
ULONG InterfaceIndex,
|
||
|
NET_INTERFACE_TYPE InterfaceType,
|
||
|
PSAP_IF_INFO SapIfConfig
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
S a p D e l e t e S a p I n t e r f a c e
|
||
|
|
||
|
Routine Description:
|
||
|
Delete existing interface control block
|
||
|
|
||
|
Arguments:
|
||
|
InterfaceIndex - unique number that indentifies the interface
|
||
|
|
||
|
Return Value:
|
||
|
NO_ERROR - interface was created OK
|
||
|
IPX_ERROR_NO_INTERFACE - interface with this index does not exist
|
||
|
other - operation failed (windows error code)
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
DWORD
|
||
|
SapDeleteSapInterface (
|
||
|
ULONG InterfaceIndex
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
S a p G e t S a p I n t e r f a c e
|
||
|
|
||
|
Routine Description:
|
||
|
Retrieves configuration and statistic info associated with interface
|
||
|
Arguments:
|
||
|
InterfaceIndex - unique number that indentifies new interface
|
||
|
SapIfConfig - buffer to store configuration info
|
||
|
SapIfStats - buffer to store statistic info
|
||
|
Return Value:
|
||
|
NO_ERROR - info was retrieved OK
|
||
|
IPX_ERROR_NO_INTERFACE - interface with this index does not exist
|
||
|
other - operation failed (windows error code)
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
|
||
|
DWORD
|
||
|
SapGetSapInterface (
|
||
|
IN ULONG InterfaceIndex,
|
||
|
OUT PSAP_IF_INFO SapIfConfig OPTIONAL,
|
||
|
OUT PSAP_IF_STATS SapIfStats OPTIONAL
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
S a p S e t S a p I n t e r f a c e
|
||
|
|
||
|
Routine Description:
|
||
|
Compares existing interface configuration with the new one and
|
||
|
performs an update if necessary.
|
||
|
Arguments:
|
||
|
InterfaceIndex - unique number that indentifies new interface
|
||
|
SapIfConfig - new interface configuration info
|
||
|
Return Value:
|
||
|
NO_ERROR - config info was changed OK
|
||
|
IPX_ERROR_NO_INTERFACE - interface with this index does not exist
|
||
|
other - operation failed (windows error code)
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
DWORD
|
||
|
SapSetSapInterface (
|
||
|
ULONG InterfaceIndex,
|
||
|
PSAP_IF_INFO SapIfConfig
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
S a p S e t I n t e r f a c e E n a b l e
|
||
|
|
||
|
Routine Description:
|
||
|
Enables/disables interface
|
||
|
Arguments:
|
||
|
InterfaceIndex - unique number that indentifies new interface
|
||
|
Enable - TRUE-enable, FALSE-disable
|
||
|
Return Value:
|
||
|
NO_ERROR - config info was changed OK
|
||
|
IPX_ERROR_NO_INTERFACE - interface with this index does not exist
|
||
|
other - operation failed (windows error code)
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
DWORD
|
||
|
SapSetInterfaceEnable (
|
||
|
ULONG InterfaceIndex,
|
||
|
BOOL Enable
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
S a p S e t I n t e r f a c e F i l t e r s
|
||
|
|
||
|
Routine Description:
|
||
|
Compares existing interface configuration with the new one and
|
||
|
performs an update if necessary.
|
||
|
Arguments:
|
||
|
Return Value:
|
||
|
NO_ERROR - config info was changed OK
|
||
|
ERROR_INVALID_PARAMETER - interface with this index does not exist
|
||
|
other - operation failed (windows error code)
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
DWORD
|
||
|
SapSetInterfaceFilters (
|
||
|
IN ULONG InterfaceIndex,
|
||
|
IN PSAP_IF_FILTERS SapIfFilters
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
S a p G e t I n t e r f a c e F i l t e r s
|
||
|
|
||
|
Routine Description:
|
||
|
Compares existing interface configuration with the new one and
|
||
|
performs an update if necessary.
|
||
|
Arguments:
|
||
|
Return Value:
|
||
|
NO_ERROR - config info was changed OK
|
||
|
ERROR_INVALID_PARAMETER - interface with this index does not exist
|
||
|
other - operation failed (windows error code)
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
DWORD
|
||
|
SapGetInterfaceFilters (
|
||
|
IN ULONG InterfaceIndex,
|
||
|
OUT PSAP_IF_FILTERS SapIfFilters,
|
||
|
OUT PULONG FilterBufferSize
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
S a p B i n d S a p I n t e r f a c e T o A d a p t e r
|
||
|
|
||
|
Routine Description:
|
||
|
Establishes association between interface and physical adapter
|
||
|
and starts sap on the interface if its admin state is enabled
|
||
|
Arguments:
|
||
|
InterfaceIndex - unique number that indentifies new interface
|
||
|
AdapterInfo - info associated with adapter to bind to
|
||
|
Return Value:
|
||
|
NO_ERROR - interface was bound OK
|
||
|
IPX_ERROR_NO_INTERFACE - interface with this index does not exist
|
||
|
other - operation failed (windows error code)
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
DWORD
|
||
|
SapBindSapInterfaceToAdapter (
|
||
|
ULONG InterfaceIndex,
|
||
|
PIPX_ADAPTER_BINDING_INFO AdptInternInfo
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
S a p U n b i n d S a p I n t e r f a c e F r o m A d a p t e r
|
||
|
|
||
|
Routine Description:
|
||
|
Breaks association between interface and physical adapter
|
||
|
and stops sap on the interface if it was on
|
||
|
Arguments:
|
||
|
InterfaceIndex - unique number that indentifies new interface
|
||
|
Return Value:
|
||
|
NO_ERROR - interface was bound OK
|
||
|
IPX_ERROR_NO_INTERFACE - interface with this index does not exist
|
||
|
other - operation failed (windows error code)
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
DWORD
|
||
|
SapUnbindSapInterfaceFromAdapter (
|
||
|
ULONG InterfaceIndex
|
||
|
);
|
||
|
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
S a p R e q u e s t U p d a t e
|
||
|
Routine Description:
|
||
|
Initiates update of services information over the interface
|
||
|
Completion of this update will be indicated by signalling
|
||
|
NotificationEvent passed at StartProtocol. GetEventMessage
|
||
|
can be used then to get the results of autostatic update
|
||
|
Arguments:
|
||
|
InterfaceIndex - unique index identifying interface to do
|
||
|
update on
|
||
|
Return Value:
|
||
|
NO_ERROR - operation was initiated ok
|
||
|
ERROR_INVALID_PARAMETER - the interface does not support updates
|
||
|
IPX_ERROR_NO_INTERFACE - interface with this index does not exist
|
||
|
other - operation failed (windows error code)
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
DWORD
|
||
|
SapRequestUpdate (
|
||
|
ULONG InterfaceIndex
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
S a p G e t F i r s t S a p I n t e r f a c e
|
||
|
|
||
|
Routine Description:
|
||
|
Retrieves configuration and statistic info associated with first
|
||
|
interface in InterfaceIndex order
|
||
|
Arguments:
|
||
|
InterfaceIndex - buffer to store unique number that indentifies interface
|
||
|
SapIfConfig - buffer to store configuration info
|
||
|
SapIfStats - buffer to store statistic info
|
||
|
Return Value:
|
||
|
NO_ERROR - info was retrieved OK
|
||
|
IPX_ERROR_NO_INTERFACE - no interfaces in the table
|
||
|
other - operation failed (windows error code)
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
|
||
|
DWORD
|
||
|
SapGetFirstSapInterface (
|
||
|
OUT PULONG InterfaceIndex,
|
||
|
OUT PSAP_IF_INFO SapIfConfig OPTIONAL,
|
||
|
OUT PSAP_IF_STATS SapIfStats OPTIONAL
|
||
|
);
|
||
|
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
S a p G e t N e x t S a p I n t e r f a c e
|
||
|
|
||
|
Routine Description:
|
||
|
Retrieves configuration and statistic info associated with first
|
||
|
interface in following interface with InterfaceIndex order in interface
|
||
|
index order
|
||
|
Arguments:
|
||
|
InterfaceIndex - on input - interface number to search from
|
||
|
on output - interface number of next interface
|
||
|
SapIfConfig - buffer to store configuration info
|
||
|
SapIfStats - buffer to store statistic info
|
||
|
Return Value:
|
||
|
NO_ERROR - info was retrieved OK
|
||
|
IPX_ERROR_NO_INTERFACE - no more interfaces in the table
|
||
|
other - operation failed (windows error code)
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
DWORD
|
||
|
SapGetNextSapInterface (
|
||
|
IN OUT PULONG InterfaceIndex,
|
||
|
OUT PSAP_IF_INFO SapIfConfig OPTIONAL,
|
||
|
OUT PSAP_IF_STATS SapIfStats OPTIONAL
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
A c q u i r e I n t e r f a c e R e f e n c e
|
||
|
|
||
|
Routine Description:
|
||
|
Increments reference count of interface block.
|
||
|
If reference count is grater than 0, the externally visible
|
||
|
data in the block are locked (can't be modified)
|
||
|
|
||
|
Arguments:
|
||
|
intf - pointer to externally visible part of interface control block
|
||
|
|
||
|
Return Value:
|
||
|
None
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
VOID
|
||
|
AcquireInterfaceReference (
|
||
|
IN PINTERFACE_DATA intf
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
R e l e a s e I n t e r f a c e R e f e n c e
|
||
|
|
||
|
Routine Description:
|
||
|
Decrements reference count of interface block.
|
||
|
When reference count drops to 0, cleanup routine gets called to
|
||
|
dispose of all resources allocated at bind time and if interface
|
||
|
control block is already removed from the table it gets disposed of
|
||
|
as well
|
||
|
|
||
|
Arguments:
|
||
|
intf - pointer to externally visible part of interface control block
|
||
|
|
||
|
Return Value:
|
||
|
None
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
VOID
|
||
|
ReleaseInterfaceReference (
|
||
|
IN PINTERFACE_DATA intf
|
||
|
);
|
||
|
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
G e t I n t e r f a c e R e f e r e n c e
|
||
|
|
||
|
Routine Description:
|
||
|
Finds interface control block that bound to adapter and increments reference
|
||
|
count on it (to prevent it from deletion while it is used).
|
||
|
Arguments:
|
||
|
AdapterIndex - unique number that indentifies adapter
|
||
|
Return Value:
|
||
|
Pointer to externally visible part of interface control block
|
||
|
NULL if no interface is bound to the adapter
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
PINTERFACE_DATA
|
||
|
GetInterfaceReference (
|
||
|
ULONG AdapterIndex
|
||
|
);
|
||
|
|
||
|
/*++
|
||
|
*******************************************************************
|
||
|
S a p I s S a p I n t e r f a c e
|
||
|
|
||
|
Routine Description:
|
||
|
Checks if interface with given index exists
|
||
|
Arguments:
|
||
|
InterfaceIndex - unique number that indentifies new interface
|
||
|
Return Value:
|
||
|
TRUE - exist
|
||
|
FALSE - does not
|
||
|
|
||
|
*******************************************************************
|
||
|
--*/
|
||
|
BOOL
|
||
|
SapIsSapInterface (
|
||
|
ULONG InterfaceIndex
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
#endif
|