interface.h
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:6k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. /*
  2.  * interface data access header
  3.  *
  4.  * $Id: interface.h,v 1.15.2.1 2005/02/09 21:02:15 nba Exp $
  5.  */
  6. #ifndef NETSNMP_ACCESS_INTERFACE_H
  7. #define NETSNMP_ACCESS_INTERFACE_H
  8. #ifdef __cplusplus
  9. extern          "C" {
  10. #endif
  11. /*
  12.  * define flags to indicate the availability of certain data
  13.  */
  14. #define NETSNMP_INTERFACE_FLAGS_ACTIVE 0x00000001
  15. #define NETSNMP_INTERFACE_FLAGS_HAS_BYTES 0x00000002
  16. #define NETSNMP_INTERFACE_FLAGS_HAS_DROPS 0x00000004
  17. #define NETSNMP_INTERFACE_FLAGS_HAS_MCAST_PKTS 0x00000008
  18. #define NETSNMP_INTERFACE_FLAGS_HAS_HIGH_BYTES 0x00000010
  19. #define NETSNMP_INTERFACE_FLAGS_HAS_HIGH_PACKETS 0x00000020
  20. #define NETSNMP_INTERFACE_FLAGS_HAS_HIGH_SPEED 0x00000040
  21. #define NETSNMP_INTERFACE_FLAGS_DYNAMIC_SPEED 0x00000080
  22. #define NETSNMP_INTERFACE_FLAGS_HAS_LASTCHANGE 0x00000100
  23. #define NETSNMP_INTERFACE_FLAGS_HAS_DISCONTINUITY 0x00000200
  24. #define NETSNMP_INTERFACE_FLAGS_HAS_IF_FLAGS       0x00000400
  25. /*************************************************************
  26.  * constants for enums for the MIB node
  27.  * ifAdminStatus (INTEGER / ASN_INTEGER)
  28.  *
  29.  * since a Textual Convention may be referenced more than once in a
  30.  * MIB, protect againt redifinitions of the enum values.
  31.  */
  32. #ifndef ifAdminStatus_ENUMS
  33. #define ifAdminStatus_ENUMS
  34. #define IFADMINSTATUS_UP  1
  35. #define IFADMINSTATUS_DOWN  2
  36. #define IFADMINSTATUS_TESTING  3
  37. #endif                          /* ifAdminStatus_ENUMS */
  38. /*************************************************************
  39.  * constants for enums for the MIB node
  40.  * ifOperStatus (INTEGER / ASN_INTEGER)
  41.  *
  42.  * since a Textual Convention may be referenced more than once in a
  43.  * MIB, protect againt redifinitions of the enum values.
  44.  */
  45. #ifndef ifOperStatus_ENUMS
  46. #define ifOperStatus_ENUMS
  47. #define IFOPERSTATUS_UP  1
  48. #define IFOPERSTATUS_DOWN  2
  49. #define IFOPERSTATUS_TESTING  3
  50. #endif                          /* ifOperStatus_ENUMS */
  51. /**---------------------------------------------------------------------*/
  52. /*
  53.  * structure definitions
  54.  */
  55. typedef struct netsnmp_interface_stats_s {
  56.     /*
  57.      *  "Dynamic" fields
  58.      *  Cached versions of byte/packet counters, etc
  59.      *  (saved as a 'struct counter64' even if the
  60.      *   high order half isn't actually used)
  61.      *
  62.      */
  63.    /** input */
  64.     struct counter64 ibytes;
  65.     struct counter64 iucast;
  66.     struct counter64 imcast;
  67.     struct counter64 ibcast;
  68.     unsigned int     ierrors;
  69.     unsigned int     idiscards;
  70.     unsigned int     iunknown_protos;
  71.     unsigned int     inucast;
  72.    /** output */
  73.     struct counter64 obytes;
  74.     struct counter64 oucast;
  75.     struct counter64 omcast;
  76.     struct counter64 obcast;
  77.     unsigned int     oerrors;
  78.     unsigned int     odiscards;
  79.     unsigned int     oqlen;
  80.     unsigned int     collisions;
  81.     unsigned int     onucast;
  82. } netsnmp_interface_stats;
  83. typedef struct netsnmp_interface_entry_s {
  84.     netsnmp_index oid_index;
  85.     int     ns_flags; /* net-snmp flags */
  86.     oid     index;
  87.     /*
  88.      *  "Static" information
  89.      *  Typically constant for a given interface
  90.      */
  91.     char   *name;
  92.     char   *descr;
  93.     int     type;
  94.     unsigned int     speed;
  95.     unsigned int     speed_high;
  96.     char   *paddr;
  97.     int     paddr_len;
  98.     int     mtu;
  99.     u_long  lastchange;
  100.     time_t  discontinuity;
  101.    char  admin_status;
  102.    char  oper_status;
  103.    /** booleans (not TruthValues!) */
  104.    char  promiscuous;
  105.    char  connector_present;
  106.    /*-----------------------------------------------
  107.     * platform/arch/access specific data
  108.     */
  109.    unsigned int os_flags; /* iff NETSNMP_INTERFACE_FLAGS_HAS_FAMILY */
  110.    /*
  111.     * statistics
  112.     */
  113.    netsnmp_interface_stats stats;
  114.    /** old_stats is used in netsnmp_access_interface_entry_update_stats */
  115.    netsnmp_interface_stats *old_stats;
  116. } netsnmp_interface_entry;
  117. /*
  118.  * conf file overrides
  119.  */
  120. typedef struct _conf_if_list {
  121.     const char     *name;
  122.     int             type;
  123.     u_long          speed;
  124.     struct _conf_if_list *next;
  125. } netsnmp_conf_if_list;
  126.     typedef netsnmp_conf_if_list conf_if_list; /* backwards compat */
  127. /**---------------------------------------------------------------------*/
  128. /*
  129.  * ACCESS function prototypes
  130.  */
  131. void init_interface_common(void);
  132. void netsnmp_access_interface_init(void);
  133. /*
  134.  * ifcontainer init
  135.  */
  136. netsnmp_container * netsnmp_access_interface_container_init(u_int init_flags);
  137. #define NETSNMP_ACCESS_INTERFACE_INIT_NOFLAGS               0x0000
  138. #define NETSNMP_ACCESS_INTERFACE_INIT_ADDL_IDX_BY_NAME      0x0001
  139. /*
  140.  * ifcontainer load and free
  141.  */
  142. netsnmp_container*
  143. netsnmp_access_interface_container_load(netsnmp_container* container,
  144.                                         u_int load_flags);
  145. #define NETSNMP_ACCESS_INTERFACE_LOAD_NOFLAGS               0x0000
  146. void netsnmp_access_interface_container_free(netsnmp_container *container,
  147.                                              u_int free_flags);
  148. #define NETSNMP_ACCESS_INTERFACE_FREE_NOFLAGS               0x0000
  149. #define NETSNMP_ACCESS_INTERFACE_FREE_DONT_CLEAR            0x0001
  150. /*
  151.  * create/free an ifentry
  152.  */
  153. netsnmp_interface_entry *
  154. netsnmp_access_interface_entry_create(const char *name, oid if_index);
  155. void netsnmp_access_interface_entry_free(netsnmp_interface_entry * entry);
  156. int
  157. netsnmp_access_interface_entry_set_admin_status(netsnmp_interface_entry * entry,
  158.                                                 int ifAdminStatus);
  159. /*
  160.  * find entry in container
  161.  */
  162. netsnmp_interface_entry *
  163. netsnmp_access_interface_entry_get_by_name(netsnmp_container *container,
  164.                                            const char *name);
  165. netsnmp_interface_entry *
  166. netsnmp_access_interface_entry_get_by_index(netsnmp_container *container,
  167.                                             oid index);
  168. /*
  169.  * find ifIndex for given interface. 0 == not found.
  170.  */
  171. oid netsnmp_access_interface_index_find(const char *name);
  172. /*
  173.  * find name for given index
  174.  */
  175. const char *netsnmp_access_interface_name_find(oid index);
  176. /*
  177.  * copy interface entry data
  178.  */
  179. int netsnmp_access_interface_entry_copy(netsnmp_interface_entry * lhs,
  180.                                         netsnmp_interface_entry * rhs);
  181. void netsnmp_access_interface_entry_guess_speed(netsnmp_interface_entry *);
  182. void netsnmp_access_interface_entry_overrides(netsnmp_interface_entry *);
  183. netsnmp_conf_if_list *
  184. netsnmp_access_interface_entry_overrides_get(const char * name);
  185. /**---------------------------------------------------------------------*/
  186. #ifdef __cplusplus
  187. }
  188. #endif
  189. #endif /* NETSNMP_ACCESS_INTERFACE_H */