net-snmp 5.5学习笔记

snmptarp动作学习
与snmpget动作相差无几,只不过调用函数时参数不同。参考:net-snmp-5.5/apps/snmptrap.c
只需要将open_session换为snmp_add和netsnmp_transport_open_client即可
netsnmp_session *snmp_add(netsnmp_session *,
                          struct netsnmp_transport_s *,
                          int (*fpre_parse) (netsnmp_session *,
                                             struct netsnmp_transport_s
                                             *, void *, int),
                          int (*fpost_parse) (netsnmp_session *,
                                              netsnmp_pdu *, int));
                将一些设置添加到session中
netsnmp_transport*
netsnmp_transport_open_client(const char* application, const char* str);
                打开trap的客户端
                产生netsnmp_transport结构体用于trap
void snmp_shutdown(const char *type);
                关闭应用程序,保存任何需要持久性存储,并进行适当的清理。
                参数:config文件中的"type"使用的类型标签

snmptarpd动作学习        参考:net-snmp-5.5/apps/snmptrapd.c
int init_agent (const char * app);
                初始化agent。调用init_agent_read_config设置适当的默认存储空间,
                NETSNMP_DS_LIB_APPTYPE应用程序的配置文件。调用init_agent之前需要调用init_snmp。
                参数:
                     应用程序的配置文件被读取,获取存储在默认的存储
                返回:
                     返回非零值失败,0为成功。

struct config_line*
register_config_handler(const char *filePrefix,
                        const char *token,
                        void (*parser) (const char *, char *),
                        void (*releaser) (void),
                        const char *usageLine);
                从配置文件中读取参数。
                参数:
                     filePrefix      应用程序名
                     token           文件中的token
                     parser          函数指针,解析token的函数
                     releaser        处理解析后的清理工作
                     usageLine       token的可选值
                返回:
                     返回config_line,用于表示token

char *snmp_log_syslogname (const char *pstr);
                调用openlog传入应用程序名

void init_usm_conf(const char *app);
                不知道干啥的,没有资料。

netsnmp_transport*
netsnmp_transport_open_server(const char* application, const char* str);
                打开trap的server端

void netsnmp_transport_free(netsnmp_transport *t);
                释放一个netsnmp_transport.

void netsnmp_external_event_info(int *numfds,
                                 fd_set *readfds,
                                 fd_set *writefds,
                                 fd_set *exceptfds);
                取得select搜需要等待的参数。

snmptarp和snmptarpd的基本流程为:
1.初始化session(snmp_sess_init)
2.打开session(snmp_open)
3.打开trap客户端或者服务端(netsnmp_transport_open_client or netsnmp_transport_open_server)
4.客户端发送trap pdu。服务端等待接收trap
5.关闭应用程序(snmp_shutdown)
09-20 19:29