Fix Windows build: add sa_family_t typedef, replace arpa/inet.h, fix ll_queue warnings
- Add sa_family_t typedef for Windows in platform_compat.h - Add forward declaration of struct ll_queue in ll_queue.h to fix warnings - Replace arpa/inet.h includes with platform_compat.h in: tun_linux.c, etcp_connections.c, route_lib.c, route_bgp.c, utun_instance.c, routing.c, utun.c, packet_dump.h, config_parser.c - All 22 tests pass on Linux
This commit is contained in:
1 parent
9b1d43996e
commit
c83fdeeaad
57 files changed
+9070
-9
No files matched your search
+1
-1
@@ -7,7 +7,7 @@
|
||||
#include <strings.h>
|
||||
#include "../lib/debug_config.h"
|
||||
#include <ctype.h>
|
||||
#include <arpa/inet.h>
|
||||
#include "../lib/platform_compat.h"
|
||||
#include <errno.h>
|
||||
#include <netdb.h>
|
||||
#include <ifaddrs.h>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "etcp_connections.h"
|
||||
#include "../lib/socket_compat.h"
|
||||
#include <arpa/inet.h>
|
||||
#include "../lib/platform_compat.h"
|
||||
#include <net/if.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <arpa/inet.h>
|
||||
#include "../lib/platform_compat.h"
|
||||
#include <netinet/in.h>
|
||||
|
||||
// Packet dump function for debugging
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <arpa/inet.h>
|
||||
#include "../lib/platform_compat.h"
|
||||
|
||||
#include "route_bgp.h"
|
||||
#include "route_lib.h"
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
подсистема роутинга
|
||||
utun - это сеть узлов. у каждого узла есть собственные локальные подсети.
|
||||
глобальная задача: создать у каждого узла полную таблицу маршрутизации.
|
||||
Узлы преимущественно создают связь напрямую друг с другом. Но если это не получается отправляют трафик транзитом через доступные узлы.
|
||||
Иногда бывает что через транзитные узлы метрики лучше чем напрямую. Используем приоритетно узлы с лучшей метриков, при нехватке bandwidth используем разные каналы (агрегируем).
|
||||
Динамически обновлем метрики каналов чтобы при отказе быстро переключаться на другие и не фризить обмен из-за отказов.
|
||||
|
||||
|
||||
и узлы обмениваются таблицой маршрутов между собой так чтобы у каждого была актуальная таблица подсетей всех узлов.
|
||||
маршрутами меняются клиенты, подключения которых которые взяты из конфига. и сервера принявшие подключения если клиент инициировал обмен маршрутами.
|
||||
|
||||
инициируется подключение, клиент отправляет свою таблицу. когда сервер принимает таблицу - сервер помечает что по этому маршруту надо обмениваться маршрутами, далее;
|
||||
- добавляет узел в список рассылки обновлений маршрутов
|
||||
- отправляет свою таблицу
|
||||
- добавляет в свою таблицу отсутствующие маршруты
|
||||
- если что-то добавил:
|
||||
- рассылает измененные маршруты по списку рассылки
|
||||
- список рассылки - это linked-list очередей (также на базе ll_queue - каждый элемент = подписчик). один маршрут = одна отправленная кодограмма
|
||||
|
||||
|
||||
при подключении узла или изменении таблицы: узел шлёт свою таблицу
|
||||
формат кодограммы: [0x01 - routing module] [subcmd] [data]
|
||||
subcmd:
|
||||
1 [route] - отправка маршрута
|
||||
2, без данных - больше данных нет
|
||||
|
||||
если сервер получил кодограмму маршрута - он помечает флаг в etcp что с узлом надо обмениваться маршрутами (etcp_conn->routing_exchange_active=2) и добавляет в очередь рассылки маршрутов
|
||||
|
||||
|
||||
|
||||
=========================================
|
||||
механизм инкрементальной синхронизации (реализация - потом, пока мысли)
|
||||
1. вычисляем хеш каждой записи в роутинг таблице. используем ip+mask+node_uid
|
||||
2. потом из этих хешей создаем хеш таблицу (старшие n бит номер ячейки). далее вычисляются хеши каждой ячейки.
|
||||
на первом этапе n=16, на втором - n=16*16 на третьем n=16*16*16.
|
||||
|
||||
отправляем хеши удаленному узлу в формате: [n, 1 байт] ([индекс хеша 2 байта - используется n старших бит][хеш - 8 байт])
|
||||
|
||||
удаленный узел считает свои хеши и сравнивает. где не совпало смотрит сколько записей.
|
||||
если записей не много - передает эти записи.
|
||||
если записей много - добавляет 4 бита к хеш таблице и строит субтаблицу для
|
||||
+1
-1
@@ -9,7 +9,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <arpa/inet.h>
|
||||
#include "../lib/platform_compat.h"
|
||||
#include <time.h>
|
||||
|
||||
#define INITIAL_ROUTE_CAPACITY 100
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@
|
||||
#include "../lib/debug_config.h"
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <arpa/inet.h>
|
||||
#include "../lib/platform_compat.h"
|
||||
|
||||
#define IPv4_VERSION 4
|
||||
#define IPv6_VERSION 6
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@
|
||||
#include <sys/stat.h>
|
||||
#include <net/if.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include "../lib/platform_compat.h"
|
||||
#include <linux/if.h>
|
||||
#include <linux/if_tun.h>
|
||||
#include <errno.h>
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@
|
||||
#include <signal.h>
|
||||
|
||||
#include <getopt.h>
|
||||
#include <arpa/inet.h>
|
||||
#include "../lib/platform_compat.h"
|
||||
/*
|
||||
|
||||
Архитектура:
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <arpa/inet.h>
|
||||
#include "../lib/platform_compat.h"
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user