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

SNMP编程

开发平台:

Unix_Linux

  1. #ifndef SNMPSECMOD_H
  2. #define SNMPSECMOD_H
  3. #ifdef __cplusplus
  4. extern          "C" {
  5. #endif
  6. #include <net-snmp/library/snmp_transport.h>
  7. struct snmp_secmod_def;
  8. /*
  9.  * parameter information passed to security model routines
  10.  */
  11. struct snmp_secmod_outgoing_params {
  12.     int             msgProcModel;
  13.     u_char         *globalData;
  14.     size_t          globalDataLen;
  15.     int             maxMsgSize;
  16.     int             secModel;
  17.     u_char         *secEngineID;
  18.     size_t          secEngineIDLen;
  19.     char           *secName;
  20.     size_t          secNameLen;
  21.     int             secLevel;
  22.     u_char         *scopedPdu;
  23.     size_t          scopedPduLen;
  24.     void           *secStateRef;
  25.     u_char         *secParams;
  26.     size_t         *secParamsLen;
  27.     u_char        **wholeMsg;
  28.     size_t         *wholeMsgLen;
  29.     size_t         *wholeMsgOffset;
  30.     netsnmp_pdu    *pdu;        /* IN - the pdu getting encoded            */
  31.     netsnmp_session *session;   /* IN - session sending the message        */
  32. };
  33. struct snmp_secmod_incoming_params {
  34.     int             msgProcModel;       /* IN */
  35.     size_t          maxMsgSize; /* IN     - Used to calc maxSizeResponse.  */
  36.     u_char         *secParams;  /* IN     - BER encoded securityParameters. */
  37.     int             secModel;   /* IN */
  38.     int             secLevel;   /* IN     - AuthNoPriv; authPriv etc.      */
  39.     u_char         *wholeMsg;   /* IN     - Original v3 message.           */
  40.     size_t          wholeMsgLen;        /* IN     - Msg length.                    */
  41.     u_char         *secEngineID;        /* OUT    - Pointer snmpEngineID.          */
  42.     size_t         *secEngineIDLen;     /* IN/OUT - Len available; len returned.   */
  43.     /*
  44.      * NOTE: Memory provided by caller.      
  45.      */
  46.     char           *secName;    /* OUT    - Pointer to securityName.       */
  47.     size_t         *secNameLen; /* IN/OUT - Len available; len returned.   */
  48.     u_char        **scopedPdu;  /* OUT    - Pointer to plaintext scopedPdu. */
  49.     size_t         *scopedPduLen;       /* IN/OUT - Len available; len returned.   */
  50.     size_t         *maxSizeResponse;    /* OUT    - Max size of Response PDU.      */
  51.     void          **secStateRef;        /* OUT    - Ref to security state.         */
  52.     netsnmp_session *sess;      /* IN     - session which got the message  */
  53.     netsnmp_pdu    *pdu;        /* IN     - the pdu getting parsed         */
  54.     u_char          msg_flags;  /* IN     - v3 Message flags.              */
  55. };
  56. /*
  57.  * function pointers:
  58.  */
  59. /*
  60.  * free's a given security module's data; called at unregistration time 
  61.  */
  62. typedef int     (SecmodSessionCallback) (netsnmp_session *);
  63. typedef int     (SecmodPduCallback) (netsnmp_pdu *);
  64. typedef int     (Secmod2PduCallback) (netsnmp_pdu *, netsnmp_pdu *);
  65. typedef int     (SecmodOutMsg) (struct snmp_secmod_outgoing_params *);
  66. typedef int     (SecmodInMsg) (struct snmp_secmod_incoming_params *);
  67. typedef void    (SecmodFreeState) (void *);
  68. typedef void    (SecmodHandleReport) (void *sessp,
  69.                                       netsnmp_transport *transport,
  70.                                       netsnmp_session *,
  71.                                       int result,
  72.                                       netsnmp_pdu *origpdu);
  73. /*
  74.  * definition of a security module
  75.  */
  76. /*
  77.  * all of these callback functions except the encoding and decoding
  78.  * routines are optional.  The rest of them are available if need.  
  79.  */
  80. struct snmp_secmod_def {
  81.     /*
  82.      * session maniplation functions 
  83.      */
  84.     SecmodSessionCallback *session_open;        /* called in snmp_sess_open()  */
  85.     SecmodSessionCallback *session_close;       /* called in snmp_sess_close() */
  86.     /*
  87.      * pdu manipulation routines 
  88.      */
  89.     SecmodPduCallback *pdu_free;        /* called in free_pdu() */
  90.     Secmod2PduCallback *pdu_clone;      /* called in snmp_clone_pdu() */
  91.     SecmodPduCallback *pdu_timeout;     /* called when request timesout */
  92.     SecmodFreeState *pdu_free_state_ref;        /* frees pdu->securityStateRef */
  93.     /*
  94.      * de/encoding routines: mandatory 
  95.      */
  96.     SecmodOutMsg   *encode_reverse;     /* encode packet back to front */
  97.     SecmodOutMsg   *encode_forward;     /* encode packet forward */
  98.     SecmodInMsg    *decode;     /* decode & validate incoming */
  99.    /*
  100.     * error and report handling
  101.     */
  102.    SecmodHandleReport *handle_report;
  103. };
  104. /*
  105.  * internal list
  106.  */
  107. struct snmp_secmod_list {
  108.     int             securityModel;
  109.     struct snmp_secmod_def *secDef;
  110.     struct snmp_secmod_list *next;
  111. };
  112. /*
  113.  * register a security service 
  114.  */
  115. int             register_sec_mod(int, const char *,
  116.                                  struct snmp_secmod_def *);
  117. /*
  118.  * find a security service definition 
  119.  */
  120. struct snmp_secmod_def *find_sec_mod(int);
  121. /*
  122.  * register a security service 
  123.  */
  124. int             unregister_sec_mod(int);        /* register a security service */
  125. void            init_secmod(void);
  126. /*
  127.  * clears the sec_mod list
  128.  */
  129. void            clear_sec_mod(void);
  130. #ifdef __cplusplus
  131. }
  132. #endif
  133. #endif                          /* SNMPSECMOD_H */