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

VxWorks

开发平台:

C/C++

  1. /* ipLib.c - ip protocol interface library */
  2. /* Copyright 1984 - 2001 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01n,15oct01,rae  merge from truestack ver 01n, base 01m (VIRTUAL_STACK)
  8. 01m,13nov97,vin  consolidated all flags into _ipCfgFlags.
  9. 01b,15jul97,spm  made IP checksum calculation configurable (SPR #7836)
  10. 01a,20jan97,vin  written
  11. */
  12. /*
  13. DESCRIPTION
  14. This library contains the interface to the ip protocol. The IP protocol
  15. is configured in this library. 
  16. The routine ipLibInit() is responsible for configuring the ip protocol
  17. with various parameters.
  18. INCLUDE FILES: netLib.h
  19. .pG "Network"
  20. NOMANUAL
  21. */
  22. /* includes */
  23. #include "vxWorks.h"
  24. #include "netLib.h"
  25. #include "net/protosw.h"
  26. #include "net/domain.h"
  27. #include "net/mbuf.h"
  28. #include "netinet/in.h"
  29. #include "netinet/in_systm.h"
  30. #include "netinet/ip.h"
  31. #include "netinet/ip_var.h"
  32. #ifdef VIRTUAL_STACK
  33. #include "netinet/vsLib.h"
  34. #endif /* VIRTUAL_STACK */
  35. /* externs */
  36. #ifndef VIRTUAL_STACK
  37. IMPORT int _ipCfgFlags;
  38. IMPORT int _protoSwIndex;
  39. IMPORT struct protosw  inetsw [IP_PROTO_NUM_MAX]; 
  40. IMPORT int ip_defttl;
  41. IMPORT int  ipqmaxlen;
  42. IMPORT int ipfragttl;
  43. #endif /* VIRTUAL_STACK */
  44. /* globals */
  45. /* defines */
  46. /* typedefs */
  47. /* locals */
  48. /* forward declarations */
  49. STATUS ipLibInit (IP_CFG_PARAMS * ipCfg); 
  50. STATUS rawIpLibInit (void);
  51. STATUS rawLibInit (void);
  52. STATUS ipLibInit 
  53.     (
  54.     IP_CFG_PARAMS *  ipCfg /* ip config parameters */
  55.     )
  56.     {
  57.     FAST struct protosw * pProtoSwitch; 
  58.     if (_protoSwIndex >= sizeof(inetsw)/sizeof(inetsw[0]))
  59. return (ERROR) ;
  60.     pProtoSwitch = &inetsw [_protoSwIndex]; 
  61.     if (pProtoSwitch->pr_domain != NULL)
  62. return (OK);  /* already initialized */
  63.     pProtoSwitch->pr_type    =  0;
  64.     pProtoSwitch->pr_domain    =  &inetdomain;
  65.     pProtoSwitch->pr_protocol   =  0;
  66.     pProtoSwitch->pr_flags =  0;
  67.     pProtoSwitch->pr_input =  0;
  68.     pProtoSwitch->pr_output =  ip_output;
  69.     pProtoSwitch->pr_ctlinput =  0;
  70.     pProtoSwitch->pr_ctloutput =  0;
  71.     pProtoSwitch->pr_usrreq =  0;
  72.     pProtoSwitch->pr_init =  ip_init;
  73.     pProtoSwitch->pr_fasttimo =  0;
  74.     pProtoSwitch->pr_slowtimo =  ip_slowtimo;
  75.     pProtoSwitch->pr_drain =  ip_drain;
  76.     pProtoSwitch->pr_sysctl =  0;
  77.     _protoSwIndex++; 
  78.     /* initialize ip configuration parameters */
  79.     _ipCfgFlags = ipCfg->ipCfgFlags; /* ip configuration flags */
  80.     ip_defttl  = ipCfg->ipDefTtl;  /* ip default time to live */
  81.     ipqmaxlen  = ipCfg->ipIntrQueueLen; /* ip queue maximum length */
  82.     ipfragttl = ipCfg->ipFragTtl;  /* ip fragment time to live */
  83.     return (OK); 
  84.     }
  85. STATUS rawIpLibInit (void)
  86.     {
  87.     FAST struct protosw * pProtoSwitch; 
  88.     if (_protoSwIndex >= sizeof(inetsw)/sizeof(inetsw[0]))
  89. return (ERROR) ;
  90.     pProtoSwitch = &inetsw [_protoSwIndex]; 
  91.     if (pProtoSwitch->pr_domain != NULL)
  92. return (OK);  /* already initialized */
  93.     pProtoSwitch->pr_type    =  SOCK_RAW;
  94.     pProtoSwitch->pr_domain    =  &inetdomain;
  95.     pProtoSwitch->pr_protocol   =  IPPROTO_RAW;
  96.     pProtoSwitch->pr_flags =  PR_ATOMIC | PR_ADDR;
  97.     pProtoSwitch->pr_input =  rip_input;
  98.     pProtoSwitch->pr_output =  rip_output;
  99.     pProtoSwitch->pr_ctlinput =  0;
  100.     pProtoSwitch->pr_ctloutput =  rip_ctloutput;
  101.     pProtoSwitch->pr_usrreq =  rip_usrreq;
  102.     pProtoSwitch->pr_init =  0;
  103.     pProtoSwitch->pr_fasttimo =  0;
  104.     pProtoSwitch->pr_slowtimo =  0;
  105.     pProtoSwitch->pr_drain =  0;
  106.     pProtoSwitch->pr_sysctl =  0;
  107.     _protoSwIndex++; 
  108.     return (OK); 
  109.     }
  110. STATUS rawLibInit (void)
  111.     {
  112.     FAST struct protosw * pProtoSwitch; 
  113.     if (_protoSwIndex >= sizeof(inetsw)/sizeof(inetsw[0]))
  114. return (ERROR) ;
  115.     pProtoSwitch = &inetsw [_protoSwIndex]; 
  116.     if (pProtoSwitch->pr_domain != NULL)
  117. return (OK);  /* already initialized */
  118.     pProtoSwitch->pr_type    =  SOCK_RAW;
  119.     pProtoSwitch->pr_domain    =  &inetdomain;
  120.     pProtoSwitch->pr_protocol   =  0;
  121.     pProtoSwitch->pr_flags =  PR_ATOMIC | PR_ADDR;
  122.     pProtoSwitch->pr_input =  rip_input;
  123.     pProtoSwitch->pr_output =  rip_output;
  124.     pProtoSwitch->pr_ctlinput =  0; 
  125.     pProtoSwitch->pr_ctloutput =  rip_ctloutput;
  126.     pProtoSwitch->pr_usrreq =  rip_usrreq;
  127.     pProtoSwitch->pr_init =  rip_init;
  128.     pProtoSwitch->pr_fasttimo =  0;
  129.     pProtoSwitch->pr_slowtimo =  0;
  130.     pProtoSwitch->pr_drain =  0;
  131.     pProtoSwitch->pr_sysctl =  0;
  132.     _protoSwIndex++; 
  133.     return (OK); 
  134.     }