# Channel Management ## Канал Под каналом понимается канал типа точка-точка, способный прозрачно пропускать ethernet-фреймы IEEE 802.3 от порта клиента до другого порта клиента или до сервисной границы. Таким образом, на данном этапе мы рассматриваем только L2-каналы. Задача управления L2 каналами является подмножеством более широких задач организации VPN и предоставления различных телематических сервисов, которые будут рассмотрены отдельно. Каждый канал имеет собственные характеристики: * Гарантированный ethernet MTU * Способность пропускать тегированные пакеты 802.1Q * Соглашения по QoS по раскраске пакетов 802.1p Каналы, обычно, являются составными. В отдельных случаях для организации канала можно обойтись одним кабелем, но в остальных задействуется как кабельная сеть, так и каналообразующее оборудование. > Открытые вопросы: > * Стоит ли жестко замыкаться на ethernet? ## Planes Канал можно представить как путь, проходящий через различные области, имеющие свои уникальные свойства. Данные области могут являться полными антагонистами друг к другу и не могут пересекаться. Кроме того, их положение относительно друг друга не определено. Так как слово domain в телекоме уже и так перегружено различными смыслами, позаимствуем из эзотерики концепциию plane, или плоскости, сферы, мира, и так далее. В древности люди выделяли 4 стихии: воздух, вода, огонь, земля. Считалось, что каждая стихия населена своими уникальными видами существ и существовали специально обученные маги, разбирающиеся в отдельных сферах. Анализ предметной области показывает, что для образования каналов задействуются следующие plane: * Optic * Electric * Radio * OTN * VLAN * VXLAN/EVPN * MPLS Основная задача plane -- предоставить путь (trail). Пути, проходящие через разные plane объединяются вместе и образуют канал. Фактически, каналы сами по себе образуют собсвенный Channel Plane, который является единой точкой входа для клиентского сигнала. Внутри каждого plane trail может быть составным и состоять из sub-trail'ов, каждый из которых не выходит за пределы собственного plane. При взгляде со стороны детали реализации каждого trail не имеют особого значения, важен сам факт его существования. ![](https://i.imgur.com/QarMdTh.png) Необходимо отметить, что sub-trail внутри plane не обязан быть атомарным, а может быть разбит на более элементарные пути, подвергаться различным инкапсуляциям, мультиплексироваться и так далее. При организации внутренних путей отдельные plane могут использовать пути через другие plane. ![](https://i.imgur.com/SV1Cvt2.png) Optic, Electric и Radio planes являются элементарными, так как они не могут взаимодействовать с другими plane для организации своих внутренних trail. Существуют следующие топологи trail: * p2p - точка-точка * p2mp - дерево * mp2mp - облако Дерево отличается от облака тем, что листья не могут взаимодействовать между собой напрямую. Также trail может быть однонаправленным и двунаправленным. ## Planes ### Channel Plane Уровень каналов. Является самым высоким уровнем, к которому напрямую подключаются клиенты. trail уровня channel plane эквивалентен каналу. Отличается от других plane тем, что не способен самостоятельно передавать данных (нет собственных subtrail), но целиком и полностью использует другие plane для организаци trail. ### Optic Plane Оптическая сеть. Осуществляет передачу оптического сигнала по заранее проложенным волокнам оптического кабеля. Состоит из оптических кабелей, муфт, кроссов, патч-кордов, аттенюаторов и прочего пассивного оборудования. В силу исторических причин оптическая сеть разделяется на single- и multi-mode сегменты, различающиеся по частотным характеристикам и не связанные между собой. Отдельные сегменты оптческого кабеля могут иметь собственные дополнительные ограничения. Как правило, вся оптика пассивна, изменения топологии осуществляются путем ручной коммутации или разварки волокон. Редкое исключение - управляемые кроссы. Таким образом, в большинстве случаев, организация trail через optic plane не может быть осуществлена автоматически и требует оформления наряда на выполнение работ. Кроме того, планирование модернизации оптической также является ручной операцией. @todo: Колодцы? Optic Plane является элементарным и не может задействовать другие plane для организации trail. ### Electric Plane Электрическая сеть. Осуществляет передачу энергии и сигнала по заранее проложенным металлическим кабелям. Условно подразделяется на силовую и слаботочную. Состоит из металлических кабелей, кроссов, патч-кордов, защитных автоматов и прочего пассивного оборудованя. Отдельные сегменты сети могут иметь собственные дополнительные ограничения. Для изменения топологии требуется ручная перекоммутация. Таким образом, организация trail через electric plane не может быть осуществлена автоматически и требует оформления наряда на выполнение работ. Кроме того, планирование модернизации оптической также является ручной операцией. Electric Plane является элементарным и не может задействовать другие plane для организации trail. ### Radio Plane Радио-эфир. Осуществляет передачу сигнала между антеннами. @todo: Описать дополнительные характеристики. Radio Plane является элементарным и не может задействовать другие plane для организации trail. ### OTN Optical Transport Network. Состоит из актиивного оборудования, которое осуществляет прозрачную транспортировку клиентского сигнала через оптическую сеть. Фактически, является одной из возможных точек входа и выхода в Optic Plane. Позволяет расширить функционал Optic Plane следующими функциями: * Оптическое уплотнение - позволяет параллельно передавать несколько оптических сигналов на разных длинах волны по одному волокну * Прозрачная регенерация, усиление и коррекция дисперсии сигнала - позволяет увеличвать длину линка за пределы возможности лазеров класса 1 (~80км) * Дополнительный контроль ошибок * Мультиплексирование - несколько клиентских сигналов могут быть собраны в одну транспортную группу. * Транспортная защита - автоматическое переключение на резервный маршрут в случае обрыва основного (<50ms). В отличии от MPLS FRR доступно для любого оконечного оборудования и не требует поддержки MPLS. * Оптическая защита - автоматическое переключение на резервный маршрут на уровне оптического сигнала. Обеспечивает рекордное время переключения (единицы ms) и доступно для любых видов сигнала. Является иерархической средой, определяемой рекоммендациями ITU-T G.709. Транспортный уровень - OTU (Optical Transport Unit) определяет модуляцию на уровне оптического сигнала. | Signal | Marketing data Rate (Gbit/s) | True Signal rate (OTU) (Gbit/s) | Applications | | --- | --- | --- | --- | | OTU1 | 2.5 | 2.66 | Transports SONET OC-48 or synchronous digital hierarchy (SDH) STM-16 signal | | OTU2 | 10 | 10.7| Transports an OC-192, STM-64 or wide area network (WAN) physical layer (PHY) for 10 Gigabit Ethernet (10GBASE-W) | | OTU2e | 10.5 | 11.1 | Transports a 10 Gigabit Ethernet local area network (LAN) PHY coming from IP/Ethernet switches and routers at full line rate (10.3 Gbit/s). This is specified in G.Sup43. | | OTU25 | 25 | 26.4 | Transports a 25 Gigabit Ethernet signal | | OTU3 | 40 | 43 | Transports an OC-768 or STM-256 signal or a 40 Gigabit Ethernet signal. | | OTU3e1/2 | 41 | 44.5 | develop for transport of 10G LAN PHY, and one for 10G WAN PHY, over SDH and OTN. | | OTU50 | 50 | 52.8 | Transports a 50 Gigabit Ethernet signal| | OTU4 | 100| 111.8| Transports a 100 Gigabit Ethernet signal| | OTUCn | n x 100 | n x 105.2 | n instances of a logically interleaved 100G (C=100) frame format Total bandwidth / ODU size. e.g. 200G Channel support 4xODU3 and 4xODU2 | OTU обеспечивает транспортировку одного или нескольких контейнеров ODU, несущих клиентский сигнал. | Signal | Data Rate (Gbit/s) | Typical Applications | | --- | --- | --- | | ODU0 | 1.24416 | Transport of a timing transparent transcoded (compressed) 1000BASE-X signal or a stream of packets (such as Ethernet, MPLS or IP) using Generic Framing Procedure | | ODU1 | 2.49877512605042 | Transport of two ODU0 signals or a STS-48/STM-16 signal or a stream of packets (such as Ethernet, MPLS or IP) using Generic Framing Procedure. | | ODU2 | 10.0372739240506 | Transport of up to eight ODU0 signals or up to four ODU1 signals or a STS-192/STM-64 signal or a WAN PHY (10GBASE-W) or a stream of packets (such as Ethernet, MPLS or IP) using Generic Framing Procedure | | ODU2e | 10.3995253164557 | Transport of a 10 Gigabit Ethernet signal or a timing transparent transcoded (compressed) Fibre Channel 10GFC signal | | ODU3 | 40.3192189830509 | Transport of up to 32 ODU0 signals or up to 16 ODU1 signals or up to four ODU2 signals or a STS-768/STM-256 signal or a timing transparent transcoded 40 Gigabit Ethernet signal or a stream of packets (such as Ethernet, MPLS or IP) using Generic Framing Procedure | | ODU3e2 | 41.7859685595012 | Transport of up to four ODU2e signals | | ODU4 | 104.794445814978 | Transport of up to 80 ODU0 signals or up to 40 ODU1 signals or up to ten ODU2 signals or up to two ODU3 signals or a 100 Gigabit Ethernet signal | | ODUflex (CBR) | 239⁄238 x client bit rate | Transport of a constant bitrate signal such as Fibre Channel 8GFC, InfiniBand or Common Public Radio Interface | | ODUflex (GFP) | any configured rate | Transport of a stream of packets (such as Ethernet, MPLS or IP) using Generic Framing Procedure | OTN принимает клиентские сигналы через Optic или Electric Plane, преобразовывает его в оптические сигналы и использует Optic Plane для передачи. В отличии от чистого Optic Plane, OTN позволяет конфигурировать топологию на уровне оборудования, таким образом, trail через OTN в большинстве случаев может быть построен автоматически на уровне контроллера OTN. ### VLAN @todo ### VXLAN/EVPN @todo ### MPLS @todo ### Partner Виртуальный plane для субаренды каналов у партнера ## Plane Controller Программные сущности, являющиеся оркестраторами для конфигурирования собственных plane. Контроллеры для определенных plane могут взаимодействовать с контроллерами других plane для организации собственных каналов. В случае необходимости выделения ресурсов для организации trail Controller может использовать пулы ресурсов. Контроллер должен поддерживать следующие вызовы: ### Проверка технической возможности ПТВ, Technical Feasiility Check - проверяет, возможна ли организация trail. Ответ: * order_id - идентификатор заказа/проекта. Используется для дальнейшей организации trail. Не заполняется при отсутсвии техвозможности * result - принимает следующе значения: * Возможно автоматически - канал может быть целиком и полностью организован автоматически и на всех этапах. * Кроссировка - канал может быть организован, но требуется ручная кроссировка в пределах достижимости порта или кросса (коммутация на кроссе или прокладка кабеля внутри здания) * Прокладка кабеля - канал может быть организован, но требуется прокладка кабеля по городу. Также может включать кроссировку. * Установка оборудования - требуется дополнительное оборудование, возможно, в комбинациии с прокладкой кабеля и кроссировкой. * В проработке - необходимо повторно запросить ПТВ через указанное время * Нет ресурсов - не хватает определенных ресурсов (например, ODU или VLAN). Возможно, ресурсы освободятся позже по мере снятия бронирования или отключения. * Нет технической возможности - требуется серьезная модификация сети, которая может быть выполнена только в рамках отдельного бюджета или инвестпроекта. * check_after - для статуса "В проработке" - через какое минимальное время осуществить повторный ПТВ. Заполняется для всех ответов, кроме "Возможно автоматически" и "Нет технической возможности" * price - стоимость дополнительных работ. Заполняется для всех ответов, кроме "нет технической возможности" * details - список деталей для всех вложенных ответов * order_id - номер задания ПТВ/формирования * controller - назване контроллера plane (channel, otn, ...) * parent - для вложенных нарядов - order_id родителя * status - статус наряда * description - дополнительное описание * price - цена * check_after - повторная проверка Вызов ПТВ содержит: * Дескриптор точки входа * Десткриптор точки выхода * Ограничения * Время бронирования ресурсов При задании времени бронирования ресурсов, существующие ресурсы, необходимые для организации trail, блокируются на заданное время и не рассматриваются при последующих запросах ПТВ. Plane Controller может осуществлять дополнительные вызовы к другим plane controller. В таком случае: * check_after - устанавливается в максимальное время среди собственных значений и результатов вложенных ответов. * price - является суммой своей стоимости и всех стоимостей вложенных ответов. * result - Самый жесткий между своими и всеми полученными ответами. ### Повторная проверка технической возможности Осуществляется не ранее, чем через retry_after после предыдущего вызова ПТВ. Формат запроса: * order_id - из ответа ПТВ Формат ответа - идентичен ПТВ. В ходе проверки техвозможности сроки могут быть увеличены, и статус может меняться. В таком случае, потребуется дополнительные запросы на повторную проверку технической возможности. ### Формирование trail После согласования с клиентом запускается фактиический запрос на формирование trail. Формат запроса: * order_id Ответ: * status: * Разобран * В процессе * Готов * Сбой * check_after - время повторной проверки ### Проверка trail Проверка завершения процесса. Формат запроса: * order_id Ответ: * status - аналогично старту * check_after - аналогично старту * details - список деталей для всех вложенных ответов * order_id - номер задания ПТВ/формирования * controller - назване контроллера plane (channel, otn, ...) * parent - для вложенных нарядов - order_id родителя * status - статус наряда * description - дополнительное описание * price - цена * check_after - повторная проверка ### Расформирование trail Разборка существующего trail и освобождение ресурсов: Формат запроса: * order_id Запрос асинхронный и немедленно запускает процесс освобождения ресурсов, который может занять длительное время. Во время разборки trail можно выполнять запрос на проверку trail. ## Модель данных ### Plane * id * name - уникальное имя * description - описание * enable_p2p - разрешены p2p-трейлы * enable_p2mp - разрешены p2mp-трейлы * enable_mp2mp - разрешены mp2mp-трейлы * protocols - список протоколов, которые пропускает plane. ### Trail Путь в пределах plane: * id - идентификатор (он же order_id) * name - уникальное имя (возможно - автогенерация) * plane - ссылка на Plane * parent - id родителя, для вложенных заданий * n - возрастающий номер в пределах parent * profile - TrailProfile * service - Опцииональная привязка к сервису * labels - метки * effective_labels - эффективные метки * project - ссылка на проект * subscriber - ссылка на абонента * supplier - ссылка на поставщика * state - состояние workflow * remote_system - ссылка на внешнюю систему (внешний оркестратор) * remote_id - id во внешней системе * resources - список используемых ресурсов * model - модель ресурса * id - id ресурса * path - дополнительный путь: * Имя слота для inv.Object * role - ??? Роль ресурса в trail ??? Прочая информация по trail может лежать в traits. @todo: Убрать ресурсы и заменить описанием точек входа ### TrailLog Логгирование событий trail'а, лежит в ClickHouse. * date - дата (ключ шардирования) * ts - timestamp * trail - trail id * system - инициатор событий * message - сообщение ### TrailProfile Групповые настройки trail * id - идентификатор профиля * plane - ссылка на Plane * workflow - ссылка на workflow * labels - метки * effective_labels - эффективные метки * protocols - пропускаемые протоколы ### Link Для интеграции L2 линков и trail в модель Link добавляется поле: * trail - ссылка на trail NB: Возможна ситуация, при которой несколько параллельных линков представлены одной структурой Link. Так как привязка канала к линку почти всегда делается руками, такие линки следует уточнять до состояния точка-точка и привязывать к свом trail. В таком случае нет необходимости хранить на линке список trail'ов. ### ObjectConnection Так как на настоящий момент кабельные трассы в inventory не реализованы, предлагается использовать Channel Trail в качестве подложки для ObjectConnection. Для этого в ObjectConnection необходимо добавить поле: * trail - ссылка на Channel Trail При этом, в качестве подложки использовать связки: * channel trail -> optic trail * channel trail -> electric trail ### DWDMLambda Справочник стандартных частот DWDM * itu_channel - Номер канала * wavelength - Длинна волны * frequencey - Частота * spacing - 25/50/100Ghz Вопросы: * Объеднить с CWDM? ### OTUTrail Ресурс OTN. Представляет собой лямбду между WDM мультиплексорами с наложенным на нее OTU. Является абстракцией транспорта между мультплексорами. * id * connection trail - ссылка на channel tail (cм. ObjectConnection) * lambda - ссылка на DWDMLambda * otu - тип верхней группы OTU: * OTU1 * OTU2 * OTU2e * ... Если локальный OTU trail больше не используется, он удаляется. NB: Порты достаются через связку connection_trail -> object connection Вопросы: * OTUCn ложится на одну лямбду? ### ODUSelector Контейнеры ODU могут группировать контейнеры меньшего размера, как показано на схеме: ![](https://i.imgur.com/kGFaLhL.png) Для задач мультиплексирования необходимо иметь возможность адресовать конкретный контейнер в общей иерархии. Для этого вводится структура ODUSelector: * Массив объектов: * odu - тип ODU * n - порядковый номер в пределах родителя, zero based Контейнер верхнего уровня иерархии ![](https://i.imgur.com/ctYZPRu.png) адресуется как `[("ODU2", 0)]` Вложенный контейнер ![](https://i.imgur.com/hRiJplr.png) адресуется через всех родителей: `[("ODU2", 0), ("ODU1", 1)]` Более глубокие уровни ![](https://i.imgur.com/2NABbbF.png) иерархии адресуются аналогично: `[("ODU2", 0), ("ODU1", 1), ("ODU0", 1)]` ### ODUMux OTN-specific. Мультиплексирование ODU в пределах платы: * op - код операции * add - добавление из клиентского порта в линейный * drop - сброс из линейного порта в линейный * transit - транзит из линейного порта в линейный * object - ссылка на карту * ingress_trail - входной OTUTrail (drop, transit) * ingress_odu_selector - ODUSelector для ingress (drop, transit) * egress_pri_trail - выходной (OTUTrail), основной порт (add, trainsit) * egress_pri_selector - ODUSelector для egress primary (add, transit) * egress_back_trail - выходной (OTUTrail), backup порт (add, trainsit) * egress_back_selector - ODUSelector для egress backup (add, transit) * client_slot - имя слота для клиенского порта (add, drop) * client_odu_selector - ODUSelector для клиентского порта (add, drop) Матрица заполнения полей, в зависимости от операци | Поле | Add | Add, Protect | Drop | Transit | Transit, Protect | | --- | --- | --- | --- | --- | --- | | op | add | add | drop | transit | transit | | object | + | + | + | + | + | | ingress_trail | | | + | + | + | | ingress_odu_selector | | | + | + | + | | egress_pri_trail | + | + | | + | + | | egress_pri_selector | + | + | | + | + | | egress_back_trail | | + | | | + | | egress_back_selector | | + | | | + | | client_slot | + | + | + | | | | client_odu_selector | + | + | + | | | NB: Замыкане резерва на drop и transit задается как 2 записи, замыкающие основной и резервный путь на один и тот же ODUSelector Для каждого Object верны ограничения: * Может быть не более 1 правила add для клентского порта * Может быть не более 1 правила transit для ingress trail * ... #### Add ![](https://i.imgur.com/gZccp7O.png) ``` json { "op": "add", "object": "XXX", "egress_pri_trail": "<OTUTrail #3>", "egress_pri_selector": [("ODU0", 0), ("ODU1", 1)], "client_slot": "Client", "client_odu_selector": [("ODU0", 0)] } ``` #### Add + Protect ![](https://i.imgur.com/5tAnPQq.png) ``` json { "op": "add", "object": "XXX", "egress_pri_trail": "<OTUTrail #3>", "egress_pri_selector": [("ODU0", 0), ("ODU1", 1)], "egress_back_trail": "<OTUTrail #4>", "egress_back_selector": [("ODU0", 0), ("ODU1", 1)], "client_slot": "Client", "client_odu_selector": [("ODU0", 0)] } ``` #### Transit ![](https://i.imgur.com/WVXXZUr.png) ``` json { "op": "transit", "object": "XXX", "ingress_pri_trail": "<OTUTrail #1>", "ingress_pri_selector": [("ODU0", 0)], "egress_pri_trail": "<OTUTrail #3>", "egress_pri_selector": [("ODU0", 0)], } ``` #### Transit + Protect ![](https://i.imgur.com/FA9zfyp.png) ``` json { "op": "transit", "object": "XXX", "ingress_pri_trail": "<OTUTrail #1>", "ingress_pri_selector": [("ODU0", 0)], "egress_pri_trail": "<OTUTrail #3>", "egress_pri_selector": [("ODU0", 0)], "egress_back_trail": "<OTUTrail #4>", "egress_back_selector": [("ODU0", 0)], } ``` #### Drop ![](https://i.imgur.com/WOrvB7M.png) ``` json { "op": "drop", "object": "XXX", "ingress_pri_trail": "<OTUTrail #1>", "ingress_pri_selector": [("ODU1", 0), ("ODU0", 1)], "client_slot": "Client", "client_odu_selector": [("ODU0", 0)] } ``` ## OTN Plane Specific ### Inventory Protocols В протоколы inventory необходимо добавить стандартные частотные сетки DWDM: * `DWDM-100Ghz-<N>` - где `<N>` - номер канала, от 1 до 72 * `DWDM-50Ghz-<N>` - где `<N>` - номера каналов от 1 до 72 с шагом 0.5 По общей конвенции, DWDM порты, выдающие сигнал, размечаются префиксом `<`, принимающие - `>`. Протоколы размечаются на внутренних line портах. Доступные DWDM-каналы на оптическом линке ограничиваются пересечениием множеств протоколов на принимаемых и передающих портах с обоих концов. Также в протоколы необходимо добавить поддерживаемые типы OTU: * OTU1 * OTU2 * OTU2e * OTU25 * OTU3 * OTU50 * OTU4 * OTUC1 * OTUC2 * ... Точно так же, принмающие порты выдающие сигнал, размечаются префиксом `<`, принимающие - `>`. Протоколы размечаются на внутренних line портах. Доступные DWDM-каналы на оптическом линке ограничиваются пересечениием множеств протоколов на принимаемых и передающих портах с обоих концов. Для разметки поддерживаемых типов ODU на клиентских портах вводятся протоколы: * ODU0 * ODU1 * ODU2e * ODU3 * ODU4 Клиентские порты всегда двунаправлены, поэтому протоколы ODU указываются без направлений Прмер описания линейного порта в inventory ``` json "connnections": [ { "name": "line1.1", "direction": "s", "gender": "f", "description": "Line Port" "protocols": ["<OTU1", "<OTU2", "<DWDM-100Ghz-1", "<DWDM-100Ghz-2"] }, { "name": "client1", "direction": "s", "gender": "f", "description": "Line Port" "protocols": ["ODU0", "ODU2e", "TransEth1G", "TransEth10G"] } ] ``` См. [документацию по Inventory Protocols](https://docs.getnoc.com/master/en/dev/reference/inventory-protocols/) для уточнения деталей. !!! Вопрос для обсуждения по названиям протоколов частотной сетки. ### OTN Trail Путь через OTN Plane задается входным и выходным клиентскими портами ## Интеграция с FM Логику корреляции аварии Link Down следует доработать. В случае падения порта, принадлежащего линку, неоходимо проверять, задана ли привязка к trail. В случае наличия аварии на любом компоненте trail необходимо провести корреляцию Link Down с соответсвующей аварией. То же самое верно и в обратном направлении - при поднятии аварии на любом компоненте trail необходимо подшивать существующие Link Down. @todo: Для сработавшей защиты линка необходимо проверять наличие резерва