add IPv6 default route interface auto-detection for permanent/temporary IPv6 without netif
- get_default_route_netif_index(): UDP connect trick + getifaddrs to find default route iface - etcp_socket_add(): auto-detect netif_index when not specified in config - queue_new() API: explicit index_offset/index_size params instead of implicit from hash_size - radix: cleanup types (uint8_t*), replace bzero/bcmp with memset/memcmp, remove kernel ifdefs - route6_lib: new IPv6 routing library + get_node_v6_routes()
This commit is contained in:
1 parent
e1f051856f
commit
c24a6367cc
65 files changed
+34811
-556
No files matched your search
+25
-18
@@ -63,8 +63,6 @@ struct ll_entry {
|
||||
uint8_t* dgram; // Указатель на данные пакета
|
||||
void (*dgram_free_fn)(uint8_t* data); // Кастомная функция освобождения dgram
|
||||
struct memory_pool* dgram_pool; // Пул для dgram (если используется)
|
||||
uint16_t index_offset; // Смещение индекса в data[]
|
||||
uint16_t index_size; // Длина индекса (0 = без индекса)
|
||||
uint32_t index_hash; // Хеш по первым 4 байтам индекса
|
||||
struct ll_entry* hash_next; // Следующий в хеш-цепочке
|
||||
struct memory_pool* pool; // Пул, из которого выделен сам entry (NULL = malloc)
|
||||
@@ -126,6 +124,8 @@ struct ll_queue {
|
||||
|
||||
struct ll_entry** hash_table; // Хеш-таблица для поиска по id (если hash_size > 0)
|
||||
size_t hash_size; // Размер хеш-таблицы
|
||||
uint16_t index_offset; // Смещение индекса в data[] (для всех entry очереди)
|
||||
uint16_t index_size; // Размер индекса (0 = без индекса)
|
||||
|
||||
#ifdef QUEUE_THREAD_CHECK
|
||||
#ifdef _WIN32
|
||||
@@ -142,9 +142,12 @@ struct ll_queue {
|
||||
* @brief Создаёт новую пустую очередь.
|
||||
* @param ua экземпляр uasync (обязателен для отложенного resume коллбэков)
|
||||
* @param hash_size размер хеш-таблицы (0 = поиск по id отключён)
|
||||
* @param index_offset смещение ключа индекса в data[] каждого entry (0 если hash_size=0)
|
||||
* @param index_size размер ключа индекса (0 если hash_size=0)
|
||||
* @param name имя очереди для отладки
|
||||
* @return указатель на очередь или NULL при ошибке выделения памяти
|
||||
*/
|
||||
struct ll_queue* queue_new(struct UASYNC* ua, size_t hash_size, char* name);
|
||||
struct ll_queue* queue_new(struct UASYNC* ua, size_t hash_size, uint16_t index_offset, uint16_t index_size, char* name);
|
||||
|
||||
/**
|
||||
* @brief Освобождает структуру очереди.
|
||||
@@ -229,26 +232,20 @@ int queue_data_put(struct ll_queue* q, struct ll_entry* entry);
|
||||
int queue_data_put_first(struct ll_queue* q, struct ll_entry* entry);
|
||||
|
||||
/**
|
||||
* @brief Добавляет элемент в конец очереди с явным указанием смещения индекса для hash.
|
||||
* @brief Добавляет элемент в конец очереди с хеш-индексом (использует index_offset/index_size из очереди).
|
||||
* @param q очередь
|
||||
* @param entry элемент
|
||||
* @param index_offset смещение индекса (node_id) в data[]
|
||||
* @param index_size размер индекса (8 для uint64_t node_id)
|
||||
* @return 0 — успех, -1 — ошибка
|
||||
*/
|
||||
int queue_data_put_with_index(struct ll_queue* q, struct ll_entry* entry,
|
||||
uint16_t index_offset, uint16_t index_size);
|
||||
int queue_data_put_with_index(struct ll_queue* q, struct ll_entry* entry);
|
||||
|
||||
/**
|
||||
* @brief Добавляет элемент в начало очереди с явным указанием смещения индекса для hash.
|
||||
* @brief Добавляет элемент в начало очереди с хеш-индексом (использует index_offset/index_size из очереди).
|
||||
* @param q очередь
|
||||
* @param entry элемент
|
||||
* @param index_offset смещение индекса в data[]
|
||||
* @param index_size размер индекса
|
||||
* @return 0 — успех, -1 — ошибка
|
||||
*/
|
||||
int queue_data_put_first_with_index(struct ll_queue* q, struct ll_entry* entry,
|
||||
uint16_t index_offset, uint16_t index_size);
|
||||
int queue_data_put_first_with_index(struct ll_queue* q, struct ll_entry* entry);
|
||||
|
||||
|
||||
/**
|
||||
@@ -311,14 +308,24 @@ void queue_dgram_free(struct ll_entry* entry);
|
||||
/* ==================== Поиск и удаление ==================== */
|
||||
|
||||
/**
|
||||
* @brief Находит элемент по идентификатору (требуется hash_size > 0 при создании).
|
||||
* @param q очередь
|
||||
* @param id искомый идентификатор
|
||||
* @brief Находит элемент по ключу индекса (требуется hash_size > 0 при создании).
|
||||
* @param q очередь (размер ключа берётся из q->index_size)
|
||||
* @param index_key искомый ключ
|
||||
* @return элемент или NULL
|
||||
*/
|
||||
struct ll_entry* queue_find_data_by_index(struct ll_queue* q,
|
||||
const void* index_key,
|
||||
uint16_t index_size);
|
||||
const void* index_key);
|
||||
|
||||
/**
|
||||
* @brief Находит следующий элемент с тем же ключом (продолжение поиска).
|
||||
* @param q очередь (размер ключа берётся из q->index_size)
|
||||
* @param index_key искомый ключ
|
||||
* @param prev_entry предыдущий найденный элемент (от queue_find_data_by_index или предыдущего queue_find_next_by_index)
|
||||
* @return следующий элемент с тем же ключом или NULL
|
||||
*/
|
||||
struct ll_entry* queue_find_next_by_index(struct ll_queue* q,
|
||||
const void* index_key,
|
||||
struct ll_entry* prev_entry);
|
||||
|
||||
/**
|
||||
* @brief Удаляет элемент из очереди (не освобождает память).
|
||||
|
||||
Reference in new issue
Block a user