Регистрация OID с помощью агента snmp
Я пытаюсь смоделировать SNMP-агент, используя snmp4j. Я пытаюсь зарегистрировать МО для агента. Ниже приведен фрагмент кода:
static final OID mo1= new OID("1.3.6.1.4.1.1234.1.104");
static final OID mo2= new OID("1.3.6.1.4.1.1234.1.104.1");
static final OID mo3= new OID("1.3.6.1.4.1.1234.1.104.1.1");
agent.registerManagedObject(MOCreator.createReadOnly(mo1,"m1"));
agent.registerManagedObject(MOCreator.createReadOnly(mo2,"m2"));
agent.registerManagedObject(MOCreator.createReadOnly(mo3,"m3"));
public class MOCreator {
public static MOScalar createReadOnly(OID oid,Object value ){
return new MOScalar(oid,
MOAccessImpl.ACCESS_READ_ONLY,
getVariable(value));
}
private static Variable getVariable(Object value) {
System.out.println("Value : "+value.toString());
OctetString octetString = new OctetString((String)value);
if(value instanceof String) {
return octetString;
}
throw new IllegalArgumentException("Unmanaged Type: " + value.getClass());
}
}
При запуске агента я получаю исключение DuplicateRegistrationException. Пожалуйста, объясните мне, как регистрировать oids. Пожалуйста, укажите направление.
2 ответа
Действительно, как говорит Сет, этот выбор OID представляется неверным.
Скажем, у вас есть объект с OID 1.3.6.1.4.1.1234.1.104
,
Или:
- Это скаляр, в этом случае его значение в
1.3.6.1.4.1.1234.1.104.0
, или же - Это таблица, в этом случае она имеет значения
1.3.6.1.4.1.1234.1.104.<N>
(но вы не регистрируете эти отдельные строки).
В качестве альтернативы это может быть группа объектов, а не объект, например папка, но тогда вы не зарегистрируете ни одного из них.
Вы не можете иметь скаляры (или таблицы) под скалярами, поэтому вы не можете зарегистрировать их в агенте.
Я не могу сделать конкретное предложение, не зная, как выглядит ваша MIB и какие данные вы хотите хранить и как вы хотите ее организовать, но, похоже, у вас здесь есть проблема разработки MIB. Обязательно беги smilint
над вашими MIB, чтобы проверить правильность.
От: http://oosnmp.net/pipermail/snmp4j/2014-September/005416.html
SMI запрещает регистрацию OID ниже другого OID (экземпляр в пределах экземпляра). В противном случае лексикографическое упорядочение объектов в агенте не может быть реализовано без неясностей.
Поэтому я считаю, что этот метод регистрации OID невозможен. Вы должны попытаться использовать OID без использования строгих подстрок, как это. Или попробуйте изменить порядок регистраций.