Обработчик управления устройством с синхронизацией интерфейсов и их индексов

Материал из BiTel WiKi

Перейти к: навигация, поиск

Содержание

Описание

Класс - обработчик управления устройством по SNMP (DeviceManager) взамен стандартного.

  • Умеет выдавать uptime, как и стандартный SnmpDeviceManager.
  • Умеет синхронизировать интерфейсы устройства и их snmp-индексы (нужны для учёта flow)
Полезен для схем, использующих интерфейсы, например Vlan per user + Cisco IP subscriber interface + ISG

Как пользоваться

  • Скачиваем библиотеку snmp4j[1] (я использовал snmp4j-2.2.3.jar[2]).
  • Копируем snmp4j-2.2.3.jar (или другую версию) в /usr/local/BGBillingServer/lib/app
  • Рестартуем сервер биллинга
  • Делаем ./update в BGInetAccess и BGInetAccounting и рестартуем их
  • Копируем себе в динамический код классы:
ru.dsi.bgbilling.modules.inet.dyn.device.snmp.IfaceSnmpDeviceManager
ru.dsi.bgbilling.modules.inet.dyn.device.snmp.SnmpDeviceManager
ru.dsi.bgbilling.modules.inet.dyn.device.snmp.SnmpClient
  • Компилируем динамический код
  • Указываем в типе устройства модуля Inet "Обработчик управления устройством: ru.dsi.bgbilling.modules.inet.dyn.device.snmp.IfaceSnmpDeviceManager"
  • Настраиваем конфигурацию устройства/типа устройства/родительского устройства (по усмотрению) - см раздел "Конфигурация"
  • Перечитываем конфигурацию устройств
  • Заходим в устройство с нашим обработчиком, кликаем правой кнопкой, выбираем "выполнить команду", пишем ifsync, смотрим результат:

Файл:ifsync-command.png Файл:ifsync-result.png Файл:ifsync-ifaces.png

Принцип работы

Обработчик поддерживает команды:

  • uptime - аналогично стандартному обработчику, возвращает uptime устройства для определения стандартными средствами модуля Inet его перезагрузки. Можно отключить, тогда будет возвращать null (см конфигурацию). Отклчение может пригодиться, если устройство расформировано, чтобы обработчик не слал алармы.
  • ifsync - синхронизация интерфейсов и их ifIndex на роутере и в биллинге:
    • 1. Получаем по SNMP список соответствий: ifIndex->ifName интерфейсов на устройстве
    • 2. Для каждого полученного интерфейса проверяем, есть ли в биллинге на устройсве интерфейс с таким именем?
      • 2.1. Если нет, и он проходит через фильтр snmp.ifNameRegexpFilter - создаём с правильным ifIndex и категорией ip = snmp.ipCategory
      • 2.2. Если есть, то совпадает ли ifIndex?
        • 2.2.1. Если да, то ничего не делаем, всё ок.
        • 2.2.2. Если нет, то меняем ifIndex
    • 3. Оставшиеся необработанными интерфейсы в BG: если их нет на устройстве, то помечаем как отключенный и устанавливаем ifIndex=0

Настройка

Код

P.S.

  • Использовал snmp4j вместо westhawk snmp, т.к. в последнем нельзя сделать GETNEXT
Личные инструменты