---
# System prepended metadata

title: Channel Management v2

---

# Channel Management v2

## Канал

С точки зрения клиента, канал состоит из 2 или более точек подключения, между которыми прозрачно осуществляеся передача клиентских данных с зараннее определеннымии SLA.

Под "прозрачностью" понимается способность сохранять оригинальные клиентские фреймы на выходе из канала. Исторически, каналы делятся на три основных категории:

* **Темная оптика/прямой провод**: обеспечивает прозрачную передачу оптического сигнала между точками подключения. Тип передаваемых данных, модуляция и скорость передачи полностью задается и контролируется оборудованием клиента.
* **L2**: Обеспечивает прозрачную передачу ethernet-фреймов IEEE 802.3. В зависимости от типа канала, на каждой точке подключения фреймы могут быть нетегированными, иметь тег 802.1Q, или иметь вложенные теги (Q-in-Q, MAC-in-MAC). Скорость и тип сигнала согласовывается между клиентом и оператором для каждой точки подключения. Передача клиентской маркировки 802.1p не гарантируется, если не оговорено заранее. MTU оговаривается заранее. Передача multicast оговаривается заранее.
* **L3**. Обеспечивает передачу IPv4 и/или IPv6 пакетов. В зависимости от типа может поддерживать или не поддерживать динамическую маршрутизацию. Скорость и тип сигнала для каждой точки подключения оговаривается заранее. MTU оговаривается заранее. Передача multicast оговаривается заранее.

Топологически каналы делятся на четыре основные категории:

* **Точка-точка** (p2p) - две точки подключения
* **Точка-многоточка** (p2mp) - одна точка подключения с репликацией сигнала на все выходы
* **Дерево** (tree) - обеспечивается передача сигнала от корня дерева ко всем листья и в обратном направлении. Прямая передача сигнала между листьями запрещена
* **Звезда** (star) - разрешена передача сигнала между всеми узлами

Таким образом с точки зрения клиента прослеживаются две сущности:

* Канал
* Точка подключения

И должны обеспечиваться следующие операции:

* Проверка технической возможности (изначальная)
* Проверка технической возможности (доп. подключение, если разрешено типом канала)
* Создание канала
* Расформирование канала
* Добавление точки подключения (если разрешено типом канала)
* Удаление точки подключения (при 3 и более точках)
* Получение карты

> NB: Внутренняя реализация канала с точки зрения клиента является черным ящиком и имеет право эволюционировать со временем.

## Технологическе домены

На настоящий момент сущесвует несколько технологий организации канала:

* **Оптическая сеть**: Совокупность оптического кабеля, муфт, кроссов и патч-кордов.
* **Медная сеть**: Совокупность медного кабеля, кроссов и патч-кордов.
* **VLAN**: Пространство ethernet-коммутации, основанное на mac-address learning
* **GRE**: Инкапсуляция IP-пакетов
* **VXLAN/EVPN**: Инкапсуляция ethernet-фреймов в UDP в комбинации с mac address learning
* **MPLS**: Универсальный транспорт L2.5, с возможностью организации L2 и L3 каналов.
* **OTN**: Оптическая транспортная сеть уровня L1 с возможностью передавать ethernet-фреймы. Поддерживает оптическое мультиплексирование.
* **SDH**: Предшественник OTN, на настоящий момент мало интересен.
* **Прочее**: @todo: Дополнить по необходимости.

Набор доступных технологий и их предпочтительность может варироваться от сети к сети.

Технологии разбивают сеть оператора на взаимнонепересекающиеся области, называющиеся **технологическими доменами** или просто **доменами**.

Таким образом, на сети могут существовать технологические домены:

* optic
* copper
* vlan
* vxlan/evpn
* mpls
* otn

Деление сети на домены оправдано также и с организационной точки зрения, так за кроссировкуу, mpls-ядро и уровень доступа часто отвечают различные службы и подрядчики.

