windows-nt/Source/XPSP1/NT/net/rras/ras/ppp/rasipxcp/ipxcp.h
2020-09-26 16:20:57 +08:00

185 lines
5.3 KiB
C

/*******************************************************************/
/* Copyright(c) 1993 Microsoft Corporation */
/*******************************************************************/
//***
//
// Filename: ipxcp.h
//
// Description: IPX network layer configuration definitions
//
//
// Author: Stefan Solomon (stefans) November 24, 1993.
//
// Revision History:
//
//***
#ifndef _IPXCP_
#define _IPXCP_
//*** IPXCP Option Offsets ***
#define OPTIONH_TYPE 0
#define OPTIONH_LENGTH 1
#define OPTIONH_DATA 2
//*** IPXCP Configuration Option Types ***
#define IPX_NETWORK_NUMBER (UCHAR)1
#define IPX_NODE_NUMBER (UCHAR)2
#define IPX_COMPRESSION_PROTOCOL (UCHAR)3
#define IPX_ROUTING_PROTOCOL (UCHAR)4
#define IPX_ROUTER_NAME (UCHAR)5
#define IPX_CONFIGURATION_COMPLETE (UCHAR)6
//*** IPXCP Configuration Option Values ***
#define RIP_SAP_ROUTING 2
#define TELEBIT_COMPRESSED_IPX 0x0002
// nr of parameters we will try to negotiate
#define MAX_DESIRED_PARAMETERS 3
//*** IPXCP Work Buffer ***
typedef enum _ROUTE_STATE {
NO_ROUTE,
ROUTE_ALLOCATED,
ROUTE_ACTIVATED
} ROUTE_STATE;
typedef enum _IPXWAN_STATE {
IPXWAN_NOT_STARTED,
IPXWAN_ACTIVE,
IPXWAN_DONE
} IPXWAN_STATE;
typedef struct _IPXCP_CONTEXT {
ULONG InterfaceType;
ROUTE_STATE RouteState;
IPXWAN_STATE IpxwanState;
ULONG IpxwanConfigResult;
IPXCP_CONFIGURATION Config;
ULONG IpxConnectionHandle; // used in IpxGetWanInactivityCounter
ULONG AllocatedNetworkIndex; // net number index from the wannet pool
USHORT CompressionProtocol;
BOOL SetReceiveCompressionProtocol;
BOOL SetSendCompressionProtocol;
BOOL ErrorLogged;
USHORT NetNumberNakSentCount; // nr of Naks we issued by the CLIENT
USHORT NetNumberNakReceivedCount; // nr of Naks recv by the SERVER
// This array is used to turn off negotiation for certain options.
// An option negotiation is turned off if it gets rejected by the other end
// or if (in the compression case) is not supported by the other end.
BOOL DesiredParameterNegotiable[MAX_DESIRED_PARAMETERS];
// hash tables linkages
LIST_ENTRY ConnHtLinkage; // linkage in connection id hash table
LIST_ENTRY NodeHtLinkage; // linkage in node hash table
// these two variables used to store the previous browser enabling state
// for nwlnkipx and nwlnknb
BOOL NwLnkIpxPreviouslyEnabled;
BOOL NwLnkNbPreviouslyEnabled;
// !!! This should go away !!!
ULONG hPort;
HBUNDLE hConnection;
} IPXCP_CONTEXT, *PIPXCP_CONTEXT;
//*** max nr of Naks we can send or receive for the Net Number
// if you modify these values set max naks sent < max naks received to give
// the client a chance to terminate and inform the user before the server terminates
// max nr of naks the client can send before giving up and terminating the connection
#define MAX_NET_NUMBER_NAKS_SENT 5
// max nr of naks the server can receive before giving up
#define MAX_NET_NUMBER_NAKS_RECEIVED 5
//*** The following define the index for each option as they appear in the
// DesiredParameter array. CHANGE THESE DEFS IF YOU CHANGE DESIREDPARAMETER!
#define IPX_NETWORK_NUMBER_INDEX 0
#define IPX_NODE_NUMBER_INDEX 1
#define IPX_COMPRESSION_PROTOCOL_INDEX 2
//*** Option Handler Actions ***
typedef enum _OPT_ACTION {
SNDREQ_OPTION, // Copy the option value from the local context struct
// to the REQ option frame to be sent
RCVNAK_OPTION, // Check the option value from the received NAK frame.
// Copy it to our local context struct if it is acceptable
// for us.
RCVACK_OPTION, // Compare option values from the received ACK frame and
// the local context struct.
RCVREQ_OPTION, // Check if the option value in the received REQ frame is
// acceptable. If not, write the acceptable value in the
// response NAK frame.
SNDNAK_OPTION // Make an acceptable option in the response NAK frame.
// This happens when a desired option is missing from the
// received REQ frame.
} OPT_ACTION;
extern CRITICAL_SECTION DbaseCritSec;
#define ACQUIRE_DATABASE_LOCK EnterCriticalSection(&DbaseCritSec)
#define RELEASE_DATABASE_LOCK LeaveCriticalSection(&DbaseCritSec)
extern BOOL RouterStarted;
extern DWORD SingleClientDialinIfNoRouter;
extern UCHAR nullnet[4];
extern UCHAR nullnode[6];
extern DWORD WorkstationDialoutActive;
typedef struct _IPXCP_GLOBAL_CONFIG_PARAMS {
IPXCP_ROUTER_CONFIG_PARAMS RParams;
DWORD SingleClientDialout;
DWORD FirstWanNet;
DWORD WanNetPoolSize;
UNICODE_STRING WanNetPoolStr;
DWORD EnableUnnumberedWanLinks;
DWORD EnableAutoWanNetAllocation;
DWORD EnableCompressionProtocol;
DWORD EnableIpxwanForWorkstationDialout;
DWORD AcceptRemoteNodeNumber;
DWORD DebugLog;
UCHAR puSpecificNode[6];
} IPXCP_GLOBAL_CONFIG_PARAMS, *PIPXCP_GLOBAL_CONFIG_PARAMS;
extern IPXCP_GLOBAL_CONFIG_PARAMS GlobalConfig;
extern VOID (*PPPCompletionRoutine)(HCONN hPortOrBundle,
DWORD Protocol,
PPP_CONFIG * pSendConfig,
DWORD dwError);
extern HANDLE PPPThreadHandle;
extern HINSTANCE IpxWanDllHandle;
// ipxwan dll name
#define IPXWANDLLNAME "ipxwan.dll"
#endif