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.
31 lines
3.0 KiB
31 lines
3.0 KiB
В таблице роутинга маршруты не пересекаются. Т.е. не может быть одновременно 192.168.1.1/24 и 192.168.1.100/30 |
|
|
|
Как работает роутинг: |
|
1. типов маршрута бывает два: learned (роутятся в ETCP instance) и local (роутятся в TUN). |
|
local - локальные маршруты из конфига (опция конфига my_subnet=IP/Mask) |
|
при инициализации local сразу добавляются в роутинг таблицу (ипользуя запись BGP_NODEINFO_PACKET* my_nodeinfo). |
|
|
|
BGP_NODEINFO собирается на узле владельце node, далее распространяется по остальным узлам. |
|
|
|
2. При установке подключения к новому узлу мы отправляем этому узлу все nodeinfo. Если несколько доступных линков - отправляем только один - preferred_conn |
|
3. При изменении preferred_conn рассылаем reroute (например старый preferred_conn удален) |
|
3. При удалении всех подключений рассылаем withdraw. |
|
|
|
3. При получении BGP_NODEINFO_PACKET мы смотрим есть ли такой узел уже в таблице. Если узла нет - добавляем, если есть - обновляем информацию о узле включая его маршруты и список next_hop через которые доступен узел (nb_routes). |
|
Добавляем так: |
|
инкрементируем hop_count |
|
устанавливая etcp линк с которого приняли как next_hop, добавляем его в hop_list. |
|
рассылаем по всем активным линкам кроме линка с которого получили (обязательно) |
|
Обновление: обновляем hop_list если поменялся |
|
|
|
4. При отключении от узла (если у node не осталось nb_routes) мы: |
|
Удаляем node и вложенные структуры: все маршруты узла |
|
Рассылаем withdraw для узла hop_id. |
|
|
|
Логика рассылки withdraw: |
|
Если получен withdraw - удаляем этот маршрут и распространяем withdraw или reroute по всем линкам кроме того с которого получили. В зависимости от изменений (остались ли резервные линки или изменился preferred_conn). |
|
|
|
Метрик маршрута пока нет. используется первый доступный. |
|
|
|
Как работаеут маршрутизация: |
|
destination IP -> route table lookup -> route entry (ip/mask, node_info*) -> выбор лучшего next_hop -> отправка в next_hop
|
|
|