С более высокого уровня - домены являются черными ящиками, которые можно использовать для организации канала. При этом интерфейс взаимодействия домена с внешним миром полностью повторяет интерфейс каналов.

С этой точки зрения - домены являются внуренними микро-операторами  или субподрядчиками для организации канала.

> Уровень каналов в общем случае не является доменом, так как не всегда соблюдается условие технологического единства.

### Специальные домены

Домен *partner* позволяет реализовывать каналы через субподрядчиков-партнеров.

## Простые и составные каналы

Если все точки подключения канала находятся в пределах одного
домена, канал называется **простым**, в противном случае - **составным**.

Пример простого канала:

* Прокладка оптики от точки к точке, даже если она включает в себя прокладку дополниительных кабелей, кроссировку и разварку муфт.
* Медная кроссиировка.

Составные каналы образовываются путем соединения нескольких простых каналов. Рассмотрим схему:

![](https://i.imgur.com/s5WCrXU.png)

* Левая точка подключения соединяется с MPLS-ядром медным кабелем.
* Средняя - оптическиим.
* Подключене правой точки - комплексное, сначала протягвается оптика до существующей сети доступа, по которой пробрасывается VLAN. Далее - между сетью доступа и MPLS-ядром организуется дополниельнаяя оптическая перемычка. В отдельных случаях она может быть переиспользована для нескольких каналов.

Итого, для организации канала потребовалось 6 внутренних простых каналов:

* Домен optic: 3 канала
* Домен copper: 1 канал
* Домен mpls: 1 канал
* Домен vlan: 1 канал

Каждый сам по себе не несет практической пользы, но все вместе они образуют канал. Во избежания путаницы назовем такие внутренние каналы **служебными**.

Служебные каналы являются полноценными каналами, то есть связывают свои endpoint'ы, имеют свою топологию и прочие свойства. Также необходимо отметить, что отдельные endpoint'ы служебного канала могут являться enpoint'ами композитного канала.

В пределах домена канал также может разбиваться на домено-специфичные сущности, но все детали скрыты внутри черного ящика и для вышестоящего уровня не имеют никакого значения. Все детали будут расписаны далее для каждого домена по отдельности.

## Жизненный цикл каналов и контроллеры

Программная сущность, реализующая API канала называется *контроллер*. За взаимодействие с внешним миром отвечает *channel controller*. Он занимается оркестрацией верхнего уровня, принимает решение о топологии канала и задействовании соответсвующих доменов
и распределяет задачи для соответсвующих контроллеров доменов.

![](https://i.imgur.com/YHLJe9W.png)

Контроллеры доменов реализуют свои задачи строго в пределах своего домена. Каждый домен имеет строго один контроллер, который может
одновременно обрабатывать несколько задач.

Простейший контроллер представляет собой workflow, обрабатываемый вручную.

## Модель данных

### TransportDomain

Транспортный домен. Задает сущесвующие домены и их ограничения.

* id
* name - уникальное имя
* description - описание
* controller - текущий handler контроллера, порожден от BaseController
* pass_l1 - пропуск фреймов L1
* pass_l2 - ... L2
* pass_l3 - ... L3
* topo_p2p - поддержка топологии точка-точка
* topo_p2mp - ... точка-многоточка
* topo_tree - ... дерево
* topo_start - ... звезда
* is_homogenous - все точки подключения канала должны иметь одинаковую скорость подключения и модуляцию
* labels - метки

Заполняется из коллекций.

### Channel

Канал

* id
* name - уникальное имя
* description - описание
* parent - для служебных каналов - ссылка на составной канал
* transport_domain - для простых каналов - ссылка на TransportDomain
* provider - организация-поставщик канала, если приобретается у другого юрлица
* subscriber - абонент, если канал заказан абонентом. Для служебных каналов всегда пустой
* project - ссылка на проект
* topology - топология
    * p2p
    * p2mp
    * tree
    * star
* kind - тип канала
    * l1
    * l2
    * l3 
* labels - метки
* effective_labels - полный набор эффективных меток
* remote_system - ссылка на внешнюю систему при импорте
* remote_id - id во внешней системе

Правила перетока меток:

``` mermaid
graph LR
    TransportDomain --expose_channel--> Channel
```

Вопросы:

* Автогенерация уникального имени.
* workflow/state
* Дополнительные аттрибуты - traits
* Пропуск специфичный фреймов: multicast, lldp, cdp, stp, ...

### Channel Log

Логгирование всей истории изменениий на канале. Хранится в ClickHouse.

* date
* ts - timestamp
* channel - id Channel
* endpoint - id endpoint, если событие привязано к endpoint
* domain - соответсвующй transport domain
* user - имя пользователя, если есть
* type - тип сообщения
* msg - сообщение

### Endpoint

Точки подключения

* id
* channel - ссылка на канал
* peer - ссылка на endpoint:
    * Если endpoint служебного и композитного канала совпадают
    * Если происходит стык служебных каналов
* name - уникальное имя в пределах канала
* description
* connections - список физических подключении. Для обычных подключений - строго одно значение, для аггрегированых > 1
    * object - ссылка на объект inventory
    * slot - ссылка на слот объекта
* discriminator - Опциональный дискриминатор
* labels - метки
* effective_labels - полный набор эффективных меток
* remote_system - ссылка на внешнюю систему при импорте
* remote_id - id во внешней системе

Правила перетока меток:

``` mermaid
graph LR
    Channel --expose_endpoint--> Endpoint
    TransportDomain --> Channel
    Workflow --> State
    State --expose_endpoint--> Endpoint
```

Вопросы: 

* Дополнительные аттрибуты - в traits
* Поддержка LACP 

#### Discriminator

Необходимо учитывать, что одна точка подключения может быть переиспользована для организации нескольких каналов. Простейший пример - подключение транковым портом, когда каждому каналу, получаемому из порта, соответсвует отдельный номер VLAN. На один endpoint может быть задано несколько дискримнаторов.

Допускается использование комбнации object + slot в нескольких
endpoint при условии, что они имеют непересекающиеся дискрмнаторы.

Формат дискриминатора:

```
class Item(BaseModel):
    scope: str
    value: str

Discriminator: List[Item]
```

Форматы дискриминаторов:

| Scope | Value | Описание |
| --- | --- | --- |
| `vlan` | `<vlan id>` | Фреймы 802.1Q с VLAN ID `<vlan id>` |
| `lambda` | `<freq>-<width>` | Центральная частота `<freq>` Ghz, ширина канала `<width>` Ghz |


### Пример

![](https://i.imgur.com/s5WCrXU.png)

Channel:

| id | name | parent | transport_domain | topology | kind |
| --- | --- | --- | --- | --- | --- |
| ch1 | Channel | | | star | l3 |
| ch2 | copper-1 | ch1 | copper | p2p | l1 |
| ch3 | optic-1 | ch1 | optic | p2p | l1 |
| ch4 | optic-2 | ch1 | optic | p2p | l1 |
| ch5 | optic-3 | ch1 | optic | p2p | l1 |
| ch6 | mpls-1 | ch1 | mpls | star | l3 |
| ch7 | vlan-1 | ch1 | vlan | star | l2 |

Endpoint

| id | channel | name | peer |
| --- | --- | --- | --- |
| ep1 | ch1 | left | ep4 |
| ep2 | ch1 | center | ep6 |
| ep3 | ch1 | right | ep8 |
| ep4 | ch2 | 1 | ep1 |
| ep5 | ch2 | 2 | ep12 |
| ep6 | ch3 | 1 | ep2 |
| ep7 | ch3 | 2 | ep13 |
| ep8 | ch4 | 1 | ep3 |
| ep9 | ch4 | 2 | ep15 |
| ep10 | ch5 | 1 | ep16 |
| ep11 | ch5 | 2 | ep14 |
| ep12 | ch6 | 1 | ep5 |
| ep13 | ch6 | 2 | ep7 |
| ep14 | ch6 | 3 | ep11 |
| ep15 | ch7 | 1 | ep9 |
| ep16 | ch7 | 2 | ep10 |


## Optic Domain

Оптическая сеть состоит из:

* Оптческих кабелей, состоящих из нескольких волокон.
* Оптических муфт, соединяющих два или более кабеля физически.
* Оптических кроссов, на которых кабель терминируется на стандартные оптические разъемы: LC, SC, ST ...
* Оптических патч-кордов - специального вида кабеля с разделанными на торцах вилками для оптических разъемов.
* ROADM - программируемые коммутаторы оптического сигнала

Топология оптической сети в большинстве случаев изменяется вручную,
хотя ROADM могут быть перекоммутированы дистанционно.

Оптческая сеть реализует каналы за счет физической коммутации оптического волокна по всему пути. Подключениие к оптической сети в большинсве случаев осуществляется патч-кордами. В отдельных - установкой нового кросса.

Способы изменения топологии оптической сети:

* Переконфигурация ROADM
* Прямой патч-корд между точками подключения
* Подключение патч-корда к кроссу
* Коммутация патч-кордом на кроссе
* Прокладка кабеля по зданию
* Прокладка кабеля по городу
* Установка кросса
* Разварка волокон в муфте
* Разрез кабеля и установка новой муфты

Методы различаются как по времении реализации и трудоемкости, так и по оценке реалиизуемости.

| Метод | Авто. ПТВ[^1] |
| --- | --- |
| Переконфигурация ROADM | + |
| Прямой патч-корд между точками подключения | + |
| Подключение патч-корда к кроссу | + |
| Коммутация патч-кордом на кроссе | + |
| Прокладка кабеля по зданию | - |
| Прокладка кабеля по городу | - |
| Установка кросса | - |
| Разварка волокон в муфте | + |
| Разрез кабеля и установка новой муфты | - |

Необходимо отметить, что в случае наличя ROADM топология оптической сети задается не только физической коммутацией, но и зависит от входящей длины волны. В таком случае endpoint оптческого канала должен меть discriminator `lambda`.

### Автоматическая проверка технической возможности

Автоматическая проверка технической возможности базируется на концепции **покрытия** кросса. Покрытие представляет собой ресурсную группу, где в сервисной части находится кросс, а в клиентской может находиться:

* Стойка
* Ряд стоек
* Комната
* Этаж
* Подъезд
* Здание
* Точка присутсвия

Все упомянутые сущности являются объектами inventory, соответсвено тип ресурсных групп один:

Технология: optic_cross_coverage
server model: inv.Object
client model: inv.Object

Алгоритм нахождения возможных кроссов для подключения прост:

* Находим все resource group для текущего контейнера точкии подключения: technology == optic_cross_coverage, client_model == container
* Если записи найдены - получаем кроссы из server model
* Проверяем, есть ли на кроссе свободные порты
* В противном случае поднимаемся к родителю текущего контейнера и повторяем поиск
* При выходе за пределы точки присутсвия останавливаемся

Таким образом осуществляется приоретизация кроссов - кросс с более детальным покрытием возьмет заявки первым.

### ROADM

ROADM является программируемым оптческим коммутатором, перенаправляющим определенные длины волны с входного порта на выходной.

![](https://i.imgur.com/A9IyUyp.png)


### Модель данных

#### ROADMux

Таблица коммутациии ROADM:

* `object` - ссылка на карту
* `ingress_slot` - входной порт
* `egress_slot` - выходной порт
* `freq` - центральная частота, Ghz
* `width` - шиирна канала, Ghz

Приимечания:

* Если `freq` и `width` пустые, то ROADM работает в режиме опттческого кросса и просто замыкает вход и выход
* Может быть задано несколько правил на один входной порт

## Copper Domain

## OTN Domain

Optical Transport Network. Состоит из актиивного оборудования, которое осуществляет прозрачную транспортировку клиентского сигнала
через Optic Domain. Расширяет возможности оптической сети следующими функциями:

* Оптическое уплотнение - позволяет параллельно передавать несколько оптических сигналов на разных длинах волны по одному волокну
* Прозрачная регенерация, усиление и коррекция дисперсии сигнала - позволяет увеличвать длину линка за пределы возможности лазеров класса 1 (~80км)
* Дополнительный контроль ошибок
* Мультиплексирование - несколько клиентских сигналов могут быть собраны в одну транспортную группу.
* Транспортная защита - автоматическое переключение на резервный маршрут в случае обрыва основного (<50ms). В отличии от MPLS FRR доступно для любого оконечного оборудования и не требует поддержки MPLS.
* Оптическая защита - автоматическое переключение на резервный маршрут на уровне оптического сигнала. Обеспечивает рекордное время переключения (единицы ms) и доступно для любых видов сигнала.

Является иерархической средой, определяемой рекоммендациями ITU-T G.709.

OTN принимает клиенские сигналы по электрическому или медному кабелю, следовательно каналы OTN Domain всегда состыковываются с каналами Optic или Copper Domain.

В отличии от Optic Domain, OTN Domain позволяет конфигурировать топологию на уровне оборудования. Таким образом, канал в пределах OTN Domain в большинстве случаев может быть построен автоматически
на уровне контроллера.

### Частотная сетка

OTN позволяет передачу нескольких сигналов по одному оптическому волокну используя разные длинны волны. Стандарты ITU определяют несколько частотных сеток:

* ITU-T G.694.1 определяет сетки DWDM с шагом 12.5Ghz, 25Ghz, 50Ghz и 100Ghz в диапазонах
* ITU-T G.694.2 определяет сетку из 18 частот для нужд CWDM

Помимо фиксированной сетки G.694.1 Appendix 1 упоминает Flexible Grid с возможностью в рамках одной частотной сетки использовать разные ширины каналов.

Таким образом частотная сетка определяется центральной частотой $f$ и шириной канала $w$. Допускается использование частот 190-198THz с шагом 6.25GHz и ширин каналов от 50 до 100Ghz с шагом 12.5Ghz. То есть:

$$
\begin{cases}
f_i = 190000 + 6.25 i, i \in [0, 1280] \\
w = 50 + 12.5 j, j \in [0, 4]
\end{cases}
$$

### OTU

Транспортный уровень - 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 передается на одной из фиксрованных длин волны (лямбда). В пределах одного волокна на разных длинах волны могут передаваться несколько OTU.

### ODU

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 |

### ADM

С точки зрения топологии OTN основным действующим элементом является add-drop multiplexer (ADM). ADM обычно представляет собой отдельную плату, которая осуществляет упаковку клиентского сигнала в ODU соотвествующего уровня и группировку ODU в OTU. 

![](https://i.imgur.com/q4zgPh2.png)

OTU передаются по оптическому волокну каждый на своей длине волны.
Необходимо отметить, что в отдельных случаях ADM могут быть соединены оптическим волокном напрямую, но в большинстве случаев по пути расположены дополнительные устройства - усилители, интерливеры.

Топология OTN задается оптическиимии каналами, проложенными между картами ADM. Данные каналы относяятся к optic domain и называются `OCh`. Возможны два сценария прокладки `OCh`:

* Между муультплексорами нет ROADM - в таком случае  между муультплексорами прокладывается одн OCh
* В случае наличя ROADM порт мультплексора может соединяться с несколькими OCh, в таком случае OCh должны разделяться между собой дискриминаторами `lambda`. См. разделы [ROADM](#ROADM) и [Discriminator](#Discriminator)


> NB: Модель канала соединяет между собой endpoint'ы в виде слотов на оборудовании - у нас есть все данные для формирования топологии OTN.


### Модель данных

#### Inventory Protocols

В протоколы inventory необходимо добавить стандартные частотные сетки DWDM:

* `DWDM-100Ghz-<N>` - где `<N>` - номер канала, от 1 до 72
* `DWDM-50Ghz-<N>` - где `<N>` - номера каналов от 1 до 72 с шагом 0.5
* `DWDM-25Ghz-<N>` - - где `<N>` - номера каналов от 1 до 72 с шагом 0.25
* `DWDM-12.5Ghz-<N>` - - где `<N>` - номера каналов от 1 до 72 с шагом 0.125


По общей конвенции, DWDM порты, выдающие сигнал, размечаются префиксом `<`, принимающие - `>`. Протоколы размечаются на внутренних line портах.

Доступные DWDM-каналы на оптическом линке ограничиваются пересечениием множеств протоколов на принимаемых и передающих портах с обоих концов.

Также в протоколы необходимо добавить поддерживаемые типы OTU:

* OTU1
* OTU2
* OTU2e
* OTU25
* OTU3
* OTU50
* OTU4
* OTUC1
* OTUC2
* ...

Точно так же, принмающие порты выдающие сигнал, размечаются префиксом `<`, принимающие - `>`. Протоколы размечаются на внутренних line портах. Доступные DWDM-каналы на оптическом линке ограничиваются пересечениием множеств протоколов на принимаемых и передающих портах с обоих концов.

Для разметки поддерживаемых типов ODU на клиентских портах вводятся протоколы:

* ODU0
* ODU1
* ODU2e
* ODU3
* ODU4

Клиентские порты всегда двунаправлены, поэтому протоколы ODU указываются без направлений.

См. [документацию по Inventory Protocols](https://docs.getnoc.com/master/en/dev/reference/inventory-protocols/) для уточнения деталей.


Вопрос:

* Названия протоколов частотной сетки.


#### Платы ADM

Платы ADM моделирууются как обычные слоты в inventory. На линейных портах размечаются доступные протоколы DWDM и OTU. На клиенских - доступные типы контейнеров ADU. Топология OTN описывает в виде WDM-каналов, связывающих соотвествующие порты ADM,

Прмер описания линейного и клиентского порта в 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"]       
    }
]
```

Вопросы:

* Прочие ограничения плат?


#### OTU

Описывает OTU на конкретной длинне волны между ADM.

* channel - ссылка на OCh
* freq - центральная частота, GHz (см. частотная сетка)
* width - ширина канала, GHz  (см. частотная сетка)
* otu - тип OTU.

> NB: Соединяемые устройсва и порты мы получим через endpoint'ы channel. Направление получим из протоколов модели.
> В случае ROADM для определения топологии также необходмо анализировать дискриминаторы

#### 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)]`

ODUSelector не является самостоятельной таблицей, а представляет формат поля структуры ODUMux

#### ODUMux

OTN-specific. Мультиплексирование ODU в пределах платы:

* op - код операции
    * add - добавление из клиентского порта в линейный
    * drop - сброс из линейного порта в линейный
    * transit - транзит из линейного порта в линейный
* object - ссылка на карту ADM
* ingress_otu - входной OTU (drop, transit)
* ingress_odu_selector - ODUSelector для ingress (drop, transit)
* egress_pri_otu - выходной (OTU), основной порт (add, trainsit)
* egress_pri_selector - ODUSelector для egress primary (add, transit)
* egress_back_otu- выходной (OTU), 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_otu  | |  | + | + | + |
| ingress_odu_selector | |  | + | + | + |
| egress_pri_otu | + | + | | + | + |
| egress_pri_selector | + | + | | + | + |
| egress_back_otu |  | + | | | + |
| 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_otu": "<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_otu": "<OTUTrail #3>",
    "egress_pri_selector": [("ODU0", 0), ("ODU1", 1)],
    "egress_back_otu": "<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_otu": "<OTUTrail #1>",
    "ingress_pri_selector": [("ODU0", 0)],
    "egress_pri_otu": "<OTUTrail #3>",
    "egress_pri_selector": [("ODU0", 0)],
}
```

##### Transit + Protect

![](https://i.imgur.com/FA9zfyp.png)

``` json
{
    "op": "transit",
    "object": "XXX",
    "ingress_pri_otu": "<OTUTrail #1>",
    "ingress_pri_selector": [("ODU0", 0)],
    "egress_pri_otu": "<OTUTrail #3>",
    "egress_pri_selector": [("ODU0", 0)],
    "egress_back_otu": "<OTUTrail #4>",
    "egress_back_selector": [("ODU0", 0)],    
}
```

##### Drop

![](https://i.imgur.com/WOrvB7M.png)

``` json
{
    "op": "drop",
    "object": "XXX",
    "ingress_pri_otu": "<OTUTrail #1>",
    "ingress_pri_selector": [("ODU1", 0), ("ODU0", 1)],
    "client_slot": "Client",
    "client_odu_selector": [("ODU0", 0)]
}
```

#### OTN Channel

Клиентский канал, проложенный через OTN моделируется как
обычный канал, связывающий два клиенский порта на ADM.

При этом - тип ODU мы получаем из записей ODUMux типа add и drop,
а полную топологию основного и резервного направления - из топологии ADM и записей типа transit в ODUMux.

Каналы OTN устанавлвают Channel.transport_domain == "otn".

#### Ограничения

* Частоты не должны пересекаться: $Для\ порта\ с частотной\ сеткой\  <f_n, w_n > \nexists i, j: i \neq j, \lvert f_i - f_j\rvert < \frac{\lvert w_i + w_j \rvert}{2}$


## Заметки на полях

* После добавления точки подключения в простой канал он может стать составным
* После удаления точки подключения из составного канала он может стать простым

## Изменения

### Review 003

* Дискриминаторы - список значений
* Дискриминатор `lambda`
* В описание оптческого домена добавлен ROADM.
* Структура ROADMux
* Переписана глава "Частотная сетка" с учетом Flexible Grid
* Удалена структура OTNLambda
* В структуре OTU добавлены поля freq и width
* В разделе ADM описан случай множественных каналов с использованиием ROADM.

### Review 002

* Изменена формулировка простого канала
* Исправлена картинка иерархии конроллеров
* В модели channel исправлено определение `parent`
* Endpoint в модели данных може быть аггрегированным
* Начальное описание Optical Domain
* Начальное описание OTN

## Задачи

* ChannelTask
* Сценарий, когда оборудование устанавливаеся в процессе подключения - endpoint в воздухе
* Очереди строительства
* Контроллер - корреляция

## Возражения

* Есть устройства, которые реализуют резервное переключение на уровне оптических каналов.

* Ну и нужно понимать, что каналы мультиплексируются, т.е. где-то мы работаем с групповым сигналом, а где-то с отдельными OTN каналами.

* Например, мы можем мультиплексировать 40 каналов в групповой сигнал, а потом через устройства ROADM доставлять определенные каналы в разные части сети.

---
WARNING: old trash below

Разгрести


### Свойсва доменов

Ограничения по типу каналов

| Домен | Темная оптика | Прямой провод | L2 | L3 |
| --- | --- | --- | --- | --- |
| Optic | + | - | - | -  |
| Copper | - | + | - | - |
| VLAN | - | - | + | - |
| VXLAN/EVPN | - | - | + | - |
| MPLS | - | - | + | + |
| OTN | - | - | + | - |

Ограничения по типу топологии

| Домен | p2p | p2mp | tree | star |
| --- | --- | --- | --- | --- |
| Optic | + | +[^5] | - | - |
| Copper | + | - | - | - |
| VLAN | + | - | - | + |
| VXLAN/EVPN | + | - | - | + |
| MPLS | + | + | + | + |
| OTN | + | - | - | - | 

Прочее

| Домен | Конфигурируем |
| --- | --- |
| Optic | - |
| Copper | - |
| VLAN | + |
| VXLAN/EVPN | + |
| MPLS | + |
| OTN | + |





[^1]: Автоматизированная проверка технической возможности
[^5]: Со сплиттерами
