00001 #ifndef SNMPSECMOD_H
00002 #define SNMPSECMOD_H
00003
00004 #ifdef __cplusplus
00005 extern "C" {
00006 #endif
00007
00008 #include <net-snmp/library/snmp_transport.h>
00009
00010
00011
00012
00013 #define NETSNMP_KSM_SECURITY_MODEL 2066432
00014 #define NETSNMP_LOCALSM_SECURITY_MODEL 2066433
00015
00016 struct snmp_secmod_def;
00017
00018
00019
00020
00021 struct snmp_secmod_outgoing_params {
00022 int msgProcModel;
00023 u_char *globalData;
00024 size_t globalDataLen;
00025 int maxMsgSize;
00026 int secModel;
00027 u_char *secEngineID;
00028 size_t secEngineIDLen;
00029 char *secName;
00030 size_t secNameLen;
00031 int secLevel;
00032 u_char *scopedPdu;
00033 size_t scopedPduLen;
00034 void *secStateRef;
00035 u_char *secParams;
00036 size_t *secParamsLen;
00037 u_char **wholeMsg;
00038 size_t *wholeMsgLen;
00039 size_t *wholeMsgOffset;
00040 netsnmp_pdu *pdu;
00041 netsnmp_session *session;
00042 };
00043
00044 struct snmp_secmod_incoming_params {
00045 int msgProcModel;
00046 size_t maxMsgSize;
00047
00048 u_char *secParams;
00049 int secModel;
00050 int secLevel;
00051
00052 u_char *wholeMsg;
00053 size_t wholeMsgLen;
00054
00055 u_char *secEngineID;
00056 size_t *secEngineIDLen;
00057
00058
00059
00060
00061 char *secName;
00062 size_t *secNameLen;
00063
00064 u_char **scopedPdu;
00065 size_t *scopedPduLen;
00066
00067 size_t *maxSizeResponse;
00068 void **secStateRef;
00069 netsnmp_session *sess;
00070 netsnmp_pdu *pdu;
00071 u_char msg_flags;
00072 };
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 typedef int (SecmodSessionCallback) (netsnmp_session *);
00083 typedef int (SecmodPduCallback) (netsnmp_pdu *);
00084 typedef int (Secmod2PduCallback) (netsnmp_pdu *, netsnmp_pdu *);
00085 typedef int (SecmodOutMsg) (struct snmp_secmod_outgoing_params *);
00086 typedef int (SecmodInMsg) (struct snmp_secmod_incoming_params *);
00087 typedef void (SecmodFreeState) (void *);
00088 typedef void (SecmodHandleReport) (void *sessp,
00089 netsnmp_transport *transport,
00090 netsnmp_session *,
00091 int result,
00092 netsnmp_pdu *origpdu);
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102 struct snmp_secmod_def {
00103
00104
00105
00106 SecmodSessionCallback *session_open;
00107 SecmodSessionCallback *session_close;
00108
00109
00110
00111
00112 SecmodPduCallback *pdu_free;
00113 Secmod2PduCallback *pdu_clone;
00114 SecmodPduCallback *pdu_timeout;
00115 SecmodFreeState *pdu_free_state_ref;
00116
00117
00118
00119
00120 SecmodOutMsg *encode_reverse;
00121 SecmodOutMsg *encode_forward;
00122 SecmodInMsg *decode;
00123
00124
00125
00126
00127 SecmodHandleReport *handle_report;
00128 };
00129
00130
00131
00132
00133
00134 struct snmp_secmod_list {
00135 int securityModel;
00136 struct snmp_secmod_def *secDef;
00137 struct snmp_secmod_list *next;
00138 };
00139
00140
00141
00142
00143
00144 int register_sec_mod(int, const char *,
00145 struct snmp_secmod_def *);
00146
00147
00148
00149 struct snmp_secmod_def *find_sec_mod(int);
00150
00151
00152
00153 int unregister_sec_mod(int);
00154 void init_secmod(void);
00155
00156
00157
00158
00159 void clear_sec_mod(void);
00160
00161 #ifdef __cplusplus
00162 }
00163 #endif
00164 #endif