Я портирую скрипт на snmp4j. Мне не повезло, вставив строку в таблицу с помощью snmp send или TableUtils.createRow. Команда snmp из скрипта выглядит как
snmpset -t 60 192.168.60.112 cwNetStgSvrRAIDDevs.1 x '01 02 03 04 05 06' cwNetStgSvrRAIDChunkSize.1 i 4096 cwNetStgSvrRAIDDataOffset.1 i 2097152 cwNetStgSvrRAIDRowStatus.1 i createAndGo
Я пытался использовать следующий код для установки значений через PDU с множественными привязками переменных. Я получаю код ошибки 17, недоступный для записи. Мне не ясно, относится ли это к таблице (строке) или столбцу в строке.
public void setupRaidTable2() {
try {
PDU pdu = new ScopedPDU();
pdu.add(new VariableBinding(new OID(RAID_DEVS + ".1"),
OctetString.fromString("01 02 03 04 05 06", ' ', 16)));
pdu.add(new VariableBinding(new OID(RAID_CHUNK_SIZE + ".1"), new Integer32(4096)));
pdu.add(new VariableBinding(new OID(RAID_DATA_OFFSET + ".1"), new Integer32(2097152)));
pdu.add(new VariableBinding(new OID(RAID_ROW_STATUS + ".1"), new Integer32(4)));
pdu.setType(PDU.SET);
ResponseEvent event = snmp.send(pdu, userTarget);
if (event != null) {
pdu = event.getResponse();
if (pdu.getErrorStatus() == PDU.noError && pdu.getType() != PDU.REPORT) {
LOG.debug("SNMPv3 SET Successful for RaidPartTable ");
} else {
LOG.debug("SNMPv3 SET Unsuccessfulfor RaidTable: Error Code " + pdu.getErrorStatus() + " "
+ pdu.getErrorStatusText());
}
} else {
LOG.debug("SNMP send unsuccessful RAID Table");
}
} catch (Exception e) {
throw new RuntimeException("Error setting up raid table ", e);
}
}
Я также пытался использовать TableUtils.createRow и получить сообщение об ошибке 11 не может создать объект. Я пробовал это как с переменной привязкой для статуса строки, так и без нее.
public void setupRaidTable() {
try {
DefaultPDUFactory pduFactory = new DefaultPDUFactory(PDU.SET);
pduFactory.setContextEngineID(engineIdStr);
TableUtils tUtils = new TableUtils(snmp, pduFactory);
VariableBinding[] vbs = {
new VariableBinding(new OID(RAID_DEVS + ".1"),
OctetString.fromString("01 02 03 04 05 06", ' ', 16)),
new VariableBinding(new OID(RAID_CHUNK_SIZE + ".1"), new Integer32(4096)),
new VariableBinding(new OID(RAID_DATA_OFFSET + ".1"), new Integer32(2097152)),
new VariableBinding(new OID(RAID_ROW_STATUS + ".1"), new Integer32(4))
};
ResponseEvent event = tUtils.createRow(userTarget, new OID(RAID_ROW_STATUS + ".1"),
new OID(".1.3.6.1.4.1.27675.20.5.5.1.1.1"), vbs);
if (event != null) {
PDU pdu = event.getResponse();
if (pdu.getErrorStatus() == PDU.noError && pdu.getType() != PDU.REPORT) {
LOG.debug("SNMPv3 SET Successful for RaidPartTable ");
} else {
LOG.debug("SNMPv3 SET Unsuccessfulfor RaidPartTable: Error Code " + pdu.getErrorStatus() + " "
+ pdu.getErrorStatusText());
}
} else {
LOG.debug("SNMP send unsuccessful RAID Part Table");
}
} catch (Exception e) {
throw new RuntimeException("Error setting up raid table ", e);
}
Я тщательно проверил все константы, используемые для OIDS, используя MibBrowser. Я в недоумении, что делать дальше. Первый вопрос заключается в том, какой из этих методов является правильным способом вставки таблицы, второй - в том, что я делаю неправильно в моей реализации.