faq обучение настройка
Текущее время: Пт июл 25, 2025 16:26

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: PHP API для свитчей Dlink
СообщениеДобавлено: Пт май 11, 2012 16:59 
Не в сети

Зарегистрирован: Пн апр 05, 2010 21:35
Сообщений: 73
Приблизительно год назад в провайдере, где я работал, возникла острая необходимость в автоматизации управления свитчами. И была написана обвязка для управления свитчами. Выполнено это было в виде библиотеки на PHP. Основной задачей была автоматизация настройки свитчей разных моделей (по большей части D-link). Вот примерный список того, что оно умеет:
  • Проверка доступности свитча по icmp, snmp ro/rw-коммьюнити, авторизации через telnet
  • Получение текущего состояния порта (state, stp, lbd, cable_diag)
  • Получение и поиск по таблице MAC-адресов
  • Создание и удаление вланов
  • Заливка прошивки
  • Создание и удаление вланов
Собственно концептуально это выглядит как-то так:
Код:
require_once('../src/driverfactory.php');
global $switch_drivers;
$dev = $switch_drivers->get_driver('192.168.0.3', 'D-Link', 'DES-3200-28');
if (!$dev->check_interface_methods(true)) { echo "don't have interface method\n"; return 0; }
if ($dev->create_vlan(4000)) echo "Vlan 4000 created\n"; else echo "Vlan 4000 not created\n";
if ($dev->add_vlan_to_port(4000, '1-2,25-26')) echo "Vlan 4000 added tagged to 1-2,25-26\n"; else echo "Vlan 4000 not added tagged to 1-2,25-26\n";
if ($dev->add_vlan_to_port(4000, 3, 1)) echo "Vlan 4000 added untagged to 3\n"; else echo "Vlan 4000 not added untagged to 3\n";
if ($dev->feature('save') && $dev->feature('reboot') && $dev->feature('fwmgmt') && !$dev->check_fw()) {
   echo "Old FW ver\n";
   if ($dev->save()) echo "Saving success\n"; else { echo "Saving failed\n"; die(); }
   if ($dev->update()) echo "Update success\n"; else {echo "Update failed\n"; die(); }
   if ($dev->reboot()) echo "Reboot success\n"; else { echo "Reboot faild\n"; die(); }
}

В приведенном коде присходит следующее:
Создается драйвер устройства, потом проверяется доступность свитча и методы, по которым с ним можно взаимодействовать (snmp ro/rw, telnet). Далее создается влан 4000, после чего он добавляется тегированным на порты 1-2,25-26 и нетегированным на порт 3. Далее, если прошивка старая и есть возможность обновить свитч, то происходит обновление и ребут свитча, с предварительным сохранением конфига.
Перед применением, в константах (consts.php) стоит определить такие параметры как ro и rw коммьюнити, менеджмент-вланы, логины-пароли, tftp-сервера с прошивками и т. д.
Вот прошивки, на которые ориентировалось эта библиотека:
Код:
$consts['FIRMWARE']['DES-3000']                  =   'Build 4.30.B20';
$consts['FIRMWARE']['DES-3028']                  =   'Build 2.52.B02';
$consts['FIRMWARE']['DES-3200']                  =   'Build 1.21.B007';
$consts['FIRMWARE']['DES-3500']                  =   'Build 6.00.B35';
$consts['FIRMWARE']['DES-3800']                  =   'Build 4.61.B21';
$consts['FIRMWARE']['DGS-3000']                  =   'Build 4.01-B07';
$consts['FIRMWARE']['DGS-3100']                  =   'Build 3.60.38';
$consts['FIRMWARE']['DGS-3400']                  =   'Build 2.70.B56';
$consts['FIRMWARE']['DGS-3600']                  =   'Build 2.55.B05';

