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

VxWorks

开发平台:

C/C++

  1. /* m2Lib.c - MIB-II API library for SNMP agents */
  2. /* Copyright 1984 - 2000 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01f,25oct00,ham  doc: cleanup for vxWorks AE 1.0.
  8. 01e,25jan95,jdi  doc cleanup.
  9. 01d,11nov94,rhp  minor correction to library man page.
  10. 01c,10nov94,rhp  edited man pages.
  11. 01b,15feb94,jag  added MIB-II library documentation.
  12. 01a,05jan94,elh  written
  13. */
  14. /*
  15. DESCRIPTION
  16. This library provides Management Information Base (MIB-II, defined in
  17. RFC 1213) services for applications wishing to have access to MIB
  18. parameters.
  19. To use this feature, include the following component:
  20. INCLUDE_MIB2_ALL
  21. There are no specific provisions for MIB-I: all services
  22. are provided at the MIB-II level.  Applications that use this library
  23. for MIB-I must hide the MIB-II extensions from higher level protocols.
  24. The library accesses all the MIB-II parameters, and presents them to
  25. the application in data structures based on the MIB-II specifications.
  26. The routines provided by the VxWorks MIB-II library are separated
  27. into groups that follow the MIB-II definition.  Each supported group
  28. has its own interface library:
  29. .iP m2SysLib 15 3
  30. systems group
  31. .iP m2IfLib
  32. interface group
  33. .iP m2IpLib
  34. IP group (includes AT)
  35. .iP m2IcmpLib
  36. ICMP group 
  37. .iP m2TcpLib
  38. TCP group 
  39. .iP m2UdpLib
  40. UDP group 
  41. .LP
  42. MIB-II retains the AT group for backward compatibility, but
  43. includes its functionality in the IP group.  The EGP and SNMP groups
  44. are not supported by this interface.  The variables in each group have
  45. been subdivided into two types: table entries and scalar variables.
  46. Each type has a pair of routines that get and set the variables.
  47. USING THIS LIBRARY
  48. There are four types of operations on each group:
  49.   - initializing the group
  50.   - getting variables and table entries
  51.   - setting variables and table entries
  52.   - deleting the group
  53.   
  54. Only the groups that are to be used need be initialized.  There is one
  55. exception: to use the IP group, the interface group must also be
  56. initialized.  Applications that require MIB-II support from all groups can
  57. initialize all groups at once by calling the m2Init().  All MIB-II group
  58. services can be disabled by calling m2Delete().  Applications that need
  59. access only to a particular set of groups need only call the
  60. initialization routines of the desired groups.
  61. To read the scalar variables for each group, call one of the following
  62. routines:
  63.     m2SysGroupInfoGet()
  64.     m2IfGroupInfoGet()
  65.     m2IpGroupInfoGet()
  66.     m2IcmpGroupInfoGet()
  67.     m2TcpGroupInfoGet()
  68.     m2UdpGroupInfoGet()
  69. The input parameter to the routine is always a pointer to a structure
  70. specific to the associated group.  The scalar group structures follow
  71. the naming convention "M2_<groupname>".  The get routines fill in the
  72. input structure with the values of all the group variables.
  73. The scalar variables can also be set to a user supplied value. Not all
  74. groups permit setting variables, as specified by the MIB-II definition.  
  75. The following group routines allow setting variables:
  76.     m2SysGroupInfoSet()
  77.     m2IpGroupInfoSet()
  78. The input parameters to the variable-set routines are a bit field
  79. that specifies which variables to set, and a group structure.  The
  80. structure is the same structure type used in the get operation.
  81. Applications need set only the structure fields corresponding to the
  82. bits that are set in the bit field.
  83. The MIB-II table routines read one entry at a time.  Each MIB-II group
  84. that has tables has a get routine for each table.  The following
  85. table-get routines are available:
  86.     m2IfTblEntryGet()
  87.     m2IpAddrTblEntryGet()
  88.     m2IpAtransTblEntryGet()
  89.     m2IpRouteTblEntryGet()
  90.     m2TcpConnEntryGet()
  91.     m2UdpTblEntryGet()
  92. The input parameters are a pointer to a table entry structure, and a
  93. flag value specifying one of two types of table search.  Each table
  94. entry is a structure, where the struct type name follows this naming
  95. convention: "M2_<Groupname><Tablename>TBL".  The MIB-II RFC specifies an
  96. index that identifies a table entry.  Each get request must specify an
  97. index value.  To retrieve the first entry in a table, set all the
  98. index fields of the table-entry structure to zero, and use the search
  99. parameter M2_NEXT_VALUE.  To retrieve subsequent entries, pass the
  100. index returned from the previous invocation, incremented to the next
  101. possible lexicographical entry.  The search field can only be set to
  102. the constants M2_NEXT_VALUE or M2_EXACT_VALUE:
  103. .iP M2_NEXT_VALUE
  104. retrieves a table entry that is either identical to
  105. the index value specified as input, or is the closest entry following
  106. that value, in lexicographic order.
  107. .iP M2_EXACT_VALUE
  108. retrieves a table entry that exactly matches the index
  109. specified in the input structure.
  110. .LP
  111. Some MIB-II table entries can be added, modified and deleted.
  112. Routines to manipulate such entries are described in the manual pages
  113. for individual groups.
  114. All the IP network addresses that are exchanged with the MIB-II
  115. library must be in host-byte order; use ntohl() to convert addresses
  116. before calling these library routines.
  117. The following example shows how to initialize the MIB-II library for
  118. all groups.
  119. .CS
  120.     extern FUNCPTR myTrapGenerator;
  121.     extern void *  myTrapGeneratorArg;
  122.     M2_OBJECTID mySysObjectId = { 8, {1,3,6,1,4,1,731,1} };
  123.     if (m2Init ("VxWorks 5.1.1 MIB-II library (sysDescr)",
  124.         "support@wrs.com (sysContact)",
  125.         "1010 Atlantic Avenue Alameda, California 94501 (sysLocation)",
  126.  &mySysObjectId,
  127.  myTrapGenerator,
  128.  myTrapGeneratorArg,
  129.  0) == OK)
  130. /@ MIB-II groups initialized successfully @/
  131. .CE
  132. INCLUDE FILES: m2Lib.h
  133.  
  134. SEE ALSO: m2IfLib, m2IpLib, m2IcmpLib, m2UdpLib, m2TcpLib, m2SysLib 
  135. */
  136. /* includes */
  137. #include <vxWorks.h>
  138. #include "m2Lib.h"
  139. /******************************************************************************
  140. *
  141. * m2Init - initialize the SNMP MIB-2 library 
  142. *
  143. * This routine initializes the MIB-2 library by calling the initialization
  144. * routines for each MIB-2 group.  The parameters <pMib2SysDescr>
  145. * <pMib2SysContact>, <pMib2SysLocation>, and <pMib2SysObjectId> are passed
  146. * directly to m2SysInit();  <pTrapRtn> and <pTrapArg> are passed directly to
  147. * m2IfInit(); and <maxRouteTableSize> is passed to m2IpInit().
  148. *
  149. * RETURNS: OK if successful, otherwise ERROR.
  150. *
  151. * SEE ALSO:
  152. * m2SysInit(), m2TcpInit(), m2UdpInit(), m2IcmpInit(), m2IfInit(), m2IpInit()
  153. */
  154. STATUS m2Init 
  155.     (
  156.     char * pMib2SysDescr, /* sysDescr */
  157.     char * pMib2SysContact, /* sysContact */
  158.     char * pMib2SysLocation, /* sysLocation */
  159.     M2_OBJECTID * pMib2SysObjectId,  /* sysObjectID */
  160.     FUNCPTR  pTrapRtn,  /* link up/down -trap routine */
  161.     void *  pTrapArg, /* trap routine arg */
  162.     int maxRouteTableSize  /* max size of routing table */ 
  163.     )
  164.     {
  165.     /* Call the initialization routine for each group in MIB-2 */
  166.     if ((m2SysInit (pMib2SysDescr, pMib2SysContact, pMib2SysLocation,
  167.     pMib2SysObjectId) == ERROR) ||
  168.      (m2IfInit (pTrapRtn, pTrapArg) == ERROR) ||
  169.         (m2IpInit (maxRouteTableSize) == ERROR) || 
  170.      (m2TcpInit () == ERROR) ||
  171.      (m2IcmpInit () == ERROR) ||
  172. (m2UdpInit () == ERROR))
  173. {
  174. m2Delete ();
  175. return (ERROR); /* initialization failed */
  176. }
  177.     return (OK);
  178.     }
  179. /******************************************************************************
  180. *
  181. * m2Delete - delete all the MIB-II library groups
  182. *
  183. * This routine cleans up the state associated with the MIB-II library.
  184. *
  185. * RETURNS: OK (always).
  186. *
  187. * SEE ALSO: m2SysDelete(), m2TcpDelete(), m2UdpDelete(), m2IcmpDelete(),
  188. * m2IfDelete(), m2IpDelete()
  189. */
  190. STATUS m2Delete (void)
  191.     {
  192.     m2SysDelete ();
  193.     m2IfDelete ();
  194.     m2IpDelete ();
  195.     m2TcpDelete ();
  196.     m2IcmpDelete ();
  197.     m2UdpDelete ();
  198.     return (OK);
  199.     }