Агент SNMP4J не может добавить строку в запросе SET - SNMP - PullRequest
0 голосов
/ 12 апреля 2020

Я создал агент SNMP v2 с использованием SNMP4J, но у меня возникают проблемы с добавлением строк с помощью запросов SET от моего менеджера.

OID моей таблицы: 1.3.6.1.4.1.9999.2.1.7.1

Моя таблица имеет следующую структуру:

<Column 1> <Column 2> <Column 3> <Column 4 = RowStatus column> ==> All columns are Integers.

Если я добавлю элементы в свою таблицу из кода агента и отсканирую таблицу, моя строка будет правильно восстановлена, как показано ниже:

$> snmpwalk -v2c -cpublic 127.0.0.1:2001 1.3.6.1.4.1.9999
1.3.6.1.4.1.9999.2.1.7.1.1.1 = INTEGER: 44
1.3.6.1.4.1.9999.2.1.7.1.2.1 = INTEGER: 45
1.3.6.1.4.1.9999.2.1.7.1.3.1 = INTEGER: 163
1.3.6.1.4.1.9999.2.1.7.1.4.1 = INTEGER: 4

Также , если я отправляю запрос Destroy SET на столбец RowStatus этой строки, мой агент правильно удаляет эту строку:

snmpset -v 2c -cpublic 127.0.0.1:2001 1.3.6.1.4.1.9999.2.1.7.1.4.1 i 6 (6 = 'Destroy') 
==> Row is entirely destroyed. When I snmpwalk on my table I don't see the row anymore.

Однако мой агент не может добавить новую строку при получении один запрос SET PDU , дающий значения строк для добавления в сам OID. Допустим, я хочу добавить новую строку со значениями 10, 11 и 12 в столбцы 1, 2, 3. Все эти запросы SET ниже возвращают ошибку noCreation (я пробовал много возможностей):

snmpset -v 2c -cpublic 127.0.0.1:2001 1.3.6.1.4.1.9999.2.1.7.1.4.1.1.10.11.12 i 4 (4 = 'CreateAndGo')
snmpset -v 2c -cpublic 127.0.0.1:2001 1.3.6.1.4.1.9999.2.1.7.1.4.1.10.11.12 i 4
snmpset -v 2c -cpublic 127.0.0.1:2001 1.3.6.1.4.1.9999.2.1.7.1.4.10.11.12 i 4
snmpset -v 2c -cpublic 127.0.0.1:2001 1.3.6.1.4.1.9999.2.1.7.1.1.4.10.11.12 i 4

Я пробовал эти команды без существующей строки при запуске моего агента, а также с уже существующей жестко закодированной строкой.

Я не могу найти четкую информацию в стандартах RF C об этих запросах SET содержащий значения строк для создания в самом номере OID. Этот формализм является единственным, который используется моим SNMP-менеджером для добавления строк в его агент (который я пытаюсь разработать). На этой ссылке есть пример использования, в котором добавляемые значения строк включаются в OID запроса SET - это именно то, чего я пытаюсь достичь здесь с моим агентом.

Ниже код агента, который создает мою таблицу:

public DefaultMOTable createTrapsTableManagedObject()
{       
    MOTableSubIndex[] subIndexes = new MOTableSubIndex[] {  new MOTableSubIndex(SMIConstants.SYNTAX_INTEGER)};

    MOTableIndex indexDef = new MOTableIndex(subIndexes, false);

    MOMutableColumn[] columns = new MOMutableColumn[4];
    columns[0] = new MOMutableColumn(1, SMIConstants.SYNTAX_INTEGER, MOAccessImpl.ACCESS_READ_WRITE);
    columns[1] = new MOMutableColumn(2, SMIConstants.SYNTAX_INTEGER, MOAccessImpl.ACCESS_READ_WRITE);
    columns[2] = new MOMutableColumn(3, SMIConstants.SYNTAX_INTEGER, MOAccessImpl.ACCESS_READ_WRITE);
    columns[3] = new RowStatus(4);

    DefaultMOTable ifTable = new DefaultMOTable(new OID("1.3.6.1.4.1.9999.2.1.7.1"), indexDef, columns);

    MOMutableTableModel model = (MOMutableTableModel) ifTable.getModel();

    ifTable.setVolatile(true);

    return ifTable; 
}

Я что-то упустил в своем коде агента или в моих запросах SET?

Реализует ли SNMP4J эти одиночные запросы SET "CreateAnd Go" для добавления строки в один кадр, где значения строк для добавления встроены в OID-номер ? (Под этим я не подразумеваю отправку нескольких запросов SET в одном PDU - это не реализовано в диспетчере, с которым я пытаюсь взаимодействовать).

Спасибо за вашу помощь.

...