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.
36 lines
1.4 KiB
36 lines
1.4 KiB
#ifndef ROUTE6_LIB_H |
|
#define ROUTE6_LIB_H |
|
#include <stdint.h> |
|
#include <stddef.h> |
|
#include <stdbool.h> |
|
#include "../lib/radix.h" |
|
#include "../lib/ll_queue.h" |
|
#include "../lib/u_async.h" |
|
|
|
// таблица маршрутизации IPv6 на radix tree + ll_queue (поиск по node_id для удаления) |
|
|
|
struct ROUTE6_DATA { |
|
struct radix_node rn_nodes[2]; // scratch-буфер для rn_addroute |
|
struct NODEINFO_Q *v_node_info; // узел-владелец |
|
uint64_t node_id; // ключ для hash-поиска в ll_queue |
|
uint8_t prefix_length; // 0..128 |
|
uint8_t key[17]; // sockaddr-like: {len=17, addr[16]} |
|
uint8_t mask[17]; // sockaddr-like: {len=17, mask[16]} |
|
}; |
|
|
|
#define ROUTE6_DATA_SIZE sizeof(struct ROUTE6_DATA) |
|
#define ROUTE6_NODE_ID_OFF offsetof(struct ROUTE6_DATA, node_id) |
|
#define ROUTE6_KEY_SIZE 17 |
|
|
|
struct ROUTE6_TABLE { |
|
struct radix_node_head *rnh; // radix tree |
|
struct ll_queue *queue; // indexed by node_id for delete |
|
}; |
|
|
|
struct ROUTE6_TABLE *route6_table_create(struct UASYNC *ua); |
|
void route6_table_destroy(struct ROUTE6_TABLE *table); |
|
bool route6_insert(struct ROUTE6_TABLE *table, struct NODEINFO_Q *node); |
|
void route6_delete(struct ROUTE6_TABLE *table, struct NODEINFO_Q *node); |
|
const struct ROUTE6_DATA *route6_lookup(struct ROUTE6_TABLE *table, const uint8_t addr[16]); |
|
|
|
#endif
|
|
|