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

SNMP编程

开发平台:

Unix_Linux

  1. #ifndef _SNMP_TRANSPORT_H
  2. #define _SNMP_TRANSPORT_H
  3. #include <sys/types.h>
  4. #include <net-snmp/library/asn1.h>
  5. #ifdef __cplusplus
  6. extern          "C" {
  7. #endif
  8. /*  Some transport-type constants.  */
  9. #ifndef NETSNMP_STREAM_QUEUE_LEN
  10. #define NETSNMP_STREAM_QUEUE_LEN 5
  11. #endif
  12. /*  Some transport-type flags.  */
  13. #define NETSNMP_TRANSPORT_FLAG_STREAM 0x01
  14. #define NETSNMP_TRANSPORT_FLAG_LISTEN 0x02
  15. /*  The standard SNMP domains.  */
  16. extern oid      netsnmpUDPDomain[];  /*      = { 1, 3, 6, 1, 6, 1, 1 };  */
  17. extern oid      netsnmpCLNSDomain[];    /*      = { 1, 3, 6, 1, 6, 1, 2 };  */
  18. extern oid      netsnmpCONSDomain[];    /*      = { 1, 3, 6, 1, 6, 1, 3 };  */
  19. extern oid      netsnmpDDPDomain[];  /*      = { 1, 3, 6, 1, 6, 1, 4 };  */
  20. extern oid      netsnmpIPXDomain[];  /*      = { 1, 3, 6, 1, 6, 1, 5 };  */
  21. extern size_t   netsnmpUDPDomain_len;
  22. extern size_t   netsnmpCLNSDomain_len;
  23. extern size_t   netsnmpCONSDomain_len;
  24. extern size_t   netsnmpDDPDomain_len;
  25. extern size_t   netsnmpIPXDomain_len;
  26. /*  Structure which defines the transport-independent API.  */
  27. typedef struct netsnmp_transport_s {
  28.     /*  The transport domain object identifier.  */
  29.     const oid      *domain;
  30.     int             domain_length;  /*  In sub-IDs, not octets.  */
  31.     /*  Local transport address (in relevant SNMP-style encoding).  */
  32.     
  33.     unsigned char  *local;
  34.     int             local_length;   /*  In octets.  */
  35.     /*  Remote transport address (in relevant SNMP-style encoding).  */
  36.     unsigned char  *remote;
  37.     int             remote_length;  /*  In octets.  */
  38.     /*  The actual socket.  */
  39.     
  40.     int             sock;
  41.     /*  Flags (see #definitions above).  */
  42.     unsigned int    flags;
  43.     /*  Protocol-specific opaque data pointer.  */
  44.     void           *data;
  45.     int             data_length;
  46.     /*  Maximum size of PDU that can be sent/received by this transport.  */
  47.     size_t          msgMaxSize;
  48.     /*  Callbacks.  Arguments are:
  49.      *
  50.      *              "this" pointer, fd, buf, size, *opaque, *opaque_length  
  51.      */
  52.     int             (*f_recv)   (struct netsnmp_transport_s *, void *,
  53.  int, void **, int *);
  54.     int             (*f_send)   (struct netsnmp_transport_s *, void *,
  55.  int, void **, int *);
  56.     int             (*f_close)  (struct netsnmp_transport_s *);
  57.     /*  This callback is only necessary for stream-oriented transports.  */
  58.     int             (*f_accept) (struct netsnmp_transport_s *);
  59.     /*  Optional callback to format a transport address.  */
  60.     char           *(*f_fmtaddr)(struct netsnmp_transport_s *, void *,
  61.  int);
  62. } netsnmp_transport;
  63. typedef struct netsnmp_transport_list_s {
  64.     netsnmp_transport *transport;
  65.     struct netsnmp_transport_list_s *next;
  66. } netsnmp_transport_list;
  67. typedef struct netsnmp_tdomain_s {
  68.     const oid      *name;
  69.     size_t          name_length;
  70.     const char    **prefix;
  71.     netsnmp_transport *(*f_create_from_tstring) (const char *, int);
  72.     netsnmp_transport *(*f_create_from_ostring) (const u_char *,  size_t, int);
  73.     struct netsnmp_tdomain_s *next;
  74. } netsnmp_tdomain;
  75. /*  Some utility functions.  */
  76. int netsnmp_transport_add_to_list(netsnmp_transport_list **transport_list,
  77.   netsnmp_transport *transport);
  78. int netsnmp_transport_remove_from_list(netsnmp_transport_list **transport_list,
  79.        netsnmp_transport *transport);
  80. /*
  81.  * Return an exact (deep) copy of t, or NULL if there is a memory allocation
  82.  * problem (for instance).
  83.  */
  84. netsnmp_transport *netsnmp_transport_copy(netsnmp_transport *t);
  85. /*  Free an netsnmp_transport.  */
  86. void            netsnmp_transport_free(netsnmp_transport *t);
  87. /*
  88.  * If the passed oid (in_oid, in_len) corresponds to a supported transport
  89.  * domain, return 1; if not return 0.  If out_oid is not NULL and out_len is
  90.  * not NULL, then the "internal" oid which should be used to identify this
  91.  * domain (e.g. in pdu->tDomain etc.) is written to *out_oid and its length to
  92.  * *out_len.
  93.  */
  94. int             netsnmp_tdomain_support(const oid *in_oid, size_t in_len,
  95. const oid **out_oid, size_t *out_len);
  96. int             netsnmp_tdomain_register(netsnmp_tdomain *domain);
  97.     
  98. int             netsnmp_tdomain_unregister(netsnmp_tdomain *domain);
  99. void            netsnmp_clear_tdomain_list(void);
  100. void            netsnmp_tdomain_init(void);
  101. netsnmp_transport *netsnmp_tdomain_transport(const char *string,
  102.      int local,
  103.      const char
  104.      *default_domain);
  105. netsnmp_transport *netsnmp_tdomain_transport_oid(const oid * dom,
  106.  size_t dom_len,
  107.  const u_char * o,
  108.  size_t o_len,
  109.  int local);
  110. #ifdef __cplusplus
  111. }
  112. #endif
  113. #endif/*_SNMP_TRANSPORT_H*/