Olej писал(а):
Ура!
А дальше: отладка, отладка, отладка ... до опупения (тех, кто займётся
SNMP, я вас уверяю, что на запуск простейшего описываемого проекта вы убьёте
не один час вот начиная с этого места).
Это потому, что работоспособность всего этого кина
в комплексе зависит от:
- кода обработчика .c, естественно
- режима запуска (субагент AgentX / автономный агент
SNMP)
- местоположения конф-файлов
- местоположения MIB-файлов (для утилит-менеджеров)
- прав доступа/видимости отдельных поддеревьев OID, прописанная в конф-файлах
- прав (имени root) с которыми вы выполняете своего агента
И только когда
все компоненты будут созданы-прописаны-размещены-... правильно -
только тогда это заработает!
В конечном итоге код обработчика пришлось переписать так:
Код: Выделить всё
case MODE_GET: {
FILE* updf = popen( "cat /proc/uptime", "r" );
if( NULL == updf ) {
snmp_log( LOG_ERR, "popen error: 'cat /proc/uptime'\n" );
return SNMP_ERR_GENERR;
}
if( NULL == fgets( sUptime, sizeof( sUptime ), updf ) ) {
snmp_log( LOG_ERR, "/proc/uptime read error\n" );
return SNMP_ERR_GENERR;
};
*strrchr( sUptime, '\n') = '\0';
pclose( updf );
snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
sUptime
/* XXX: a pointer to the scalar's data */,
strlen( sUptime )
/* XXX: the length of the data in bytes */
);
}
break;
И это всё работает примерно так (после 5-й пересборки, когда я делаю подобное далеко не 1-й раз
)...
Автономная работа
SNMP агента (остановка по ^C после сеанса работы):
Код: Выделить всё
[olej@dell snmp.7]$ sudo ./upt_agn -v
[sudo] пароль для olej:
upt_agn is up and running.
^C
--------- got signal: 2 -------------
upt_agn was finished.
Обращения от менеджеров:
Код: Выделить всё
[olej@dell conf]$ snmpget -v 2c -c public 127.0.0.1 .1.3.6.1.4.1.8765.13.5.0
SNMPv2-SMI::enterprises.8765.13.5.0 = STRING: "326970.64 1194945.82"
[olej@dell conf]$ snmpget -v 1 -c public 127.0.0.1 .1.3.6.1.4.1.8765.13.5.0
SNMPv2-SMI::enterprises.8765.13.5.0 = STRING: "327016.21 1195297.52"
Код: Выделить всё
[olej@dell conf]$ snmpget -v2c -c public 127.0.0.1 -m +ALEX-MANAGEMENT-MIB procUptime
ALEX-MANAGEMENT-MIB::procUptime = No Such Instance currently exists at this OID
[olej@dell conf]$ snmpget -v2c -c public 127.0.0.1 -m +ALEX-MANAGEMENT-MIB procUptime.0
ALEX-MANAGEMENT-MIB::procUptime.0 = STRING: 327272.52 1197276.26
[olej@dell conf]$ snmpget -v2c -c public 127.0.0.1 -m +ALEX-MANAGEMENT-MIB procUptime.0
ALEX-MANAGEMENT-MIB::procUptime.0 = STRING: 327347.03 1197851.61
[olej@dell conf]$ snmpget -v2c -c public 127.0.0.1 -m +ALEX-MANAGEMENT-MIB procUptime.0
ALEX-MANAGEMENT-MIB::procUptime.0 = STRING: 327352.14 1197890.37
[olej@dell conf]$ snmpget -v2c -c public 127.0.0.1 -m +ALEX-MANAGEMENT-MIB procUptime.0
ALEX-MANAGEMENT-MIB::procUptime.0 = STRING: 327356.30 1197923.51
[olej@dell conf]$ snmpget -v2c -c public 127.0.0.1 -m +ALEX-MANAGEMENT-MIB procUptime.0
ALEX-MANAGEMENT-MIB::procUptime.0 = STRING: 327360.40 1197955.17
Видите как меняются времена Uptime, получаемые по
SNMP?