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

VxWorks

开发平台:

C/C++

  1. /* udpLib.c - udp protocol interface library */
  2. /* Copyright 1984 - 2001 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01b,15oct01,rae  merge from truestack ver 01b, base 01a (VIRTUAL_STACK)
  8. 01a,20jan97,vin written
  9. */
  10. /*
  11. DESCRIPTION
  12. This library contains the interface to the udp protocol. The UDP protocol
  13. is configured in this library. 
  14. The routine udpLibInit() is responsible for configuring the udp protocol
  15. with various parameters.
  16. INCLUDE FILES: netLib.h
  17. .pG "Network"
  18. NOMANUAL
  19. */
  20. /* includes */
  21. #include "vxWorks.h"
  22. #include "netLib.h"
  23. #include "net/protosw.h"
  24. #include "net/domain.h"
  25. #include "net/mbuf.h"
  26. #include "netinet/in.h"
  27. #include "netinet/in_systm.h"
  28. #include "netinet/in_pcb.h"
  29. #include "netinet/ip.h"
  30. #include "netinet/ip_var.h"
  31. #include "netinet/udp.h"
  32. #include "netinet/udp_var.h"
  33. #ifdef VIRTUAL_STACK
  34. #include "netinet/vsLib.h"
  35. #endif
  36. /* externs */
  37. #ifndef VIRTUAL_STACK
  38. IMPORT int _protoSwIndex;
  39. IMPORT struct protosw  inetsw [IP_PROTO_NUM_MAX]; 
  40. IMPORT u_long udp_sendspace; /* variable to control send space */
  41. IMPORT u_long udp_recvspace; /* variable to control recv space */
  42. IMPORT int udpcksum; /* variable to control send cksum */
  43. IMPORT int udpDoCkSumRcv; /* vairiable to control rcv cksum */
  44. #endif /* VIRTUAL_STACK */
  45. /* globals */
  46. /* defines */
  47. /* typedefs */
  48. /* locals */
  49. STATUS udpLibInit 
  50.     (
  51.     UDP_CFG_PARAMS *  udpCfg /* udp config parameters */
  52.     )
  53.     {
  54.     FAST struct protosw * pProtoSwitch; 
  55.     if (_protoSwIndex >= sizeof(inetsw)/sizeof(inetsw[0]))
  56. return (ERROR) ;
  57.     pProtoSwitch = &inetsw [_protoSwIndex]; 
  58.     if (pProtoSwitch->pr_domain != NULL)
  59. return (OK);  /* already initialized */
  60.     pProtoSwitch->pr_type    =  SOCK_DGRAM;
  61.     pProtoSwitch->pr_domain    =  &inetdomain;
  62.     pProtoSwitch->pr_protocol   =  IPPROTO_UDP;
  63.     pProtoSwitch->pr_flags =  PR_ATOMIC | PR_ADDR;
  64.     pProtoSwitch->pr_input =  udp_input;
  65.     pProtoSwitch->pr_output =  0;
  66.     pProtoSwitch->pr_ctlinput =  udp_ctlinput;
  67.     pProtoSwitch->pr_ctloutput =  ip_ctloutput;
  68.     pProtoSwitch->pr_usrreq =  udp_usrreq;
  69.     pProtoSwitch->pr_init =  udp_init;
  70.     pProtoSwitch->pr_fasttimo =  0;
  71.     pProtoSwitch->pr_slowtimo =  0;
  72.     pProtoSwitch->pr_drain =  0;
  73.     pProtoSwitch->pr_sysctl =  0;
  74.     _protoSwIndex++; 
  75.     /* initialize udp configuration parameters */
  76.     udpcksum    = (udpCfg->udpCfgFlags & UDP_DO_CKSUM_SND) ? TRUE : FALSE; 
  77.     udpDoCkSumRcv = (udpCfg->udpCfgFlags & UDP_DO_CKSUM_RCV) ? TRUE : FALSE;
  78.     udp_sendspace = udpCfg->udpSndSpace;
  79.     udp_recvspace = udpCfg->udpRcvSpace;
  80. #ifdef VIRTUAL_STACK
  81.     /*
  82.      * Assign (former) global variables previously initialized by the compiler.
  83.      * Setting 0 is repeated for clarity - the vsLib.c setup zeroes all values.
  84.      */
  85.     udp_in.sin_len = sizeof (struct sockaddr_in);
  86.     udp_in.sin_family = AF_INET;
  87.     udp_last_inpcb = NULL;
  88.     udp_ttl = UDP_TTL;
  89.     udp_pcbhashsize = UDBHASHSIZE;
  90. #endif
  91.     return (OK); 
  92.     }