Как вставить строку в таблицу, используя snmp4j - PullRequest
0 голосов
/ 16 апреля 2019

Я портирую скрипт на 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. Я в недоумении, что делать дальше. Первый вопрос заключается в том, какой из этих методов является правильным способом вставки таблицы, второй - в том, что я делаю неправильно в моей реализации.

...