Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

261 lines
8.0 KiB

/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
net\routing\ipx\sap\sapdefs.h
Abstract:
Constants and data structures common to all SAP files
Author:
Vadim Eydelman 05-15-1995
Revision History:
--*/
#ifndef _SAP_SAPDEFS
#define _SAP_SAPDEFS
extern UCHAR IPX_SAP_SOCKET[2]; // Defined in workers.c
#define IPX_SAP_PACKET_TYPE 4
#define IPX_SAP_MAX_ENTRY 7
#define IPX_MAX_HOP_COUNT 16
// Operations in IPX SAP
#define SAP_GENERAL_REQ 1
#define SAP_GENERAL_RESP 2
#define SAP_GET_NEAREST_REQ 3
#define SAP_GET_NEAREST_RESP 4
// Time constants
// IPX specific
#define IPX_SAP_INTERPACKET_GAP 55 // msec
// Registry configurable values (defaults and ranges)
#define SAP_SERVICE_REGISTRY_KEY_STR \
"System\\CurrentControlSet\\Services\\NwSapAgent"
#define SAP_ROUTER_REGISTRY_KEY_STR \
"System\\CurrentControlSet\\Services\\RemoteAccess\\RouterManagers\\IPX\\RoutingProtocols\\IPXSAP"
// Interval for periodic update broadcasts (for standalone service only)
#define SAP_UPDATE_INTERVAL_DEF 1 // min
#define SAP_UPDATE_INTERVAL_MIN 1
#define SAP_UPDATE_INTERVAL_MAX 30
#define SAP_UPDATE_INTERVAL_STR "SendTime"
// Server aging timeout (for standalone service only)
#define SAP_AGING_TIMEOUT_DEF 3 // min
#define SAP_AGING_TIMEOUT_MIN 3
#define SAP_AGING_TIMEOUT_MAX 90
#define SAP_AGING_TIMEOUT_STR "EntryTimeout"
// Update mode on WAN lines
#define SAP_WAN_NO_UPDATE 0
#define SAP_WAN_CHANGES_ONLY 1
#define SAP_WAN_STANDART_UPDATE 2
#define SAP_WAN_UPDATE_MODE_DEF SAP_WAN_NO_UPDATE
#define SAP_WAN_UPDATE_MODE_MIN SAP_WAN_NO_UPDATE
#define SAP_WAN_UPDATE_MODE_MAX SAP_WAN_STANDART_UPDATE
#define SAP_WAN_UPDATE_MODE_STR "WANFilter"
// Interval for periodic update broadcasts on WAN lines (for standalone service only)
#define SAP_WAN_UPDATE_INTERVAL_DEF 1 // min
#define SAP_WAN_UPDATE_INTERVAL_MIN 1
#define SAP_WAN_UPDATE_INTERVAL_MAX 30
#define SAP_WAN_UPDATE_INTERVAL_STR "WANUpdateTime"
// Max number of pending recv work items
#define SAP_MAX_UNPROCESSED_REQUESTS_DEF 100
#define SAP_MAX_UNPROCESSED_REQUESTS_MIN 10
#define SAP_MAX_UNPROCESSED_REQUESTS_MAX 1000
#define SAP_MAX_UNPROCESSED_REQUESTS_STR "MaxRecvBufferLookAhead"
// Whether to respond for internal servers that are not registered with SAP
// through the API calls (for standalone service only)
#define SAP_RESPOND_FOR_INTERNAL_DEF TRUE
#define SAP_RESPOND_FOR_INTERNAL_MIN FALSE
#define SAP_RESPOND_FOR_INTERNAL_MAX TRUE
#define SAP_RESPOND_FOR_INTERNAL_STR "RespondForInternalServers"
// Delay in response to general reguests for specific server type
// if local servers are included in the packet
#define SAP_DELAY_RESPONSE_TO_GENERAL_DEF 0 // msec
#define SAP_DELAY_RESPONSE_TO_GENERAL_MIN 0
#define SAP_DELAY_RESPONSE_TO_GENERAL_MAX 2000
#define SAP_DELAY_RESPONSE_TO_GENERAL_STR "DelayRespondToGeneral"
// Delay in sending change broadcasts if packet is not full
#define SAP_DELAY_CHANGE_BROADCAST_DEF 3 // sec
#define SAP_DELAY_CHANGE_BROADCAST_MIN 0
#define SAP_DELAY_CHANGE_BROADCAST_MAX 30
#define SAP_DELAY_CHANGE_BROADCAST_STR "DelayChangeBroadcast"
// Size of heap reserved for the database
#define SAP_SDB_MAX_HEAP_SIZE_DEF 8 // Meg
#define SAP_SDB_MAX_HEAP_SIZE_MIN 1
#define SAP_SDB_MAX_HEAP_SIZE_MAX 32
#define SAP_SDB_MAX_HEAP_SIZE_STR "NameTableReservedHeapSize"
// Interval with which to update the sorted list
#define SAP_SDB_SORT_LATENCY_DEF 60 // sec
#define SAP_SDB_SORT_LATENCY_MIN 10
#define SAP_SDB_SORT_LATENCY_MAX 600
#define SAP_SDB_SORT_LATENCY_STR "NameTableSortLatency"
// Max number of unsorted servers
#define SAP_SDB_MAX_UNSORTED_DEF 16
#define SAP_SDB_MAX_UNSORTED_MIN 1
#define SAP_SDB_MAX_UNSORTED_MAX 100
#define SAP_SDB_MAX_UNSORTED_STR "MaxUnsortedNames"
// How often to check on pending triggered update
#define SAP_TRIGGERED_UPDATE_CHECK_INTERVAL_DEF 10 // sec
#define SAP_TRIGGERED_UPDATE_CHECK_INTERVAL_MIN 3
#define SAP_TRIGGERED_UPDATE_CHECK_INTERVAL_MAX 60
#define SAP_TRIGGERED_UPDATE_CHECK_INTERVAL_STR "TriggeredUpdateCheckInterval"
// How many requests to send if no response received within check interval
#define SAP_MAX_TRIGGERED_UPDATE_REQUESTS_DEF 3
#define SAP_MAX_TRIGGERED_UPDATE_REQUESTS_MIN 1
#define SAP_MAX_TRIGGERED_UPDATE_REQUESTS_MAX 10
#define SAP_MAX_TRIGGERED_UPDATE_REQUESTS_STR "MaxTriggeredUpdateRequests"
// Time limit for shutdown broadcast
#define SAP_SHUTDOWN_TIMEOUT_DEF 60 // sec
#define SAP_SHUTDOWN_TIMEOUT_MIN 20
#define SAP_SHUTDOWN_TIMEOUT_MAX 180
#define SAP_SHUTDOWN_TIMEOUT_STR "ShutdownBroadcastTimeout"
// Number of additional recv requests to post when binding the interface
// that has listen enabled
#define SAP_REQUESTS_PER_INTF_DEF 4
#define SAP_REQUESTS_PER_INTF_MIN 1
#define SAP_REQUESTS_PER_INTF_MAX 256
#define SAP_REQUESTS_PER_INTF_STR "RequestsPerInterface"
// Minimum number of queued recv requests
#define SAP_MIN_REQUESTS_DEF 16
#define SAP_MIN_REQUESTS_MIN 16
#define SAP_MIN_REQUESTS_MAX 2048
#define SAP_MIN_REQUESTS_STR "MinimumRequests"
// Time to wait before retrying failed operation that should not fail
#define SAP_ERROR_COOL_OFF_TIME (3*1000)
#define BINDLIB_NCP_SAP 0xC0000000
#define BINDLIB_NCP_MAX_SAP 0xCFFFFFFF
#pragma pack(push, 1)
typedef struct _IPX_ADDRESS_BLOCK {
UCHAR Network[4];
UCHAR Node[6];
UCHAR Socket[2];
} IPX_ADDRESS_BLOCK, *PIPX_ADDRESS_BLOCK;
// Packet typedef for server entry
typedef struct _IPX_SERVER_ENTRY_P {
USHORT Type;
UCHAR Name[48];
UCHAR Network[4];
UCHAR Node[6];
UCHAR Socket[2];
USHORT HopCount;
} IPX_SERVER_ENTRY_P, *PIPX_SERVER_ENTRY_P;
typedef struct _SAP_BUFFER {
USHORT Checksum;
USHORT Length;
UCHAR TransportCtl;
UCHAR PacketType;
IPX_ADDRESS_BLOCK Dst;
IPX_ADDRESS_BLOCK Src;
USHORT Operation;
IPX_SERVER_ENTRY_P Entries[IPX_SAP_MAX_ENTRY];
} SAP_BUFFER, *PSAP_BUFFER;
#pragma pack(pop)
// IPX Server Name copy macro
#define IpxNameCpy(dst,src) strncpy(dst,src,48)
// IPX Server Name comparison
#define IpxNameCmp(name1,name2) strncmp(name1,name2,48)
#define IpxNetCpy(dst,src) *((UNALIGNED ULONG *)(dst)) = *((UNALIGNED ULONG *)(src))
#define IpxNetCmp(net1,net2) memcmp(net1,net2,4)
#define IpxNodeCpy(dst,src) memcpy(dst,src,6)
#define IpxNodeCmp(node1,node2) memcmp(node1,node2,6)
#define IpxSockCpy(dst,src) *((UNALIGNED USHORT *)(dst)) = *((UNALIGNED USHORT *)(src))
#define IpxSockCmp(sock1,sock2) memcmp(sock1,sock2,2)
#define IpxAddrCpy(dst,src) { \
IpxNetCpy((dst)->Network,(src)->Network); \
IpxNodeCpy((dst)->Node,(src)->Node); \
IpxSockCpy((dst)->Socket,(src)->Socket); \
}
#define IpxServerCpy(dst,src) { \
(dst)->Type = (src)->Type; \
IpxNameCpy((dst)->Name,(src)->Name); \
IpxNetCpy((dst)->Network,(src)->Network); \
IpxNodeCpy((dst)->Node,(src)->Node); \
IpxSockCpy((dst)->Socket,(src)->Socket); \
(dst)->HopCount = (src)->HopCount; \
}
// Conversions from/to on-the-wire format
#define GETUSHORT(src) ( \
(USHORT)( \
(((UCHAR *)(src))[0]<<8) \
+ (((UCHAR *)(src))[1]) \
) \
)
#define GETULONG(src) ( \
(ULONG)( \
(((UCHAR *)(src))[0]<<24) \
+ (((UCHAR *)(src))[1]<<16) \
+ (((UCHAR *)(src))[2]<<8) \
+ (((UCHAR *)(src))[3]) \
) \
)
#define PUTUSHORT(src,dst) { \
((UCHAR *)(dst))[0] = ((UCHAR)((src)>>8)); \
((UCHAR *)(dst))[1] = ((UCHAR)(src)); \
}
#define PUTULONG(src,dst) { \
((UCHAR *)(dst))[0] = ((UCHAR)((src)>>24)); \
((UCHAR *)(dst))[1] = ((UCHAR)((src)>>16)); \
((UCHAR *)(dst))[2] = ((UCHAR)((src)>>8)); \
((UCHAR *)(dst))[3] = ((UCHAR)(src)); \
}
// Complement macros in ntrtl.h
#define InitializeListEntry(entry) InitializeListHead(entry)
#define IsListEntry(entry) (!IsListEmpty(entry))
// Time comparison macro that accounts for possible wraparound
// (maximum time difference is MAXULONG/2 msec (21+ days))
#define IsLater(time1,time2) (((time1)-(time2))<MAXULONG/2)
// Fast round to sec macro (it actually rounds to 1024 msec)
#define RoundUpToSec(msecTime) (((msecTime)&0xFFFFFC00)+0x00000400)
// IPX broadcast node number def
extern UCHAR IPX_BCAST_NODE[6];
#endif