You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
26 lines
2.7 KiB
26 lines
2.7 KiB
В таблице роутинга маршруты не пересекаются. Т.е. не может быть одновременно 192.168.1.1/24 и 192.168.1.100/30 |
|
|
|
Как работает роутинг: |
|
1. типов маршрута бывает два: learned и local. |
|
local - локальные маршруты из конфига (опция конфига my_subnet=IP/Mask) |
|
при инициализации они сразу добавляются в роутинг таблицу (и используются для отправки пакетов в tun интерфейс). |
|
|
|
2. При установке подключения к новому узлу мы отправляем этому узлу полностью свою таблицу маршрутизации (local + learned узлы). Если несколько доступных линков - отправляем только один - preferred_conn |
|
3. При изменении preferred_conn рассылаем reroute (например старый preferred_conn удален) |
|
3. При удалении всех подключений рассылаем withdraw. |
|
|
|
3. При получении маршрута мы смотрим есть ли такой маршрут уже в таблице. Если такой маршрут есть и ID узла другой - игнорируем с ошибкой. иначе добавляем/обновляем (для одного узла может быть несколько маршрутов). Игнорируем маршрут если наш ID есть в списке узлов (hop_list). |
|
Добавляем так: |
|
инкрементируем hop_count |
|
устанавливая etcp линк с которого приняли как next_hop, добавляем его в hop_list. |
|
рассылаем по всем активным линкам кроме линка с которого получили (обязательно) |
|
Обновление: обновляем hop_list если поменялся |
|
|
|
4. При отключении от узла мы |
|
Удаляем все маршруты узла |
|
Рассылаем withdraw для узла hop_id. |
|
|
|
Логика рассылки withdraw: |
|
Если получен withdraw - удаляем этот маршрут и распространяем withdraw или reroute по всем линкам кроме того с которого получили. В зависимости от изменений (остались ли резервные линки или изменился preferred_conn). |
|
|
|
Метрик маршрута пока нет. используется первый доступный.
|
|
|