150 lines
3.7 KiB
C
150 lines
3.7 KiB
C
//============================================================================
|
|
// Copyright (c) 1995, Microsoft Corporation
|
|
//
|
|
// File: work.h
|
|
//
|
|
// History:
|
|
// Abolade Gbadegesin Aug-8-1995 Created.
|
|
//
|
|
// Contains structures and functions for IPRIP's work items.
|
|
//============================================================================
|
|
|
|
#ifndef _WORK_H_
|
|
#define _WORK_H_
|
|
|
|
|
|
//
|
|
// type definition of an input context
|
|
//
|
|
|
|
typedef struct _INPUT_CONTEXT {
|
|
|
|
DWORD IC_InterfaceIndex;
|
|
DWORD IC_AddrIndex;
|
|
SOCKADDR_IN IC_InputSource;
|
|
DWORD IC_InputLength;
|
|
IPRIP_PACKET IC_InputPacket;
|
|
|
|
} INPUT_CONTEXT, *PINPUT_CONTEXT;
|
|
|
|
|
|
//
|
|
// type definition of a demand-update context
|
|
//
|
|
|
|
typedef struct _UPDATE_CONTEXT {
|
|
|
|
DWORD UC_InterfaceIndex;
|
|
DWORD UC_RetryCount;
|
|
DWORD UC_RouteCount;
|
|
|
|
} UPDATE_CONTEXT, *PUPDATE_CONTEXT;
|
|
|
|
|
|
|
|
//
|
|
// these are the type definitions of the three functions
|
|
// that are in each update buffer's function table
|
|
//
|
|
|
|
typedef DWORD (*PSTART_BUFFER_ROUTINE)(PVOID);
|
|
typedef DWORD (*PADD_ENTRY_ROUTINE)(PVOID, PRIP_IP_ROUTE);
|
|
typedef DWORD (*PFINISH_BUFFER_ROUTINE)(PVOID);
|
|
|
|
|
|
//
|
|
// this is the definition of an update buffer. It includes the command
|
|
// to be put in the IPRIP packet header, the destination for the buffer,
|
|
// and the three update-buffer functions
|
|
//
|
|
|
|
typedef struct _UPDATE_BUFFER {
|
|
PIF_TABLE_ENTRY UB_ITE;
|
|
DWORD UB_AddrIndex;
|
|
DWORD UB_Address;
|
|
DWORD UB_Netmask;
|
|
SOCKET UB_Socket;
|
|
DWORD UB_Command;
|
|
DWORD UB_Length;
|
|
BYTE UB_Buffer[MAX_PACKET_SIZE];
|
|
SOCKADDR_IN UB_Destination;
|
|
DWORD UB_DestAddress;
|
|
DWORD UB_DestNetmask;
|
|
PADD_ENTRY_ROUTINE UB_AddRoutine;
|
|
PSTART_BUFFER_ROUTINE UB_StartRoutine;
|
|
PFINISH_BUFFER_ROUTINE UB_FinishRoutine;
|
|
} UPDATE_BUFFER, *PUPDATE_BUFFER;
|
|
|
|
|
|
VOID WorkerFunctionNetworkEvents(PVOID pContext);
|
|
VOID WorkerFunctionProcessTimer(PVOID pContext);
|
|
VOID WorkerFunctionProcessInput(PVOID pContext);
|
|
VOID WorkerFunctionStartFullUpdate(PVOID pContext, BOOLEAN bNotUsed);
|
|
VOID WorkerFunctionFinishFullUpdate(PVOID pContext, BOOLEAN bNotUsed);
|
|
VOID WorkerFunctionStartTriggeredUpdate(PVOID pContext);
|
|
VOID WorkerFunctionFinishTriggeredUpdate(PVOID pContext, BOOLEAN bNotUsed);
|
|
VOID WorkerFunctionStartDemandUpdate(PVOID pContext);
|
|
VOID WorkerFunctionFinishDemandUpdate(PVOID pContext, BOOLEAN bNotUsed);
|
|
VOID WorkerFunctionProcessRtmMessage(PVOID pContext);
|
|
VOID WorkerFunctionActivateInterface(PVOID pContext);
|
|
VOID WorkerFunctionDeactivateInterface(PVOID pContext);
|
|
VOID WorkerFunctionFinishStopProtocol(PVOID pContext);
|
|
VOID WorkerFunctionMibDisplay(PVOID pContext, BOOLEAN bNotUsed);
|
|
|
|
|
|
DWORD
|
|
SendRoutes(
|
|
PIF_TABLE_ENTRY pIfList[],
|
|
DWORD dwIfCount,
|
|
DWORD dwSendMode,
|
|
DWORD dwDestination,
|
|
DWORD dwAddrIndex
|
|
);
|
|
|
|
|
|
VOID
|
|
ProcessRequest(
|
|
PVOID pContext
|
|
);
|
|
|
|
|
|
VOID
|
|
ProcessResponse(
|
|
PVOID pContext
|
|
);
|
|
|
|
DWORD
|
|
ProcessRtmNotification(
|
|
RTM_ENTITY_HANDLE hRtmHandle, // not used
|
|
RTM_EVENT_TYPE retEventType,
|
|
PVOID pvContext1, // not used
|
|
PVOID pvContext2 // not used
|
|
);
|
|
|
|
VOID
|
|
CallbackFunctionProcessRtmMessage (
|
|
PVOID pContext, // not used
|
|
BOOLEAN NotUsed
|
|
);
|
|
|
|
VOID
|
|
CallbackFunctionProcessTimer (
|
|
PVOID pContext, // not used
|
|
BOOLEAN NotUsed
|
|
);
|
|
|
|
VOID
|
|
CallbackFunctionNetworkEvents (
|
|
PVOID pContext,
|
|
BOOLEAN NotUsed
|
|
);
|
|
|
|
DWORD
|
|
BlockDeleteRoutesOnInterface (
|
|
IN HANDLE hRtmHandle,
|
|
IN DWORD dwIfIndex
|
|
);
|
|
|
|
#endif // _WORK_H_
|
|
|