tcpLib.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:4k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* tcpLib.c - tcp protocol interface library */
  2. /* Copyright 1984 - 2002 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01e,20may02,vvv  moved tcpstates[] definition and pTcpStates initialization
  8.                  from tcp_debug.c (SPR #62272)
  9. 01d,15oct01,rae  merge from truestack ver 01e, base 01c (TCP_RAND_FUNC)
  10. 01c,14nov00,ham  fixed unnecessary dependency against tcp_debug(SPR 62272).
  11. 01b,31jan97,vin  added new variable for connection timeout.
  12. 01a,20jan97,vin  written
  13. */
  14. /*
  15. DESCRIPTION
  16. This library contains the interface to the tcp protocol. The TCP protocol
  17. is configured in this library. 
  18. The routine tcpLibInit() is responsible for configuring the tcp protocol
  19. with various parameters.
  20. INCLUDE FILES: netLib.h
  21. .pG "Network"
  22. NOMANUAL
  23. */
  24. /* includes */
  25. #include "vxWorks.h"
  26. #include "netLib.h"
  27. #include "net/protosw.h"
  28. #include "net/domain.h"
  29. #include "net/mbuf.h"
  30. #include "netinet/in.h"
  31. #include "netinet/in_systm.h"
  32. #include "netinet/in_pcb.h"
  33. #include "netinet/ip.h"
  34. #include "netinet/ip_var.h"
  35. #include "netinet/tcp.h"
  36. #include "netinet/tcp_fsm.h"
  37. #include "netinet/tcp_seq.h"
  38. #include "netinet/tcp_timer.h"
  39. #include "netinet/tcp_var.h"
  40. #include "netinet/tcpip.h"
  41. #include "netinet/tcp_debug.h"
  42. #include "memPartLib.h"
  43. #ifdef VIRTUAL_STACK
  44. #include "netinet/vsLib.h"
  45. #else
  46. /* externs */
  47. IMPORT int _protoSwIndex;
  48. IMPORT struct  protosw inetsw [IP_PROTO_NUM_MAX]; 
  49. IMPORT int tcp_do_rfc1323;
  50. IMPORT u_long tcp_sendspace;
  51. IMPORT u_long tcp_recvspace;
  52. IMPORT int tcp_keepinit;
  53. IMPORT int tcprexmtthresh;
  54. IMPORT int  tcp_mssdflt;
  55. IMPORT int  tcp_rttdflt;
  56. IMPORT int tcp_keepidle;
  57. IMPORT int tcp_keepcnt;
  58. #endif
  59. /* globals */
  60. char **         pTcpstates = NULL;
  61. char *tcpstates[] = { "CLOSED",      "LISTEN",     "SYN_SENT",   "SYN_RCVD",
  62.       "ESTABLISHED", "CLOSE_WAIT", "FIN_WAIT_1", "CLOSING",
  63.       "LAST_ACK",    "FIN_WAIT_2", "TIME_WAIT" };
  64. /* defines */
  65. /* typedefs */
  66. /* locals */
  67. STATUS tcpLibInit 
  68.     (
  69.     TCP_CFG_PARAMS *  tcpCfg /* tcp configuration parameters */
  70.     )
  71.     {
  72. #ifdef VIRTUAL_STACK
  73.     VS_TCP * pGlobals;
  74. #endif
  75.     FAST struct protosw * pProtoSwitch; 
  76.     if (_protoSwIndex >= sizeof(inetsw)/sizeof(inetsw[0]))
  77. return (ERROR) ;
  78.     pProtoSwitch = &inetsw [_protoSwIndex]; 
  79.     if (pProtoSwitch->pr_domain != NULL)
  80. return (OK);  /* already initialized */
  81. #ifdef VIRTUAL_STACK
  82.     /* Allocate space for former global variables. */
  83.     pGlobals = KHEAP_ALLOC (sizeof (VS_TCP));
  84.     if (pGlobals == NULL)
  85.         return (ERROR);
  86.     bzero ( (char *)pGlobals, sizeof (VS_TCP));
  87.     vsTbl [myStackNum]->pTcpGlobals = pGlobals;
  88. #endif
  89.     pProtoSwitch->pr_type    =  SOCK_STREAM;
  90.     pProtoSwitch->pr_domain    =  &inetdomain;
  91.     pProtoSwitch->pr_protocol   =  IPPROTO_TCP;
  92.     pProtoSwitch->pr_flags =  PR_CONNREQUIRED | PR_WANTRCVD;
  93.     pProtoSwitch->pr_input =  tcp_input;
  94.     pProtoSwitch->pr_output =  0;
  95.     pProtoSwitch->pr_ctlinput =  tcp_ctlinput;
  96.     pProtoSwitch->pr_ctloutput =  tcp_ctloutput;
  97.     pProtoSwitch->pr_usrreq =  tcp_usrreq;
  98.     pProtoSwitch->pr_init =  tcp_init;
  99.     pProtoSwitch->pr_fasttimo =  tcp_fasttimo;
  100.     pProtoSwitch->pr_slowtimo =  tcp_slowtimo;
  101.     pProtoSwitch->pr_drain =  tcp_drain;
  102.     pProtoSwitch->pr_sysctl =  0;
  103.     _protoSwIndex++; 
  104.     /* initialize tcp configuration parameters */
  105.     tcp_do_rfc1323 = (tcpCfg->tcpCfgFlags & TCP_DO_RFC1323) ? TRUE : FALSE; 
  106.     tcp_sendspace  = tcpCfg->tcpSndSpace;
  107.     tcp_recvspace  = tcpCfg->tcpRcvSpace;
  108.     tcp_keepinit   = tcpCfg->tcpConnectTime;
  109.     tcprexmtthresh = tcpCfg->tcpReTxThresh;
  110.     tcp_mssdflt    = tcpCfg->tcpMssDflt;
  111.     tcp_rttdflt    = tcpCfg->tcpRttDflt;
  112.     tcp_keepidle   = tcpCfg->tcpKeepIdle;
  113.     tcp_keepcnt    = tcpCfg->tcpKeepCnt;
  114. #ifdef VIRTUAL_STACK
  115.     /*
  116.      * Assign (former) global variables previously initialized by the compiler.
  117.      * Setting 0 is repeated for clarity - the vsLib.c setup zeroes all values.
  118.      */
  119.    tcp_last_inpcb = NULL;  /* tcp_input.c */
  120.    tcp_do_rfc1323 = 1;  /* tcp_subr.c */
  121.    tcp_pcbhashsize = 128;  /* tcp_subr.c (TCBHASHSIZE) */
  122.    tcp_keepintvl = TCPTV_KEEPINTVL;  /* tcp_timer.c */
  123.    tcp_maxpersistidle = TCPTV_KEEP_IDLE;  /* tcp_timer.c */
  124. #endif
  125.     tcpRandHookAdd (tcpCfg->pTcpRandFunc);
  126.     pTcpstates = tcpstates;
  127.     return (OK); 
  128.     }