windows-nt/Source/XPSP1/NT/net/wlbs/driver/params.h
2020-09-26 16:20:57 +08:00

150 lines
8.1 KiB
C

#pragma once
#define CVY_MAX_CALLB_QUEUE_RETRIES 100 /* maximum number of times to
attempt queueing miniport
callback in Nic_sync_queue */
#define CVY_MAX_ALLOCS 50 /* maximum number of allocations
we can perform for packets
and actions */
#define CVY_MAX_SEND_PACKETS 50 /* maximum number of packets
Prot_packets_send can send
down at one time */
#define CVY_MAX_PENDING_PACKETS 100 /* maximum number of packets that
can be queued in a deserialized
wlbs driver */
/* Structure to hold the bi-directional affinity registry settings. */
typedef struct _CVY_BDA {
WCHAR team_id[CVY_MAX_BDA_TEAM_ID + 1]; /* The team ID - user-level support should enforce that it is a GUID. */
ULONG active; /* Is this adapter part of a BDA team? */
ULONG master; /* Boolean indication of master status (Slave=0). */
ULONG reverse_hash; /* Sets direction of hashing - forward (normal) or reverse. */
} CVY_BDA, PCVY_BDA;
/* port group rule - keep it 64bit in size for encryption */
typedef struct
{
ULONG start_port, /* starting port number */
end_port; /* ending port number */
ULONG virtual_ip_addr; /* Virtual clusters - the VIP to which the rule applies.
All VIPs is represented by 0xffffffff. */
ULONG code; /* unique rule code */
ULONG mode; /* filtering mode */
ULONG protocol; /* CVY_TCP, CVY_UDP or CVY_TCP_UDP */
ULONG valid; /* for rule management in user mode */
union
{
struct
{
ULONG priority; /* mastership priority: 1->N or 0 for
not-specified */
} single; /* data for single server mode */
struct
{
USHORT equal_load; /* TRUE => even load distribution */
USHORT affinity; /* TRUE - map all client connections to one server */
ULONG load; /* percentage of load to handle locally */
} multi; /* data for multi-server mode */
} mode_data; /* data for appropriate port group mode */
}
CVY_RULE, * PCVY_RULE;
/* host parameters */
typedef struct
{
/* obtained from the registry */
ULONG parms_ver; /* parameter structure version */
ULONG effective_ver; /* what WLBS version we are effectively operating in. */
ULONG host_priority; /* host's priority for single-server mastership */
ULONG alive_period; /* period for sending "I am alive" messages
in milliseconds */
ULONG alive_tolerance; /* how many "I am alive" messages can be
missed from other servers before assuming
that the host is dead */
ULONG num_actions; /* number of actions to allocate */
ULONG num_packets; /* number of packets to allocate */
ULONG num_send_msgs; /* number of send packets to allocate */
ULONG install_date; /* install time stamp */
ULONG rmt_password; /* remote maintenance password */
ULONG rct_password; /* remote control password */
ULONG rct_port; /* remote control UDP port */
ULONG rct_enabled; /* TRUE - remote control enabled */
ULONG num_rules; /* # active port group rules */
ULONG cleanup_delay; /* dirty connection cleanup delay in
milliseconds, 0 - delay */
ULONG cluster_mode; /* TRUE - enabled on startup */
ULONG dscr_per_alloc; /* number of connection tracking
descriptor per allocation */
ULONG max_dscr_allocs; /* maximum number of connection tracking
descriptor allocations */
ULONG scale_client; /* TRUE - load balance connections from a
given client across cluster servers */
ULONG nbt_support; /* TRUE - NBT cluster name support enabled */
ULONG mcast_support; /* TRUE - enable multicast MAC address support
for switched V1.3.0b */
ULONG mcast_spoof; /* TRUE - if mcast_support is TRUE - enable
TCP/IP spoofing so that remote hosts can
resolve cluster IP address to multicast
address via ARPs V1.3.0b */
ULONG igmp_support; /* TRUE - if IGMP support is enabled */
ULONG mask_src_mac; /* TRUE - spoof source MAC when sending
frames in unicast mode to prevent
switches from getting confused V 2.0.6 */
ULONG netmon_alive; /* TRUE - pass heartbeat frames to the
protocols */
ULONG convert_mac; /* TRUE - automatically match MAC address
to primary cluster IP address */
ULONG ip_chg_delay; /* delay in milliseconds to block outgoing
ARPs while IP address change is in
process */
CVY_BDA bda_teaming; /* the bi-directional affinity teaming config. */
/* strings */
WCHAR cl_mac_addr [CVY_MAX_NETWORK_ADDR + 1];
/* cluster MAC address */
WCHAR cl_ip_addr [CVY_MAX_CL_IP_ADDR + 1];
/* cluster IP address */
WCHAR cl_net_mask [CVY_MAX_CL_NET_MASK + 1];
/* netmask for cluster IP address or "" for none */
WCHAR ded_ip_addr [CVY_MAX_DED_IP_ADDR + 1];
/* dedicated IP address or "" for none */
WCHAR ded_net_mask [CVY_MAX_DED_NET_MASK + 1];
/* netmask for dedicated IP address or "" for none */
WCHAR domain_name [CVY_MAX_DOMAIN_NAME + 1];
/* client's domain name */
WCHAR cl_igmp_addr [CVY_MAX_CL_IGMP_ADDR + 1];
/* dedicated IP address or "" for none */
CVY_RULE port_rules[CVY_MAX_RULES - 1];
/* port rules (account for internal default) */
WCHAR hostname[CVY_MAX_HOST_NAME + 1];
/* hostname.domain for this host if available. */
}
CVY_PARAMS, * PCVY_PARAMS;
#define CVY_DRIVER_RULE_CODE_GET(rulep) ((rulep) -> code)
#define CVY_DRIVER_RULE_CODE_SET(rulep) ((rulep) -> code = \
((ULONG) (((rulep) -> start_port) << 0) | \
(ULONG) (((rulep) -> end_port) << 12) | \
(ULONG) (((rulep) -> protocol) << 24) | \
(ULONG) (((rulep) -> mode) << 28) | \
(ULONG) (((rulep) -> mode == CVY_MULTI ? (rulep) -> mode_data . multi . affinity : 0) << 30)) \
^ ~((rulep) -> virtual_ip_addr))
extern LONG Params_init (
PVOID nlbctxt,
PVOID reg_path,
PVOID adapter_guid, /* GUID of the adapter for multiple nics*/
PCVY_PARAMS paramp);