2. Обзор приложений¶
Концепция RUNOS это микросервисы, отвечающие за свою функцию. Поэтому RUNOS неотделим от своих приложений.
И так же поскольку контроллер управляет единой физической сетью, то при написании своих приложений вам необходимо знать, что делают другие приложения в сети, чтобы не возникло противоречий.
В данном разделе описаны основные приложения контроллера, их функции, и настройки, от каких приложений они зависят.
2.1. Loader¶
Формально Loader не является приложением.
Это загрузчик приложений, он создает объекты приложений, читает конфигурационный файл network-settings.json
и запускает необходимые приложения.
Loader проходит по списку services и инициализирует все сервисы и их зависимости.
Настройки
- services [ list of service ] – список приложений, которые необходимо запустить.
- loader : { threads [ number ] } – число потоков.
2.2. CoreApplication¶
2.2.1. Controller¶
Controller – основное приложение, отвечающие за регистрацию остальных приложений и предоставление им доступ к управления сетью.
ИМЯ : controller
Controller предоставляет два способа управления сетью :
Реактивный
Возможность определить функцию обработчик PacketIn’ов.
Каждое приложение имеет возможность зарегистрировать неограниченное число обработчиков. Они будут вызываться по очереди в соответствии с
network-settings.json
. Порядок определен вcontroller { pipeline = [] }
.Предупреждение
Каждый обработчик может прервать очередь выполнения. Поэтому важен порядок имен в
network-settings.json
.Для больших подробностей см. PacketMissHandler.
Проактивный
Приложению выделяется канал для общения с коммутаторами. Приложения могут отправлять запросы на коммутатор и получать ответы. (См. StaticTransaction).
Настройки :
- address [“0-255.0-255.0-255.0-255”] : ip адрес на котором работает контроллер.
- port [number] : TCP порт, который слушает контроллер, и по которому к нему подключаются коммутаторы.
- nthreads [number] : количество нитей на которых выполняется pipeline.
- secure [true|false] : Использовать TLS для соединения с коммутаторами.
2.2.2. SwitchManager¶
Dependes of : Controller, RestListener.
Приложение предоставляет интерфейс к работе с абстракциями коммутаторов.
ИМЯ : switch-manager. REST ИМЯ : switch-manager. Displaed Name : Switch Manager.
switch-manager управляет объектами Switch, которые являются абстракцией коммутатора. Он позволяет получить объект Switch по dpid, или вектор Switch.
SwitchManager поддерживает Rest интерфейс :
Request : GET /api/switch-manager/switches/all
Reply : Информация о коммутаторах в сети.
SwitchManager поддерживает модель событий :
Коммутатор появился в сети, изменил состояние, исчез.
SwitchManager имеет свою web страницу
Web Страница :http://ControllerIp:8000/switch.html
2.2.3. LinkDiscovery¶
Dependes of : Controller, SwitchManager.
Приложение исследует соединения в сети.
Данное приложение необходимо для поддержания информации о топологии. Периодически отправляя LLDP пакеты, оно следит за состоянием соединений между коммутаторами.
LinkDiscovery работает в ControllerPipeline под именем link-discovery
.
Обрабатывает LLDP пакеты и останавливает выполнение конвеера.
Остальные пакеты проходят LinkDiscovery без изменений.
Настройки :
- poll-intervall [number] : Интервал (в секундах) через который отправляются LLDP пакеты.
2.2.4. STP¶
Dependes of : Controller, SwitchManager, LinkDiscovery, Topology
Предотвращает широковещательный шторм в сети, используя логику Spanning Tree протокола.
STP подменяет broadcast правило в конвеере контроллера.
Примечание
Не перегружайте broadcast правило, когда у вас включено приложение STP.
2.2.5. RestListener¶
Dependes of : Controller.
Обеспечивает Rest интерфейс для приложений.
Это приложение необходимо вам, если вы хотите добавить Rest интерфейс к вашему приложению.
ИМЯ : rest-listener.
RestListener позволяет вам зарагестрировать свое приложение c обработкой REST запросов, после которого вы сможете обращаться с запросами к своему приложение по адресу
/api/your-application
.По умолчанию RestListener слушает 8000 порт.
Подробнее см. В работе с REST интерфейсом.
RestListener так же реализует модель событий. Подробнее см модель событий.
RestListener поддерживает некоторые встроенные запросы:
GET /apps # получить список всех приложений, которые поддерживают REST интерфейс
GET /timeout/<app_lsit>/<last_event>
Получить события, которые зарегистрировали приложения с некоторого момента.
- <app_list> =
app_1&app_2&...&app_n
список приложений, чьи события будут показываться.- <last_event> =
unsinged integer
, номер события, после которого нас интересуют новые события.
Настройки :
- port [number] – порт который слушает RestListener.
- web-dir [path-to-dir] – путь к директории, в которой расположены web страницы приложений.
2.3. Сервисы¶
2.3.1. Topology¶
Dependes of : LinkDiscovery, RestListener.
ИМЯ : topology REST ИМЯ : topology
Представление топологии сети.
Поддерживает REST интерфей:
GET /api/topology/links получить представление сети.
Имеет свою Web страницу : topology.html.
2.3.2. SimpleLearingSwitch¶
Dependes of : Controller.
Примечание
По умолчанию выключен.
ИМЯ : simple-learning-switch.
Реализация простого LearningL2Switch, где каждый коммутатор работает независимо от остальных, и содержит свою таблицу mac-port.
SimpleLearningSwitch обеспечивает доставку пакетов до адресатов.
Его основное преимущество, то что он не зависит от остальных приложений.
SimpleLearningSwitch Работает в controller pipeline под именем forwarding.
2.3.3. LearningSwitch¶
Dependes of : Controller, Topology.
ИМЯ : learning-switch.
Реализация усовершенствованного L2Switch, который знает топологию сети и отправляет пакет по кратчайшему пути, он обеспечивает доставку пактов до адресатов.
Примечание
Саму топологию строит приложение Topology, а LearningSwitch
пользуется ею.
LearningSwitch работает в controller pipeline под именем forwarding и должен выполняться последним.
Примечание
SimpleLearningSwitch и LearningSwitch реализуют одну и ту же функциональность и не могут быть запущены одновременно на контроллере, поэтому их pipeline имена одинаковы.
2.3.4. SwitchStats¶
Dependes of : Controller, SwitchManager, RestListener.
Собирает статистику с коммутаторов.
ИМЯ : switch-stats.
Настройки :
- poll-interval [number] - период сбора статистики
2.3.5. ArpHandler¶
Dependes of : Controller, SwitchManager, HostManager.
ИМЯ : arp-handler.
ArpHandler обрабатывает arp-request, и если он знает mac-адрес хоста, отправляет arp-reply, если не знает – передает управление дальше по pipeline.
ArpHandler работает в controller pipeline под именем arp-handler.
2.3.6. StaticFlowPusher¶
Dependes of : Controller, SwitchManager, RestListener.
ИМЯ : static-flow-pusher
Статическая установка правил на коммутаторы.
Возможна установка правил через REST интерфейс и из network-settings.json.
REST интерфейс :
POST /api/static-flow-pusher/newflow/<switch_id> {Json of new_flow}
Json поддерживает :
- “in_port”
- eth_src, eth_dst
- eth_type
- ip_src, ip_dst
- out_port
Настройки
В настройках можно описывать правила следующим образом:
"flows" : [ { "dpid": <switch>, "flows" : [ ... { <set_of_match> <set_of_action> <set_of_config> } ... ] } ]Где :
- <switch> = “all” или dpid коммутатора в формате “0000000000001”.
- <set_of_match> – Набор строк, указывающие поля пакета.
- in_port : [number]
- eth_src : [“ethernet_address”]
- eth_dst : [“ethernet_address”]
- ip_src : [“ip adress”]
- ip_dst : [“ip_adress”]
- <set_of_action> – действия с пакетом :
- out_port : [number | “to-controller”] – отправить на указанный порт
- <set_of_config> : набор конфигураций потока.
- priority : [number] – приоритет потока
- “idle” : [number] – тайм-аут простоя потока
- “hard” : [number] – тайм-аут потока
2.4. REST¶
2.4.1. REST 2.0¶
2.4.1.1. RestMultipart¶
Dependes of : Controller, SwitchManager, RestListener.
Обработка запросов на получение. Сводятся к отправке на switch multipart request’ов.
Подробнее см. в разделе REST 2.0: приложения RestMultipart и RestFlowMod
2.4.1.2. RestFlowMod¶
Dependes of : Controller, SwitchManager, RestListener.
Обработка запросов на добавление, изменение, удаление. Сводятся к отправке на switch FlowMod-сообщений. Приемник rest-интерфейса StaticFlowPusher.
Подробнее см. в разделе REST 2.0: приложения RestMultipart и RestFlowMod
2.4.2. REST 1.0 (deprecated)¶
2.4.2.1. FlowManager¶
Dependes of : Controller, SwitchManager, RestListener.
ИМЯ : flow-manager.
REST ИМЯ : flow.
Исследует и удаляет потоки.
FlowManager опрашивает коммутаторы о правилах, которые установлены на них, и может удалить правила.
FlowManager обеспечивает REST интерфейс :
GET /api/flow/<switch_id>/all : получить информацию о потоках на коммутаторе
DELETE /api/flow/<switch_id>/<switch_id>/<flow_id> : удалить поток.
FlowManager поддерживает Модель событий.
2.4.2.2. HostManager¶
Dependes of : SwitchManager, RestListener.
ИМЯ : host-manager
Исследует хосты.
HostManager следит за пакетами, которые появляются в сети, и запоминает mac- и ip-адреса хостов.
Работает в pipeline под именем host-manager, читает необходимые поля, и передает управление дальше.
2.4.2.3. WebUIManager¶
Dependes of : SwitchManager, HostManager, RestListener.
Обеспечивает Web интерфейс контроллера.