---
# System prepended metadata

title: Channel Management

---

# 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: Для сработавшей защиты линка необходимо проверять наличие резерва
