Leaked source code of windows server 2003
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.
|
|
// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil -*- (for GNU Emacs)
//
// Copyright (c) 1985-2000 Microsoft Corporation
//
// This file is part of the Microsoft Research IPv6 Network Protocol Stack.
// You should have received a copy of the Microsoft End-User License Agreement
// for this software along with this release; see the file "license.txt".
// If not, please see http://www.research.microsoft.com/msripv6/license.htm,
// or write to Microsoft Research, One Microsoft Way, Redmond, WA 98052-6399.
//
// Abstract:
//
// This file contains init code for TCP.
//
#include "oscfg.h"
#include "ndis.h"
#include "ip6imp.h"
#include "ip6def.h"
#include "tdi.h"
#include <tdikrnl.h>
#include "tdint.h"
#include "tdistat.h"
#include "queue.h"
#include "transprt.h"
#include "addr.h"
#include "info.h"
#include "tcp.h"
#include "tcpsend.h"
#include "tcb.h"
#include "tcpconn.h"
#include "tcpdeliv.h"
#include "tdiinfo.h"
#include "tcpcfg.h"
#pragma BEGIN_INIT
extern uchar TCPGetConfigInfo(void); extern int InitTCPConn(void); extern void UnloadTCPConn(void); extern int InitTCPRcv(void); extern void UnloadTCPRcv(void); extern int InitISNGenerator(void); extern void UnloadISNGenerator(void);
//
// Definitions of TCP specific global variables.
//
uint AllowUserRawAccess; uint PMTUDiscovery; uint PMTUBHDetect; uint KeepAliveTime; uint KAInterval; uint DefaultRcvWin; uint MaxConnections; uint MaxConnBlocks; uint TcbTableSize; uint MaxConnectRexmitCount; uint MaxDataRexmitCount; uint BSDUrgent; uint FinWait2TO; uint NTWMaxConnectCount; uint NTWMaxConnectTime; uint SynAttackProtect = 0;
//* TCPInit - Initialize the Transport Control Protocol.
//
// The main TCP initialize routine. We get whatever config
// info we need, initialize some data structures, etc.
//
int // Returns: True is we succeeded, False if we fail to initialize.
TCPInit(void) { if (!TCPGetConfigInfo()) return FALSE;
KeepAliveTime = MS_TO_TICKS(KeepAliveTime); KAInterval = MS_TO_TICKS(KAInterval);
MaxConnections = MIN(MaxConnections, INVALID_CONN_INDEX - 1);
if (!InitISNGenerator()) return FALSE;
if (!InitTCPConn()) return FALSE;
if (!InitTCB()) return FALSE;
if (!InitTCPRcv()) return FALSE;
if (!InitTCPSend()) return FALSE;
//
// Initialize statistics.
//
RtlZeroMemory(&TStats, sizeof(TCPStats)); TStats.ts_rtoalgorithm = TCP_RTO_VANJ; TStats.ts_rtomin = MIN_RETRAN_TICKS * MS_PER_TICK; TStats.ts_rtomax = MAX_REXMIT_TO * MS_PER_TICK; TStats.ts_maxconn = (ulong) TCP_MAXCONN_DYNAMIC;
return TRUE; }
#pragma END_INIT
//* TCPUnload
//
// Called to cleanup TCP in preparation for unloading the stack.
//
void TCPUnload(void) { //
// After UnloadTCPSend, we will stop receiving packets
// from the IPv6 layer.
//
UnloadTCPSend();
UnloadTCPRcv();
UnloadTCB();
UnloadTCPConn();
UnloadISNGenerator(); }
|