/*++

Copyright (c) 1995 Microsoft Corporation

Module Name:

    rtrprot.h

Abstract:

    This module contains the internal prototypes

Author:

    Stefan Solomon  03/03/1995

Revision History:


--*/

#ifndef _RTRPROT_
#define _RTRPROT_

//
// *** Internal Prototypes ***
//

DWORD
GetIpxRouterParameters(VOID);

VOID
InitIfDB(VOID);

VOID
InitAdptDB(VOID);

DWORD
FwInitialize(VOID);

DWORD
StartAdapterManager(VOID);

VOID
StopAdapterManager(VOID);

DWORD
SetGlobalInfo(LPVOID);

DWORD
AddInterface(
	    IN	LPWSTR		    InterfaceNamep,
	    IN	LPVOID		    InterfaceInfop,
	    IN	INTERFACE_TYPE	    InterfaceType,
	    IN	HANDLE		    hDDMInterface,
	    IN OUT HANDLE	    *phInterface);

DWORD
DeleteInterface(HANDLE	InterfaceIndex);

DWORD
GetInterfaceInfo(
	    IN	HANDLE	    InterfaceIndex,
	    OUT LPVOID	    InterfaceInfo,
	    IN OUT DWORD    *InterfaceInfoSize);


DWORD
SetInterfaceInfo(
		IN  HANDLE	InterfaceIndex,
		IN  LPVOID	InterfaceInfop);


DWORD APIENTRY
InterfaceConnected (
    IN      HANDLE          hInterface,
    IN      PVOID           pFilter,
    IN      PVOID           pPppProjectionResult
    );

VOID
InterfaceDisconnected(
		IN HANDLE Interface);

DWORD
InterfaceNotReachable(
		IN  HANDLE			      Interface,
		IN  UNREACHABILITY_REASON	      Reason);

DWORD
InterfaceReachable(
		IN  HANDLE	Interface);

VOID
UpdateCompleted(PUPDATE_COMPLETE_MESSAGE    ucmsgp);


DWORD
SetGlobalInfo(
                IN      LPVOID          pGlobalInfo );

VOID
AdapterNotification(VOID);

VOID
ForwarderNotification(VOID);

LPVOID
GetInfoEntry(PIPX_INFO_BLOCK_HEADER	InterfaceInfop,
	     ULONG			InfoEntryType);

DWORD
CreateStaticRoute(PICB			    icbp,
		  PIPX_STATIC_ROUTE_INFO    StaticRouteInfop);

DWORD
DeleteStaticRoute(ULONG			    IfIndex,
		  PIPX_STATIC_ROUTE_INFO    StaticRouteInfop);

PICB
GetInterfaceByName(LPWSTR	    InterfaceNamep);

PICB
GetInterfaceByIndex(ULONG	    InterfaceIndex);

PIPX_TOC_ENTRY
GetTocEntry(PIPX_INFO_BLOCK_HEADER HeaderInfop,
	    ULONG		   InfoType);

VOID
AddIfToDB(PICB	   icbp);

VOID
RemoveIfFromDB(PICB	icbp);

PACB
GetAdapterByNameAndPktType (LPWSTR 	    AdapterName, ULONG PacketType);

VOID
BindInterfaceToAdapter(PICB	   icbp,
		       PACB	   acbp);

VOID
UnbindInterfaceFromAdapter(PICB	icbp);

VOID
DeleteAllStaticRoutes(ULONG	    InterfaceIndex);

DWORD
UpdateStaticIfEntries(
		PICB	 icbp,
		HANDLE	 EnumHandle,	     // handle for the get next enumeration
		ULONG	 StaticEntrySize,
		ULONG	 NewStaticEntriesCount,  // number of new static entries
		LPVOID	 NewStaticEntry,	 // start of the new entries array
		ULONG	 (*GetNextStaticEntry)(HANDLE EnumHandle, LPVOID entry),
		ULONG	 (*DeleteStaticEntry)(ULONG IfIndex, LPVOID entry),
		ULONG	 (*CreateStaticEntry)(PICB icbp, LPVOID entry));

HANDLE
CreateStaticRoutesEnumHandle(ULONG    InterfaceIndex);

DWORD
GetNextStaticRoute(HANDLE EnumHandle, PIPX_STATIC_ROUTE_INFO StaticRtInfop);

VOID
CloseStaticRoutesEnumHandle(HANDLE EnumHandle);

HANDLE
CreateStaticServicesEnumHandle(ULONG	InterfaceIndex);

DWORD
GetNextStaticService(HANDLE EnumHandle, PIPX_STATIC_SERVICE_INFO StaticSvInfop);

DWORD
CloseStaticServicesEnumHandle(HANDLE EnumHandle);

