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