refactor: move transport (etcp/stcp/normalizer) to transport_layer/, routing (bgp/pings/topo*) to routing_layer/
This commit is contained in:
1 parent
3dda701c67
commit
fcf3fb7f51
146 files changed
+582
-333
No files matched your search
@@ -0,0 +1,44 @@
|
||||
# routing – централизованный модуль маршрутизации
|
||||
|
||||
## 1. Назначение
|
||||
Связывает TUN-интерфейс и ETCP-транспорт в единый маршрутизатор. Принимает IP-пакеты из TUN, по IP-адресу назначения ищет маршрут в таблице (`route_lib`) и отправляет пакет через ETCP нужному узлу. В обратную сторону принимает пакеты из ETCP (callback `routing_pkt_from_etcp_cb`) и отдаёт в TUN локально.
|
||||
|
||||
IPv6-пакеты на данный момент дропаются на этапе `extract_dst_ip` (возвращает 0).
|
||||
|
||||
Модуль НЕ реализует таблицу маршрутизации сам — он пользуется `route_lib` (`instance->rt`) и BGP-обменом (`topo_node` / `topo_group`) для наполнения таблицы.
|
||||
|
||||
## 2. Как пользоваться
|
||||
**Порядок инициализации в `utun_instance.c`:**
|
||||
1. `routing_create()` — создаёт `ROUTE_TABLE` в `instance->rt`
|
||||
2. `routing_bind()` — биндит коллбек `routing_pkt_from_etcp_cb` через `etcp_router_bind(ETCP_RT_ID_DATA)` — принимать пакеты из ETCP
|
||||
3. `routing_set_tun()` — вешает коллбек `routing_pkt_from_tun_cb` на `tun->output_queue` — забирать пакеты из TUN
|
||||
|
||||
**Основной поток данных:**
|
||||
- **TUN → сеть:** пакет попадает в `tun->output_queue` → `routing_pkt_from_tun_cb` → `route_pkt` → `etcp_route_send`
|
||||
- **сеть → TUN:** пакет приходит через ETCP → `etcp_router` вызывает `routing_pkt_from_etcp_cb` → `route_pkt` → `queue_data_put(tun->input_queue)`
|
||||
|
||||
**Ключевые нюансы:**
|
||||
- `routing_add_conn` / `routing_del_conn` — **deprecated** (no-op), маршруты теперь управляются через BGP и таблицу `route_lib`
|
||||
- Все не-IPv4 пакеты (IPv6, unknown) дропаются в `extract_dst_ip`
|
||||
- Multicast (224.0.0.0/4) и limited broadcast (255.255.255.255) дропаются без логирования
|
||||
- Пакеты без маршрута дропаются с инкрементом `instance->dropped_packets`
|
||||
|
||||
## 3. API
|
||||
|
||||
| Функция | Описание |
|
||||
|---------|----------|
|
||||
| `routing_create(instance)` | Создаёт `ROUTE_TABLE` в `instance->rt`. -1 при ошибке |
|
||||
| `routing_bind(instance)` | Биндит обработчик входящих ETCP-пакетов через `etcp_router_bind` |
|
||||
| `routing_destroy(instance)` | Отвязывает ETCP-обработчик, уничтожает `ROUTE_TABLE` |
|
||||
| `routing_set_tun(instance)` | Вешает callback на `tun->output_queue` для перехвата пакетов из TUN |
|
||||
| `routing_add_conn(etcp)` | **Deprecated**, ничего не делает |
|
||||
| `routing_del_conn(etcp)` | **Deprecated**, ничего не делает |
|
||||
| `route_pkt(instance, entry, src_node_id)` | Ядро маршрутизации: извлекает dst IP → `route_lookup` → `etcp_route_send` или `queue_data_put(tun->input_queue)` для локального |
|
||||
|
||||
### Внутренние функции
|
||||
|
||||
| Функция | Описание |
|
||||
|---------|----------|
|
||||
| `extract_dst_ip(data, len)` | Извлекает dst IPv4 из заголовка пакета (offset 16, 4 байта). Возвращает 0 для не-IPv4 |
|
||||
| `routing_pkt_from_etcp_cb(conn, pkt)` | Callback: приём пакета из ETCP-роутера, вызывает `route_pkt` |
|
||||
| `routing_pkt_from_tun_cb(q, arg)` | Callback: приём пакета из TUN output_queue, вызывает `route_pkt` |
|
||||
Reference in new issue
Block a user