DWORD
DeleteAllStaticServices(ULONG	InterfaceIndex);

PACB
GetAdapterByIndex(ULONG     AdapterIndex);

PICB
GetInterfaceByAdapterName(LPWSTR	AdapterName);

DWORD
CreateLocalRoute(PICB	icbp);

DWORD
DeleteLocalRoute(PICB	icbp);

VOID
GetInterfaceAnsiName(PUCHAR	    AnsiInterfaceNameBuffer,
		     PWSTR	    UnicodeInterfaceNameBuffer);
VOID
InitIfDB(VOID);

VOID
AddToAdapterHt(PACB	acbp);

VOID
RemoveFromAdapterHt(PACB	acbp);

BOOL
RtCreateTimer(IN PHANDLE  TimerHandlep);

BOOL
RtDestroyTimer(IN HANDLE	TimerHandle);

BOOL
RtSetTimer(
    IN HANDLE TimerHandle,
    IN ULONG MillisecondsToExpire,
    IN PTIMER_APC_ROUTINE  TimerRoutine,
    IN PVOID Context
    );

BOOL
RtCancelTimer(
	  IN HANDLE	TimerHandle
    );


DWORD
StartRoutingProtocols(HANDLE RoutesUpdateEvent, HANDLE ServicesUpdateEvent);

VOID
StopRoutingProtocols(VOID);

DWORD
CreateRoutingProtocolsInterfaces(PIPX_INFO_BLOCK_HEADER     InterfaceInfop,
				 PICB			    icbp);

DWORD
DeleteRoutingProtocolsInterfaces(ULONG	    InterfaceIndex);

ULONG
SizeOfRoutingProtocolsIfsInfo(ULONG    InterfaceIndex);

ULONG
RoutingProtocolsTocCount(VOID);

DWORD
CreateRoutingProtocolsTocAndInfoEntries(PIPX_INFO_BLOCK_HEADER	    ibhp,
					ULONG			    InterfaceIndex,
					PIPX_TOC_ENTRY		    *current_tocepp,
					PULONG			    current_NextInfoOffsetp);

DWORD
SetRoutingProtocolsInterfaces(PIPX_INFO_BLOCK_HEADER	   InterfaceInfop,
				 ULONG			    InterfaceIndex);

DWORD
BindRoutingProtocolsIfsToAdapter(ULONG			  InterfaceIndex,
				 PIPX_ADAPTER_BINDING_INFO	  abip);

DWORD
UnbindRoutingProtocolsIfsFromAdapter(ULONG	InterfaceIndex);

DWORD
CreateStaticService(PICB			    icbp,
		    PIPX_STATIC_SERVICE_INFO	ServiceEntry);

DWORD
DeleteStaticService(ULONG			InterfaceIndex,
		    PIPX_STATIC_SERVICE_INFO	ServiceEntry);


DWORD
GetFirstService(IN  DWORD	      OrderingMethod,
		IN  DWORD	      ExclusionFlags,
		IN  OUT PIPX_SERVICE Service);

DWORD
GetNextService(IN  DWORD	      OrderingMethod,
		IN  DWORD	      ExclusionFlags,
		IN  OUT PIPX_SERVICE Service);

BOOL
IsService(USHORT	    Type,
	 PUCHAR 	    Name,
	 PIPX_SERVICE	    Service);

DWORD
GetRoute(ULONG		RoutingTable,
	 PIPX_ROUTE	IpxRoutep);

DWORD
GetFirstRoute(ULONG		   RoutingTable,
	      PIPX_ROUTE	   IpxRoutep);

DWORD
GetNextRoute(ULONG		    RoutingTable,
	     PIPX_ROUTE 	    IpxRoutep);

BOOL
IsRoute(PUCHAR	    Network);

DWORD
InitWanNetConfigDbase(VOID);

ULONG
GetNextInterfaceIndex(VOID);

DWORD
CreateGlobalRoute(PUCHAR	  Network);

DWORD
DeleteGlobalRoute(PUCHAR    Network);


DWORD
RtProtRequestRoutesUpdate(ULONG    InterfaceIndex);

DWORD
RtProtRequestServicesUpdate(ULONG   InterfaceIndex);

DWORD
RtProtSendRoutesUpdate(ULONG	   InterfaceIndex);

DWORD
RtProtSendServicesUpdate(ULONG	 InterfaceIndex);

VOID
RtProtCancelRoutesUpdate(ULONG	    InterfaceIndex);

VOID
RtProtCancelServicesUpdate(ULONG    InterfaceIndex);

VOID
CancelUpdateRequest(HANDLE   hInterface);

DWORD
GetDIMUpdateResult(HANDLE    InterfaceIndex,
		   LPDWORD   UpdateResultp);

