Регистрация 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 без использования строгих подстрок, как это. Или попробуйте изменить порядок регистраций.

Другие вопросы по тегам