m2IcmpLib.c
上传用户:baixin
上传日期:2008-03-13
资源大小:4795k
文件大小:8k
开发平台:

MultiPlatform

  1. /* m2IcmpLib.c - MIB-II ICMP-group API for SNMP Agents */
  2. /* Copyright 1984 - 2001 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01d,15oct01,rae  merge from truestack ver 01e, base 01c (VIRTUAL_STACK)
  8. 01c,25jan95,jdi  doc cleanup.
  9. 01b,11nov94,rhp  edited man pages
  10. 01a,08dec93,jag  written
  11. */
  12. /*
  13. DESCRIPTION
  14. This library provides MIB-II services for the ICMP group.  It provides routines
  15. to initialize the group, and to access the group scalar variables. For a
  16. broader description of MIB-II services, see the manual entry for m2Lib.
  17. To use this feature, include the following component:
  18. INCLUDE_MIB2_ICMP
  19. USING THIS LIBRARY
  20. This library can be initialized and deleted by calling the routines
  21. m2IcmpInit() and m2IcmpDelete() respectively, if only the ICMP group's services
  22. are needed.  If full MIB-II support is used, this group and all other
  23. groups can be initialized and deleted by calling m2Init() and
  24. m2Delete().
  25. The group scalar variables are accessed by calling
  26. m2IcmpGroupInfoGet() as follows:
  27. .CS
  28.     M2_ICMP   icmpVars;
  29.     if (m2IcmpGroupInfoGet (&icmpVars) == OK)
  30. /@ values in icmpVars are valid @/
  31. .CE
  32. INCLUDE FILES: m2Lib.h
  33.  
  34. SEE ALSO:
  35. m2Lib, m2IfLib, m2IpLib, m2TcpLib, m2SysLib
  36. */
  37. /* includes */
  38. #include <vxWorks.h>
  39. #include "m2Lib.h"
  40. #include <netinet/in.h>
  41. #include <netinet/in_systm.h>
  42. #include <netinet/ip.h>
  43. #include <netinet/ip_icmp.h>
  44. #include <netinet/icmp_var.h>
  45. #include "errnoLib.h"
  46. #include "semLib.h"
  47. #ifdef VIRTUAL_STACK
  48. #include "netinet/vsLib.h"
  49. #endif /* VIRTUAL_STACK */
  50. /* external declarations */
  51. #ifndef VIRTUAL_STACK
  52. extern struct icmpstat    icmpstat;    /* ICMP statistics structure */
  53. #endif /* VIRTUAL_STACK */
  54. /*******************************************************************************
  55. *
  56. * m2IcmpInit - initialize MIB-II ICMP-group access
  57. *
  58. * This routine allocates the resources needed to allow access to the MIB-II
  59. * ICMP-group variables.  This routine must be called before any ICMP variables
  60. * can be accessed.
  61. *
  62. * RETURNS: OK, always.
  63. *
  64. * SEE ALSO: m2IcmpGroupInfoGet(), m2IcmpDelete()
  65. */
  66. STATUS m2IcmpInit (void)
  67.     {
  68.     return (OK);
  69.     }
  70. /******************************************************************************
  71. *
  72. * m2IcmpGroupInfoGet - get the MIB-II ICMP-group global variables
  73. *
  74. * This routine fills in the ICMP structure at <pIcmpInfo> with the 
  75. * MIB-II ICMP scalar variables.
  76. *
  77. * RETURNS: OK, or ERROR if the input parameter <pIcmpInfo> is invalid.
  78. *
  79. * ERRNO:
  80. * S_m2Lib_INVALID_PARAMETER
  81. *
  82. * SEE ALSO: m2IcmpInit(), m2IcmpDelete()
  83. */
  84. STATUS m2IcmpGroupInfoGet
  85.     (
  86.     M2_ICMP * pIcmpInfo          /* pointer to the ICMP group structure */
  87.     )
  88.     {
  89.     int ix;
  90.  
  91.     /* Validate Pointer to ICMP structure */
  92.  
  93.     if (pIcmpInfo == NULL)
  94. {
  95. errnoSet (S_m2Lib_INVALID_PARAMETER);
  96.         return (ERROR);
  97. }
  98.  
  99.     pIcmpInfo->icmpInMsgs  = 0;
  100.     pIcmpInfo->icmpOutMsgs = 0;
  101.  
  102.     /* Add the counts of all the packet types Sent and Received */
  103.  
  104.     for (ix = 0; ix < ICMP_MAXTYPE; ix++)
  105.         {
  106. #ifdef VIRTUAL_STACK
  107.         pIcmpInfo->icmpInMsgs      += _icmpstat.icps_inhist [ix];
  108.         pIcmpInfo->icmpOutMsgs     += _icmpstat.icps_outhist [ix];
  109. #else
  110.         pIcmpInfo->icmpInMsgs      += icmpstat.icps_inhist [ix];
  111.         pIcmpInfo->icmpOutMsgs     += icmpstat.icps_outhist [ix];
  112. #endif /* VIRTUAL_STACK */
  113.         }
  114.  
  115.     /* Add to the Input count the ICMP packets received in error */
  116.  
  117. #ifdef VIRTUAL_STACK
  118.     pIcmpInfo->icmpInMsgs          += _icmpstat.icps_badcode +
  119.                                       _icmpstat.icps_tooshort +
  120.                                       _icmpstat.icps_checksum +
  121.                                       _icmpstat.icps_badlen;
  122.  
  123.     pIcmpInfo->icmpInErrors         = _icmpstat.icps_badcode +
  124.                                       _icmpstat.icps_tooshort +
  125.                                       _icmpstat.icps_checksum +
  126.                                       _icmpstat.icps_badlen;
  127.  
  128.     pIcmpInfo->icmpInDestUnreachs   = _icmpstat.icps_inhist [ICMP_UNREACH];
  129.     pIcmpInfo->icmpInTimeExcds      = _icmpstat.icps_inhist [ICMP_TIMXCEED];
  130.     pIcmpInfo->icmpInParmProbs      = _icmpstat.icps_inhist [ICMP_PARAMPROB];
  131.     pIcmpInfo->icmpInSrcQuenchs     = _icmpstat.icps_inhist [ICMP_SOURCEQUENCH];
  132.     pIcmpInfo->icmpInRedirects      = _icmpstat.icps_inhist [ICMP_REDIRECT];
  133.     pIcmpInfo->icmpInEchos          = _icmpstat.icps_inhist [ICMP_ECHO];
  134.     pIcmpInfo->icmpInEchoReps       = _icmpstat.icps_inhist [ICMP_ECHOREPLY];
  135.     pIcmpInfo->icmpInTimestamps     = _icmpstat.icps_inhist [ICMP_TSTAMP];
  136.     pIcmpInfo->icmpInTimestampReps  = _icmpstat.icps_inhist [ICMP_TSTAMPREPLY];
  137.     pIcmpInfo->icmpInAddrMasks      = _icmpstat.icps_inhist [ICMP_MASKREQ];
  138.     pIcmpInfo->icmpInAddrMaskReps   = _icmpstat.icps_inhist [ICMP_MASKREPLY];
  139.  
  140.     pIcmpInfo->icmpOutErrors        = _icmpstat.icps_error;
  141.     pIcmpInfo->icmpOutDestUnreachs  = _icmpstat.icps_outhist [ICMP_UNREACH];
  142.     pIcmpInfo->icmpOutTimeExcds     = _icmpstat.icps_outhist [ICMP_TIMXCEED];
  143.     pIcmpInfo->icmpOutParmProbs     = _icmpstat.icps_outhist [ICMP_PARAMPROB];
  144.     pIcmpInfo->icmpOutSrcQuenchs    = _icmpstat.icps_outhist [ICMP_SOURCEQUENCH];
  145.     pIcmpInfo->icmpOutRedirects     = _icmpstat.icps_outhist [ICMP_REDIRECT];
  146.     pIcmpInfo->icmpOutEchos         = _icmpstat.icps_outhist [ICMP_ECHO];
  147.     pIcmpInfo->icmpOutEchoReps      = _icmpstat.icps_outhist [ICMP_ECHOREPLY];
  148.     pIcmpInfo->icmpOutTimestamps    = _icmpstat.icps_outhist [ICMP_TSTAMP];
  149.     pIcmpInfo->icmpOutTimestampReps = _icmpstat.icps_outhist [ICMP_TSTAMPREPLY];
  150.     pIcmpInfo->icmpOutAddrMasks     = _icmpstat.icps_outhist [ICMP_MASKREQ];
  151.     pIcmpInfo->icmpOutAddrMaskReps  = _icmpstat.icps_outhist [ICMP_MASKREPLY];
  152. #else
  153.     pIcmpInfo->icmpInMsgs          += icmpstat.icps_badcode +
  154.                                       icmpstat.icps_tooshort +
  155.                                       icmpstat.icps_checksum +
  156.                                       icmpstat.icps_badlen;
  157.  
  158.     pIcmpInfo->icmpInErrors         = icmpstat.icps_badcode +
  159.                                       icmpstat.icps_tooshort +
  160.                                       icmpstat.icps_checksum +
  161.                                       icmpstat.icps_badlen;
  162.  
  163.     pIcmpInfo->icmpInDestUnreachs   = icmpstat.icps_inhist [ICMP_UNREACH];
  164.     pIcmpInfo->icmpInTimeExcds      = icmpstat.icps_inhist [ICMP_TIMXCEED];
  165.     pIcmpInfo->icmpInParmProbs      = icmpstat.icps_inhist [ICMP_PARAMPROB];
  166.     pIcmpInfo->icmpInSrcQuenchs     = icmpstat.icps_inhist [ICMP_SOURCEQUENCH];
  167.     pIcmpInfo->icmpInRedirects      = icmpstat.icps_inhist [ICMP_REDIRECT];
  168.     pIcmpInfo->icmpInEchos          = icmpstat.icps_inhist [ICMP_ECHO];
  169.     pIcmpInfo->icmpInEchoReps       = icmpstat.icps_inhist [ICMP_ECHOREPLY];
  170.     pIcmpInfo->icmpInTimestamps     = icmpstat.icps_inhist [ICMP_TSTAMP];
  171.     pIcmpInfo->icmpInTimestampReps  = icmpstat.icps_inhist [ICMP_TSTAMPREPLY];
  172.     pIcmpInfo->icmpInAddrMasks      = icmpstat.icps_inhist [ICMP_MASKREQ];
  173.     pIcmpInfo->icmpInAddrMaskReps   = icmpstat.icps_inhist [ICMP_MASKREPLY];
  174.  
  175.     pIcmpInfo->icmpOutErrors        = icmpstat.icps_error;
  176.     pIcmpInfo->icmpOutDestUnreachs  = icmpstat.icps_outhist [ICMP_UNREACH];
  177.     pIcmpInfo->icmpOutTimeExcds     = icmpstat.icps_outhist [ICMP_TIMXCEED];
  178.     pIcmpInfo->icmpOutParmProbs     = icmpstat.icps_outhist [ICMP_PARAMPROB];
  179.     pIcmpInfo->icmpOutSrcQuenchs    = icmpstat.icps_outhist [ICMP_SOURCEQUENCH];
  180.     pIcmpInfo->icmpOutRedirects     = icmpstat.icps_outhist [ICMP_REDIRECT];
  181.     pIcmpInfo->icmpOutEchos         = icmpstat.icps_outhist [ICMP_ECHO];
  182.     pIcmpInfo->icmpOutEchoReps      = icmpstat.icps_outhist [ICMP_ECHOREPLY];
  183.     pIcmpInfo->icmpOutTimestamps    = icmpstat.icps_outhist [ICMP_TSTAMP];
  184.     pIcmpInfo->icmpOutTimestampReps = icmpstat.icps_outhist [ICMP_TSTAMPREPLY];
  185.     pIcmpInfo->icmpOutAddrMasks     = icmpstat.icps_outhist [ICMP_MASKREQ];
  186.     pIcmpInfo->icmpOutAddrMaskReps  = icmpstat.icps_outhist [ICMP_MASKREPLY];
  187. #endif /* VIRTUAL_STACK */
  188.  
  189.     return (OK);
  190.     }
  191. /*******************************************************************************
  192. *
  193. * m2IcmpDelete - delete all resources used to access the ICMP group
  194. *
  195. * This routine frees all the resources allocated at the time the ICMP group was
  196. * initialized.  The ICMP group should not be accessed after this routine has 
  197. * been called.
  198. *
  199. * RETURNS: OK, always.
  200. *
  201. * SEE ALSO: m2IcmpInit(), m2IcmpGroupInfoGet()
  202. */
  203. STATUS m2IcmpDelete (void)
  204.     {
  205.     return (OK);
  206.     }