483 lines
18 KiB
C
483 lines
18 KiB
C
#ifndef _WINSCNST_H_
|
||
#define _WINSCNST_H_
|
||
|
||
/*
|
||
macros
|
||
*/
|
||
|
||
|
||
//
|
||
// Default values for the various time intervals
|
||
//
|
||
|
||
#define FORTY_MTS 2400
|
||
#define TWO_HOURS 7200
|
||
#define TWO_DAYS (172800)
|
||
#define ONEDAY (TWO_DAYS/2)
|
||
#define FOUR_DAYS (TWO_DAYS * 2)
|
||
#define SIX_DAYS (TWO_DAYS * 3)
|
||
#define EIGHT_DAYS (TWO_DAYS * 4)
|
||
#define TWELVE_DAYS (TWO_DAYS * 6)
|
||
#define TWENTY_FOUR_DAYS (TWO_DAYS * 12)
|
||
|
||
|
||
#define WINSCNF_TIME_INT_W_SELF_FND_PNRS TWO_HOURS
|
||
//
|
||
// Minimum number of updates that must be there before a push notification is
|
||
// sent
|
||
//
|
||
#define WINSCNF_MIN_VALID_UPDATE_CNT 20 //the minimum no of updates
|
||
//after which a notification
|
||
//can be sent. Adjustable
|
||
//via the registry
|
||
//
|
||
// This is the minimum valid Rpl interval. All the scavenging time intervals
|
||
// are derived from it.
|
||
//
|
||
// refer WAIT_TIME_BEFORE_EXITING in rplpush.c
|
||
//
|
||
#define WINSCNF_MIN_VALID_RPL_INTVL (600) // 10 mts
|
||
|
||
// this is the minimum valid consistency check interval between the last time
|
||
// consistency check finished and the next one starts.
|
||
#define WINSCNF_MIN_VALID_INTER_CC_INTVL (3*60*60) // 3 hours.
|
||
|
||
//
|
||
// default name of the db file that will contain the name-address mappings
|
||
//
|
||
#define WINSCNF_DB_NAME TEXT(".\\wins\\wins.mdb")
|
||
|
||
|
||
#define WINSCNF_DB_NAME_ASCII ".\\wins\\wins.mdb"
|
||
|
||
//
|
||
// NOTE NOTE NOTE
|
||
//
|
||
// If you change this define to a string that does not have an unexpanded
|
||
// string of the form %<string>% make a corresponding change in
|
||
// GetNamesOfDataFiles() in winscnf.c.
|
||
//
|
||
#define WINSCNF_STATIC_DATA_NAME TEXT("%SystemRoot%\\system32\\drivers\\etc\\lmhosts")
|
||
|
||
|
||
|
||
//
|
||
// names of values stored under the Parameters key for WINS configuration
|
||
//
|
||
#if defined(DBGSVC) && !defined(WINS_INTERACTIVE)
|
||
#define WINSCNF_DBGFLAGS_NM TEXT("DBGFLAGS")
|
||
#endif
|
||
#define WINSCNF_FILTER1BREQUESTS_NM TEXT("Filter1BRequests")
|
||
#define WINSCNF_ADD1BTO1CQUERIES_NM TEXT("Prepend1BTo1CQueries")
|
||
#define WINSCNF_LOG_DETAILED_EVTS_NM TEXT("LogDetailedEvents")
|
||
#define WINSCNF_REFRESH_INTVL_NM TEXT("RefreshInterval")
|
||
#define WINSCNF_INIT_CHL_RETRY_INTVL_NM TEXT("InitChlRetryInterval")
|
||
#define WINSCNF_CHL_MAX_RETRIES_NM TEXT("ChlMaxNoOfRetries")
|
||
#define WINSCNF_TOMBSTONE_INTVL_NM TEXT("TombstoneInterval")
|
||
#define WINSCNF_TOMBSTONE_TMOUT_NM TEXT("TombstoneTimeout")
|
||
#define WINSCNF_VERIFY_INTVL_NM TEXT("VerifyInterval")
|
||
#define WINSCNF_DB_FILE_NM TEXT("DbFileNm")
|
||
#define WINSCNF_DB_FILE_NM_ASCII "DbFileNm"
|
||
#define WINSCNF_STATIC_INIT_FLAG_NM TEXT("DoStaticDataInit")
|
||
#define WINSCNF_INIT_VERSNO_VAL_LW_NM TEXT("VersCounterStartVal_LowWord")
|
||
#define WINSCNF_INIT_VERSNO_VAL_HW_NM TEXT("VersCounterStartVal_HighWord")
|
||
#define WINSCNF_BACKUP_DIR_PATH_NM TEXT("BackupDirPath")
|
||
#define WINSCNF_PRIORITY_CLASS_HIGH_NM TEXT("PriorityClassHigh")
|
||
#define WINSCNF_MAX_NO_WRK_THDS_NM TEXT("NoOfWrkThds")
|
||
#define WINSCNF_INIT_TIME_PAUSE_NM TEXT("InitTimePause")
|
||
#define WINSCNF_CLUSTER_RESOURCE_NM TEXT( "ClusterResourceName")
|
||
|
||
//
|
||
// To allow WINS to revert back to 351 jet and db
|
||
//
|
||
#define WINSCNF_USE_351DB_NM TEXT("Use351Db")
|
||
#define WINSCNF_USE_4DB_NM TEXT("Use4Db")
|
||
|
||
#if MCAST > 0
|
||
#define WINSCNF_USE_SELF_FND_PNRS_NM TEXT("UseSelfFndPnrs")
|
||
#define WINSCNF_SELF_FND_NM TEXT("SelfFnd")
|
||
#define WINSCNF_MCAST_TTL_NM TEXT("McastTtl")
|
||
#define WINSCNF_MCAST_INTVL_NM TEXT("McastIntvl")
|
||
#endif
|
||
|
||
#define WINSCNF_WINS_PORT_NO_NM TEXT("PortNo")
|
||
|
||
// persona grata/non-grata registry names have to be ASCII. The registry is queried
|
||
// through RegQueryValueExA() calls (see GetOwnerList() from winscnf.c)
|
||
#define PERSMODE_NON_GRATA 0
|
||
#define PERSMODE_GRATA 1
|
||
#define WINSCNF_PERSONA_MODE_NM "PersonaMode"
|
||
#define WINSCNF_PERSONA_NON_GRATA_NM "PersonaNonGrata"
|
||
#define WINSCNF_PERSONA_GRATA_NM "PersonaGrata"
|
||
|
||
#if PRSCONN
|
||
#define WINSCNF_PRS_CONN_NM TEXT("PersistentRplOn")
|
||
#endif
|
||
|
||
//
|
||
// Spoof reg/ref
|
||
//
|
||
#define WINSCNF_BURST_HANDLING_NM TEXT("BurstHandling")
|
||
#define WINSCNF_BURST_QUE_SIZE_NM TEXT("BurstQueSize")
|
||
// to enable round-robin list of 1C member addresses
|
||
#define WINSCNF_RANDOMIZE_1C_LIST_NM TEXT("Randomize1CList")
|
||
|
||
//
|
||
// NOTE NOTE NOTE
|
||
//
|
||
// This should never be set to FALSE in the registry unless we notice
|
||
// a major bug in WINS that is resulting in replication to stop. This
|
||
// parameter is a hatch door at best to get around an insidious bug
|
||
// that may escape us during our testing -- Good insurance policy
|
||
//
|
||
#define WINSCNF_NO_RPL_ON_ERR_NM TEXT("NoRplOnErr")
|
||
|
||
//
|
||
// FUTURES - remove when JetBackup is internationalized. Also, update
|
||
// WinsCnfReadWinsInfo.
|
||
//
|
||
#define WINSCNF_ASCII_BACKUP_DIR_PATH_NM "BackupDirPath"
|
||
#define WINSCNF_INT_VERSNO_NEXTTIME_LW_NM TEXT("WinsInternalVersNoNextTime_LW")
|
||
#define WINSCNF_INT_VERSNO_NEXTTIME_HW_NM TEXT("WinsInternalVersNoNextTime_HW")
|
||
#define WINSCNF_DO_BACKUP_ON_TERM_NM TEXT("DoBackupOnTerm")
|
||
#define WINSCNF_MIGRATION_ON_NM TEXT("MigrateOn")
|
||
#define WINSCNF_REG_QUE_MAX_LEN_NM TEXT("RegQueMaxLen")
|
||
|
||
//
|
||
// Names to use in the registry for values of the PUSH/PULL sub-keys
|
||
//
|
||
#define WINSCNF_ADDCHG_TRIGGER_NM TEXT("RplOnAddressChg")
|
||
#define WINSCNF_RETRY_COUNT_NM TEXT("CommRetryCount")
|
||
|
||
//
|
||
// Under IP address of a Push pnr
|
||
//
|
||
#define WINSCNF_SP_TIME_NM TEXT("SpTime")
|
||
#define WINSCNF_RPL_INTERVAL_NM TEXT("TimeInterval")
|
||
#define WINSCNF_MEMBER_PREC_NM TEXT("MemberPrecedence")
|
||
|
||
//
|
||
// Under IP address of a Pull pnr
|
||
//
|
||
#define WINSCNF_UPDATE_COUNT_NM TEXT("UpdateCount")
|
||
|
||
//
|
||
// Both pull/push pnr
|
||
//
|
||
#define WINSCNF_ONLY_DYN_RECS_NM TEXT("OnlyDynRecs")
|
||
//
|
||
// Value of the PULL/PUSH key
|
||
//
|
||
#define WINSCNF_INIT_TIME_RPL_NM TEXT("InitTimeReplication")
|
||
|
||
//
|
||
// Value of the PUSH key
|
||
//
|
||
#define WINSCNF_PROP_NET_UPD_NTF TEXT("PropNetUpdNtf")
|
||
|
||
|
||
//
|
||
// Indicate whether propagation is to be done or not
|
||
//
|
||
#define DO_PROP_NET_UPD_NTF TRUE
|
||
#define DONT_PROP_NET_UPD_NTF FALSE
|
||
|
||
|
||
//
|
||
// if "OnlyWithCnfPnrs" is set to TRUE, replication will be performed only
|
||
// with those partners that are listed under the Pull/Push key. If not
|
||
// set to TRUE, replication can be initiated even with unlisted partners
|
||
// as a result of administrative action or as a result of receiving an
|
||
// update notification
|
||
//
|
||
#define WINSCNF_RPL_ONLY_W_CNF_PNRS_NM TEXT("RplOnlyWCnfPnrs")
|
||
|
||
//
|
||
// This DWORD can be under the Partners, Partners\Pull,
|
||
// Partners\Push keys or under a partner's ip address key. If it is in more
|
||
// than in one place in the key heirarchy, the lower one overrides the upper
|
||
// one.
|
||
//
|
||
// Each bit indicates the kind of replication we want/don't want.
|
||
// If no bit is set or if this parameter is not defined, it means
|
||
// replicate everything (unless WINSCNF_ONLY_DYN_RECS_NM is defined - ideally
|
||
// that should be represented by a bit in this DWORD but that is river under
|
||
// the bridge and I don't want to get rid of that parameter since folks are
|
||
// used to it, it being in the doc set and all). Currently the following is
|
||
// defined
|
||
|
||
//
|
||
// All replication under the constraint of WINSCNF_ONLY_DYN_RECS_NM if defined
|
||
//
|
||
#define WINSCNF_RPL_DEFAULT_TYPE 0x0
|
||
|
||
//
|
||
// LSB - Replicate only the special group names (special groups - domains and
|
||
// user defined special groups)
|
||
//
|
||
#define WINSCNF_RPL_SPEC_GRPS_N_PDC 0x1
|
||
#define WINSCNF_RPL_ONLY_DYN_RECS 0x80000000
|
||
#define WINSCNF_RPL_TYPE_NM TEXT("ReplicationType")
|
||
|
||
//
|
||
// Path to log file
|
||
//
|
||
#define WINSCNF_LOG_FLAG_NM TEXT("LoggingOn")
|
||
#define WINSCNF_LOG_FILE_PATH_NM TEXT("LogFilePath")
|
||
|
||
#define WINSCNF_MAX_CHL_RETRIES 3 //max. # of retries RFC 1002
|
||
//page 83
|
||
#if 0
|
||
#define WINSCNF_CHL_RETRY_INTERVAL 250 //Time interval (in msecs)
|
||
//between retries -- RFC 1002
|
||
//page 83
|
||
#endif
|
||
#define WINSCNF_CHL_RETRY_INTERVAL 500 //Time interval (in msecs)
|
||
|
||
#define WINSCNF_PROC_HIGH_PRIORITY_CLASS HIGH_PRIORITY_CLASS
|
||
#define WINSCNF_PROC_PRIORITY_CLASS NORMAL_PRIORITY_CLASS
|
||
#define WINSCNF_SCV_PRIORITY_LVL THREAD_PRIORITY_BELOW_NORMAL
|
||
|
||
|
||
|
||
|
||
//
|
||
// The Retry timeout is kept as 10 secs. It will be typically << the time
|
||
// interval for replication, allowing us to retry a number of times
|
||
// prior to the next replication cycle.
|
||
//
|
||
//
|
||
// The Retry Time Interval is not used presently. We are using the
|
||
// replication time interval for retries. This makes things simpler
|
||
//
|
||
#define WINSCNF_RETRY_TIME_INT 10 //time interval for retries
|
||
//if there is a comm failure
|
||
#define WINSCNF_MAX_COMM_RETRIES 3 //max. number of retries before
|
||
//giving up trying to set up
|
||
//communications with a WINS
|
||
|
||
//
|
||
// Precedence of remote members (of special groups) registered by a WINS
|
||
// relative to the same registered by other WINS servers (used during
|
||
// pull replication)
|
||
//
|
||
// Locally registered members always have high precedence
|
||
//
|
||
// Make sure that WINSCNF_LOW_PREC < WINSCNF_HIGH_PREC (this fact is used in
|
||
// nmsnmh.c- UnionGrps())
|
||
//
|
||
//
|
||
#define WINSCNF_LOW_PREC 0
|
||
#define WINSCNF_HIGH_PREC 1
|
||
|
||
|
||
//
|
||
// After replication with a WINS has stopped because of persistent
|
||
// communication failure (i.e. after all retries have been exhausted),
|
||
// WINS will wait until the following number of replication time intervals
|
||
// have elapsed before starting the retries again. If replication
|
||
// got stopped with more than one WINS partner with the same time interval
|
||
// (for pulling from it), then retry will be done for all these WINS when
|
||
// it is done for one (in other words, resumption of replication for a WINS
|
||
// may happen sooner than you think).
|
||
//
|
||
// We need to keep this number at least 2 since if we have not been able to
|
||
// communicate with the WINS server for WINSCNF_MAX_COMM_RETRIES times
|
||
// in the past WINSCNF_MAX_COMM_RETRIES * replication interval for the WINS,
|
||
// then it is highly probable that the WINS server is down for good. We
|
||
// retry again after the 'backoff' time. Hopefully, by then the admin would
|
||
// have corrected the problem. Now, it is possible (unlikely though) that
|
||
// the WINS server happened to be down only at the times this WINS tried to
|
||
// contact it. We have no way to determine that.
|
||
//
|
||
//
|
||
// This can be made a registry parameter. This can be called the sleep time
|
||
// between successive rounds of retries.
|
||
//
|
||
#define WINSCNF_RETRY_AFTER_THIS_MANY_RPL 2
|
||
|
||
//
|
||
// if the time interval for periodic replication with a partner with which
|
||
// a WINS server has had consecutive comm. failures is more than the
|
||
// following amount, we don't back off as explained above
|
||
//
|
||
//
|
||
#define WINSCNF_MAX_WAIT_BEFORE_RETRY_RPL ONEDAY //1 day
|
||
|
||
//
|
||
// The max. number of comcurrent static initializations that can be
|
||
// happening. These may be due to commands from the admin. tool or
|
||
// due to registry notifications.
|
||
//
|
||
#define WINSCNF_MAX_CNCRNT_STATIC_INITS 3
|
||
|
||
//
|
||
// No of records to handle at one time (used by the scavenger thread). This
|
||
// number determines the size of the memory block that will be allocated
|
||
// by NmsDbGetDataRecs().
|
||
//
|
||
//#define WINSCNF_SCV_CHUNK 1000
|
||
#define WINSCNF_SCV_CHUNK 3000
|
||
|
||
//
|
||
// defines
|
||
//
|
||
//
|
||
// Refresh interval - time period after which the state of an ACTIVE entry in
|
||
// the db is set to NMSDB_E_RELEASED if it has not
|
||
// been refreshed
|
||
//
|
||
|
||
#define WINSCNF_MIN_REFRESH_INTERVAL FORTY_MTS
|
||
#define WINSCNF_DEF_REFRESH_INTERVAL SIX_DAYS //FOUR_DAYS
|
||
|
||
#define REF_MULTIPLIER_FOR_ACTIVE 2
|
||
|
||
//
|
||
// The Tombstone Interval (the interval a record stays released) should be
|
||
// a multiple of the RefreshInterval by at least the following amount
|
||
//
|
||
// With 2 as the value and refresh time interval being 4 days, TombInterval
|
||
// is max(8 days, 2 * MaxRplInterval) i.e at least 8 days.
|
||
//
|
||
#define REF_MULTIPLIER_FOR_TOMB 2
|
||
|
||
//
|
||
// Challenge Retry interval
|
||
//
|
||
|
||
#define WINSCNF_MIN_INIT_CHL_RETRY_INTVL 250
|
||
#define WINSCNF_DEF_INIT_CHL_RETRY_INTVL 500
|
||
|
||
//
|
||
// Challenge Max. No. of Retries
|
||
//
|
||
|
||
#define WINSCNF_MIN_CHL_MAX_RETRIES 1
|
||
#define WINSCNF_DEF_CHL_MAX_RETRIES 3
|
||
|
||
//
|
||
// Also the min. tombstone timeout should be
|
||
// max(RefreshInterval, RPL_MULTIPLIER_FOR_TOMBTMOUT * MaxRplInterval)
|
||
//
|
||
// With Refresh Interval being 4 days, this will be atleast 4 days.
|
||
//
|
||
#define RPL_MULTIPLIER_FOR_TOMBTMOUT 4
|
||
|
||
//
|
||
// The verify interval should be a multiple of the tombstone time
|
||
// interval by at least the following amount. Keep the total time high
|
||
//
|
||
// With with the min. tombstone interval being at least 8 days, it will be at
|
||
// least (3 * 8 = 24 days)
|
||
//
|
||
#define TOMB_MULTIPLIER_FOR_VERIFY 3
|
||
|
||
//
|
||
// Tombstone interval - time period after which the state of a released
|
||
// entry is changed to NMSDB_E_TOMBSTONE if it has not
|
||
// been refreshed
|
||
//
|
||
#define WINSCNF_MIN_TOMBSTONE_INTERVAL (WINSCNF_MIN_REFRESH_INTERVAL * REF_MULTIPLIER_FOR_TOMB)
|
||
|
||
//
|
||
// Time period after which the tombstone should be deleted. The min. value
|
||
// is 1 days. This is to cut down on the possibility of a
|
||
// tombstone getting deleted prior to it getting replicated to another WINS.
|
||
//
|
||
#define WINSCNF_MIN_TOMBSTONE_TIMEOUT max(WINSCNF_MIN_REFRESH_INTERVAL, ONEDAY)
|
||
|
||
//
|
||
// Minimum time period for doing verifications of the replicas in the db
|
||
//
|
||
// Should be atleast 24 days.
|
||
//
|
||
#define WINSCNF_MIN_VERIFY_INTERVAL max(TWENTY_FOUR_DAYS, (WINSCNF_MIN_TOMBSTONE_INTERVAL * TOMB_MULTIPLIER_FOR_VERIFY))
|
||
|
||
#define WINSCNF_CC_INTVL_NM TEXT("TimeInterval")
|
||
#define WINSCNF_CC_MAX_RECS_AAT_NM TEXT("MaxRecsAtATime")
|
||
#define WINSCNF_CC_USE_RPL_PNRS_NM TEXT("UseRplPnrs")
|
||
|
||
#define WINSCNF_CC_DEF_INTERVAL ONEDAY
|
||
#define WINSCNF_CC_MIN_INTERVAL (ONEDAY/4)
|
||
|
||
#define WINSCNF_DEF_CC_SP_HR 2 //02 hrs - 2am
|
||
|
||
|
||
#define WINSCNF_CC_MIN_RECS_AAT 1000
|
||
#define WINSCNF_CC_DEF_RECS_AAT 30000
|
||
|
||
#define WINSCNF_CC_DEF_USE_RPL_PNRS 0
|
||
|
||
#if 0
|
||
//
|
||
// Make the refresh interval equal to twice the max. replication time interval
|
||
// if that is greater than the refresh interval.
|
||
//
|
||
#define WINSCNF_MAKE_REF_INTVL_M(RefreshInterval, MaxRplIntvl) max(REF_MULTIPLIER_FOR_ACTIVE * (MaxRplIntvl), RefreshInterval)
|
||
#endif
|
||
|
||
//
|
||
// The Tombstone interval should never be allowed to go over 4 days. We
|
||
// don't want a record to remain released for longer than that. It should
|
||
// turn into a tombstone so that it gets replicated.
|
||
//
|
||
// The reason we change the state of a record to released is to avoid
|
||
// replication if the reason for the release is a temporary shutdown of
|
||
// the pc. We have to consider a long weekend (3 days). We however
|
||
// also need to consider the fact that if the refresh interval is 40 mts or
|
||
// some such low value, then we should not keep the record in the released
|
||
// state for more than a day at the most. Consider a situation where
|
||
// a node registers with the backup because the primary is down and then
|
||
// goes back to the primary when it comes up. The primary does not
|
||
// increment the version number because the record is stil active. The
|
||
// record gets released at the backup and stays that way until it becomes
|
||
// a tombstone which results in replication and the backup again getting
|
||
// the active record from the primary. For the above situaion, we should
|
||
// make sure of two things: first - the record does not have an overly large
|
||
// tombstone interval; second - the replication time interval is small. We
|
||
// don't want to change the replication time interval set by the admin. but
|
||
// we can do something about the former.
|
||
//
|
||
// As long as the user sticks with the default refresh interval, the tombstone
|
||
// interval will be the same as that.
|
||
//
|
||
// For the case where the user specifies a different refresh interval, we use
|
||
// a max. of the refresh interval and a multiple of the max. rpl. interval.
|
||
//
|
||
//
|
||
|
||
#define WINSCNF_MAKE_TOMB_INTVL_M(RefreshInterval, MaxRplIntvl) min(max(REF_MULTIPLIER_FOR_TOMB * (MaxRplIntvl), RefreshInterval), FOUR_DAYS)
|
||
|
||
#define WINSCNF_MAKE_TOMB_INTVL_0_M(RefreshInterval) min(RefreshInterval, FOUR_DAYS)
|
||
|
||
//
|
||
// macro to get the minimum tombstone timeout based on the maximum replication
|
||
// time interval.
|
||
//
|
||
#define WINSCNF_MAKE_TOMBTMOUT_INTVL_M(MaxRplIntvl) max(WINSCNF_MIN_TOMBSTONE_TIMEOUT,(RPL_MULTIPLIER_FOR_TOMBTMOUT * (MaxRplIntvl)))
|
||
|
||
|
||
//
|
||
// Macro to get the minimum verify interval based on tombstone interval
|
||
//
|
||
// Should be atleast 8 days.
|
||
//
|
||
#define WINSCNF_MAKE_VERIFY_INTVL_M(TombstoneInterval) max(TWENTY_FOUR_DAYS, (TOMB_MULTIPLIER_FOR_VERIFY * (TombstoneInterval)))
|
||
|
||
|
||
//
|
||
// Min. Mcast TTL
|
||
//
|
||
#define WINSCNF_MIN_MCAST_TTL TTL_SUBNET_ONLY
|
||
#define WINSCNF_DEF_MCAST_TTL TTL_REASONABLE_REACH
|
||
#define WINSCNF_MAX_MCAST_TTL 32
|
||
#define WINSCNF_MIN_MCAST_INTVL FORTY_MTS
|
||
#define WINSCNF_DEF_MCAST_INTVL FORTY_MTS
|
||
|
||
#define WINS_QUEUE_HWM 500
|
||
#define WINS_QUEUE_HWM_MAX 5000
|
||
#define WINS_QUEUE_HWM_MIN 50
|
||
|
||
#endif _WINSCNST_H_
|
||
|