Вот приблизительный список моделей, на которые оно ориентировалось:
Код:
$consts['HARDWARE']['SERIES']['DES-3010G']            =   'DES-3000';
$consts['HARDWARE']['SERIES']['DES-3010F']            =   'DES-3000';
$consts['HARDWARE']['SERIES']['DES-3010FL']            =   'DES-3000';
$consts['HARDWARE']['SERIES']['DES-3016']            =   'DES-3000';
$consts['HARDWARE']['SERIES']['DES-3018']            =   'DES-3000';
$consts['HARDWARE']['SERIES']['DES-3026']            =   'DES-3000';
$consts['HARDWARE']['SERIES']['DES-3028']            =   'DES-3028';
$consts['HARDWARE']['SERIES']['DES-3028P']            =   'DES-3028';
$consts['HARDWARE']['SERIES']['DES-3028G']            =   'DES-3028';
$consts['HARDWARE']['SERIES']['DES-3052']            =   'DES-3028';
$consts['HARDWARE']['SERIES']['DES-3052P']            =   'DES-3028';
$consts['HARDWARE']['SERIES']['DES-3200-28']            =   'DES-3200';
$consts['HARDWARE']['SERIES']['DES-3200-26']            =   'DES-3200';
$consts['HARDWARE']['SERIES']['DES-3200-18']            =   'DES-3200';
$consts['HARDWARE']['SERIES']['DES-3200-10']            =   'DES-3200';
$consts['HARDWARE']['SERIES']['DES-3526']            =   'DES-3500';
$consts['HARDWARE']['SERIES']['DES-3550']            =   'DES-3500';
$consts['HARDWARE']['SERIES']['DES-3828']            =   'DES-3800';
$consts['HARDWARE']['SERIES']['DES-3828P']            =   'DES-3800';
$consts['HARDWARE']['SERIES']['DES-3828DC']            =   'DES-3800';
$consts['HARDWARE']['SERIES']['DES-3852']            =   'DES-3800';
$consts['HARDWARE']['SERIES']['DES-3852P']            =   'DES-3800';
$consts['HARDWARE']['SERIES']['DGS-3024']            =   'DGS-3000';
$consts['HARDWARE']['SERIES']['DGS-3048']            =   'DGS-3000';
$consts['HARDWARE']['SERIES']['DGS-3100-24']            =   'DGS-3100';
$consts['HARDWARE']['SERIES']['DXS-3324SRi']            =   'DXS-3300';
$consts['HARDWARE']['SERIES']['DXS-3324SR']            =   'DXS-3300';
$consts['HARDWARE']['SERIES']['DXS-3352SR']            =   'DXS-3300';
$consts['HARDWARE']['SERIES']['DXS-3326GSR']            =   'DXS-3300';
$consts['HARDWARE']['SERIES']['DXS-3350SR']            =   'DXS-3300';
$consts['HARDWARE']['SERIES']['DGS-3426']            =   'DGS-3400';
$consts['HARDWARE']['SERIES']['DGS-3426G']            =   'DGS-3400';
$consts['HARDWARE']['SERIES']['DGS-3426P']            =   'DGS-3400';
$consts['HARDWARE']['SERIES']['DGS-3427']            =   'DGS-3400';
$consts['HARDWARE']['SERIES']['DGS-3450']            =   'DGS-3400';
$consts['HARDWARE']['SERIES']['DGS-3612']            =   'DGS-3600';
$consts['HARDWARE']['SERIES']['DGS-3612G']            =   'DGS-3600';
$consts['HARDWARE']['SERIES']['DGS-3627']            =   'DGS-3600';
$consts['HARDWARE']['SERIES']['DGS-3627G']            =   'DGS-3600';
$consts['HARDWARE']['SERIES']['DGS-3650']            =   'DGS-3600';

Когда я увольнялся из компании, я надеялся поддерживать его в свободное время, но времени не оказалось. Было получено разрешение на публикацию данного кода, может еще кому пригодится. Отдельное спасибо natan за класс работы с телнетом. Код опубликован здесь. Форкайте на здоровье. Никакой внятной документации к сожалению я не писал, есть только парочка примеров в папке examples. Готов тут отвечать на возникающие вопросы. Если захотите мейнтенить проект - буду только рад.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PHP API для свитчей Dlink
СообщениеДобавлено: Сб май 12, 2012 07:53 
Не в сети
Сотрудник D-LINK
Сотрудник D-LINK

Зарегистрирован: Вт янв 18, 2011 13:29
Сообщений: 8999
Спасибо за тему.
Также рекомендую разместить ее здесь


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB