Обработчик управления устройством с синхронизацией интерфейсов и их индексов
Материал из BiTel WiKi
Версия от 06:56, 23 декабря 2013; Cromeshnic (Обсуждение | вклад)
Содержание |
Описание
Класс - обработчик управления устройством по SNMP (DeviceManager) взамен стандартного.
- Умеет выдавать uptime, как и стандартный SnmpDeviceManager.
- Умеет синхронизировать интерфейсы устройства и их snmp-индексы (нужны для учёта flow)
Как пользоваться
- Скачиваем библиотеку 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, смотрим результат:
Файл:1.jpg Файл:2.jpg Файл:3.jpg
Принцип работы
Обработчик поддерживает команды:
- 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