我使用 net-snmp。我尝试添加自己的 mib(不需要在处理程序中,只需一个我可以通过 snmp 调用获取和设置的 MIB),因此我遵循标量示例。为了添加我自己的 mib,我在 mib 文件中定义了它们并创建了一个代理扩展。(见下文)。
它工作正常,所以我现在有一个整数 MIB。现在我想添加字符串 mib,所以我定义了 MIB,但我没有找到字符串的注册 API,就像我为 int 找到的一样 - netsnmp_register_int_instance。我查看了包含文件,但没有找到匹配的。
代理人:
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include "monitor.h"
static int int_init = 0; /* default value */
void init_monitor(void)
{
oid open_connections_count_oid[] =
{ 1, 3, 6, 1, 4, 1, 8075, 1, 0 };
netsnmp_register_int_instance("open_connections_count",
open_connections_count_oid,
OID_LENGTH(open_connections_count_oid),
&int_init, NULL);
}
答案1
我不知道这是否是正确的方法,但它有效。
static char errors_value[MY_MAX_LEN];
void init_monitor_snmp_agent(void) {
const oid errors_oid[] = { 1, 3, 6, 1, 4, 1, 8075, 10 };//In this we dont add the 0 at the end
strcpy(errors_value, "");
netsnmp_register_watched_scalar(
netsnmp_create_handler_registration("open_connections_list", NULL,
errors_oid, OID_LENGTH(errors_oid),
HANDLER_CAN_RWRITE),
netsnmp_create_watcher_info(&errors_value, MY_MAX_LEN,
ASN_OCTET_STR, WATCHER_MAX_SIZE));
}