#ifndef SNMPSECMOD_H #define SNMPSECMOD_H #ifdef __cplusplus extern "C" { #endif #include /* Locally defined security models. * (Net-SNMP enterprise number = 8072)*256 + local_num */ #define NETSNMP_SEC_MODEL_KSM 2066432 #define NETSNMP_KSM_SECURITY_MODEL NETSNMP_SEC_MODEL_KSM #define NETSNMP_TSM_SECURITY_MODEL SNMP_SEC_MODEL_TSM struct snmp_secmod_def; /* * parameter information passed to security model routines */ struct snmp_secmod_outgoing_params { int msgProcModel; u_char *globalData; size_t globalDataLen; int maxMsgSize; int secModel; u_char *secEngineID; size_t secEngineIDLen; char *secName; size_t secNameLen; int secLevel; u_char *scopedPdu; size_t scopedPduLen; void *secStateRef; u_char *secParams; size_t *secParamsLen; u_char **wholeMsg; size_t *wholeMsgLen; size_t *wholeMsgOffset; netsnmp_pdu *pdu; /* IN - the pdu getting encoded */ netsnmp_session *session; /* IN - session sending the message */ }; struct snmp_secmod_incoming_params { int msgProcModel; /* IN */ size_t maxMsgSize; /* IN - Used to calc maxSizeResponse. */ u_char *secParams; /* IN - BER encoded securityParameters. */ int secModel; /* IN */ int secLevel; /* IN - AuthNoPriv; authPriv etc. */ u_char *wholeMsg; /* IN - Original v3 message. */ size_t wholeMsgLen; /* IN - Msg length. */ u_char *secEngineID; /* OUT - Pointer snmpEngineID. */ size_t *secEngineIDLen; /* IN/OUT - Len available; len returned. */ /* * NOTE: Memory provided by caller. */ char *secName; /* OUT - Pointer to securityName. */ size_t *secNameLen; /* IN/OUT - Len available; len returned. */ u_char **scopedPdu; /* OUT - Pointer to plaintext scopedPdu. */ size_t *scopedPduLen; /* IN/OUT - Len available; len returned. */ size_t *maxSizeResponse; /* OUT - Max size of Response PDU. */ void **secStateRef; /* OUT - Ref to security state. */ netsnmp_session *sess; /* IN - session which got the message */ netsnmp_pdu *pdu; /* IN - the pdu getting parsed */ u_char msg_flags; /* IN - v3 Message flags. */ }; /* * function pointers: */ /* * free's a given security module's data; called at unregistration time */ typedef int (SecmodSessionCallback) (netsnmp_session *); typedef int (SecmodPduCallback) (netsnmp_pdu *); typedef int (Secmod2PduCallback) (netsnmp_pdu *, netsnmp_pdu *); typedef int (SecmodOutMsg) (struct snmp_secmod_outgoing_params *); typedef int (SecmodInMsg) (struct snmp_secmod_incoming_params *); typedef void (SecmodFreeState) (void *); typedef void (SecmodHandleReport) (void *sessp, netsnmp_transport *transport, netsnmp_session *, int result, netsnmp_pdu *origpdu); typedef int (SecmodDiscoveryMethod) (void *slp, netsnmp_session *session); typedef int (SecmodPostDiscovery) (void *slp, netsnmp_session *session); typedef int (SecmodSessionSetup) (netsnmp_session *in_session, netsnmp_session *out_session); /* * definition of a security module */ /* * all of these callback functions except the encoding and decoding * routines are optional. The rest of them are available if need. */ struct snmp_secmod_def { /* * session maniplation functions */ SecmodSessionCallback *session_open; /* called in snmp_sess_open() */ SecmodSessionCallback *session_close; /* called in snmp_sess_close() */ SecmodSessionSetup *session_setup; /* * pdu manipulation routines */ SecmodPduCallback *pdu_free; /* called in free_pdu() */ Secmod2PduCallback *pdu_clone; /* called in snmp_clone_pdu() */ SecmodPduCallback *pdu_timeout; /* called when request timesout */ SecmodFreeState *pdu_free_state_ref; /* frees pdu->securityStateRef */ /* * de/encoding routines: mandatory */ SecmodOutMsg *encode_reverse; /* encode packet back to front */ SecmodOutMsg *encode_forward; /* encode packet forward */ SecmodInMsg *decode; /* decode & validate incoming */ /* * error and report handling */ SecmodHandleReport *handle_report; /* * default engineID discovery mechanism */ SecmodDiscoveryMethod *probe_engineid; SecmodPostDiscovery *post_probe_engineid; }; /* * internal list */ struct snmp_secmod_list { int securityModel; struct snmp_secmod_def *secDef; struct snmp_secmod_list *next; }; /* * register a security service */ int register_sec_mod(int, const char *, struct snmp_secmod_def *); /* * find a security service definition */ NETSNMP_IMPORT struct snmp_secmod_def *find_sec_mod(int); /* * register a security service */ int unregister_sec_mod(int); /* register a security service */ void init_secmod(void); NETSNMP_IMPORT void shutdown_secmod(void); /* * clears the sec_mod list */ NETSNMP_IMPORT void clear_sec_mod(void); #ifdef __cplusplus } #endif #endif /* SNMPSECMOD_H */