VOID
InitUpdateCbs(PICB	icbp);

VOID
AdminEnable(PICB   icbp);

VOID
AdminDisable(PICB   icbp);

VOID
DestroyAllAdapters(VOID);

VOID
DestroyAllInterfaces(VOID);

DWORD
GetServiceCount(VOID);

DWORD
MibCreate(ULONG 	ProtocolId,
	  ULONG 	InputDataSize,
	  PVOID 	InputData);

DWORD
MibDelete(ULONG		ProtocolId,
	  ULONG 	InputDataSize,
	  PVOID 	InputData);
DWORD
MibSet(ULONG		ProtocolId,
       ULONG		InputDataSize,
       PVOID		InputData);

DWORD
MibGet(ULONG		ProtocolId,
       ULONG		InputDataSize,
       PVOID		InputData,
       PULONG		OutputDataSize,
       PVOID		OutputData);

DWORD
MibGetFirst(ULONG		ProtocolId,
       ULONG		InputDataSize,
       PVOID		InputData,
       PULONG		OutputDataSize,
       PVOID		OutputData);
DWORD
MibGetNext(ULONG	ProtocolId,
       ULONG		InputDataSize,
       PVOID		InputData,
       PULONG		OutputDataSize,
       PVOID		OutputData);

DWORD
RequestUpdate(IN HANDLE	    InterfaceIndex,
	      IN HANDLE     hEvent);

DWORD
GetStaticServicesCount(ULONG	    InterfaceIndex);

DWORD
GetStaticRoutesCount(ULONG	    InterfaceIndex);

VOID
DestroyRoutingProtocolCB(PRPCB		   rpcbp);

PRPCB
GetRoutingProtocolCB(DWORD	ProtocolId);

VOID
ConvertAllProtocolRoutesToStatic(ULONG	    InterfaceIndex,
			      ULONG	    RoutingProtocolId);

VOID
ConvertAllServicesToStatic(ULONG	InterfaceIndex);

DWORD
SetRoutingProtocolsGlobalInfo(PIPX_INFO_BLOCK_HEADER	   GlobalInfop);

DWORD
CreateRouteTable(VOID);

DWORD
EnumerateFirstInterfaceIndex(PULONG InterfaceIndexp);

DWORD
EnumerateNextInterfaceIndex(PULONG InterfaceIndexp);

DWORD
RoutingProtocolsEnableIpxInterface(ULONG	    InterfaceIndex);

DWORD
RoutingProtocolsDisableIpxInterface(ULONG	    InterfaceIndex);

DWORD
FwEnableIpxInterface(ULONG	    InterfaceIndex);

DWORD
FwDisableIpxInterface(ULONG	    InterfaceIndex);

DWORD
RoutingProtocolConnectionRequest(ULONG	    ProtocolId,
				 ULONG	    InterfaceIndex);
VOID
DisableStaticRoutes(ULONG	    InterfaceIndex);

VOID
DisableStaticRoute(ULONG	    InterfaceIndex, PUCHAR Network);

VOID
EnableStaticRoutes(ULONG	    InterfaceIndex);

VOID
ExternalEnableInterface(ULONG	    InterfaceIndex);

VOID
ExternalDisableInterface(ULONG	    InterfaceIndex);

NET_INTERFACE_TYPE
MapIpxToNetInterfaceType(PICB		icbp);

VOID
StartTracing(VOID);

VOID
Trace(ULONG	ComponentID,
      char	*Format,
      ...);

VOID
StopTracing(VOID);

DWORD
RmCreateGlobalRoute(PUCHAR	    Network);

DWORD
RmAddLocalWkstaDialoutInterface(
	    IN	    LPWSTR		    InterfaceNamep,
	    IN	    LPVOID		    InterfaceInfop,
	    IN OUT  PULONG		    InterfaceIndexp);

DWORD
RmDeleteLocalWkstaDialoutInterface(ULONG	InterfaceIndex);

DWORD
RmGetIpxwanInterfaceConfig(ULONG	InterfaceIndex,
			   PULONG	IpxwanConfigRequired);

BOOL
RmIsRoute(PUCHAR	Network);

DWORD
RmGetInternalNetNumber(PUCHAR	    Network);

DWORD 
RmUpdateIpxcpConfig (PIPXCP_ROUTER_CONFIG_PARAMS pParams);

DWORD
I_SetFilters(ULONG	    InterfaceIndex,
	     ULONG	    FilterMode, // inbound or outbound
	     LPVOID	    FilterInfop);

DWORD
I_GetFilters(ULONG	    InterfaceIndex,
	     ULONG	    FilterMode,
	     LPVOID	    FilterInfop,
	     PULONG	    FilterInfoSize);

DWORD
DeleteRouteTable(VOID);

#endif