|
|
|
|
@ -207,10 +207,10 @@ bool route_insert(struct ROUTE_TABLE *table, struct NODEINFO_Q *node) {
|
|
|
|
|
struct ROUTE_ENTRY *e = &table->entries[pos]; |
|
|
|
|
e->network = network; |
|
|
|
|
e->prefix_length = prefix_length; |
|
|
|
|
e->v_node_info = node; // все префиксы узла ссылаются на один объект
|
|
|
|
|
e->v_node_info = node; |
|
|
|
|
|
|
|
|
|
table->count++; |
|
|
|
|
table->stats.learned_routes++; |
|
|
|
|
if (node && node->node.hop_count == 0) table->stats.local_routes++; else table->stats.learned_routes++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
DEBUG_INFO(DEBUG_CATEGORY_ROUTING, "route_insert: added %zu route(s) for node_info=%p", |
|
|
|
|
@ -227,13 +227,12 @@ void route_delete(struct ROUTE_TABLE *table, struct NODEINFO_Q *node) {
|
|
|
|
|
size_t removed = 0; |
|
|
|
|
while (i < table->count) { |
|
|
|
|
if (table->entries[i].v_node_info == node) { |
|
|
|
|
// v_node_info — внешний, не освобождаем
|
|
|
|
|
if (i < table->count - 1) { |
|
|
|
|
memmove(&table->entries[i], &table->entries[i + 1], |
|
|
|
|
(table->count - i - 1) * sizeof(struct ROUTE_ENTRY)); |
|
|
|
|
} |
|
|
|
|
table->count--; |
|
|
|
|
table->stats.learned_routes--; |
|
|
|
|
if (node && node->node.hop_count == 0) table->stats.local_routes--; else table->stats.learned_routes--; |
|
|
|
|
removed++; |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|