|
|
|
|
@ -707,6 +707,9 @@ void topo_group_new_conn(struct TOPO_GROUP* group, struct ETCP_CONN* conn) {
|
|
|
|
|
peer_nq->conn_up |= NCONN_DIRECT; |
|
|
|
|
if (conn->instance->topo_sqlite_db) topo_node_sqlite_nodeinfo_updated(conn->instance->topo_sqlite_db, conn->peer_node_id); |
|
|
|
|
} |
|
|
|
|
DEBUG_INFO(DEBUG_CATEGORY_BGP, "topo_group_new_conn: ADD conn=%p peer=%016llx state=%d grp=%016llx ch=%s", |
|
|
|
|
(void*)conn, (unsigned long long)conn->peer_node_id, conn->state, |
|
|
|
|
(unsigned long long)group->group_id, group->channel_id); |
|
|
|
|
topo_group_add_to_senders(group, conn); |
|
|
|
|
|
|
|
|
|
/* BGP — владелец conn: держим NCD-handle (если ещё нет), чтобы соединение
|
|
|
|
|
@ -741,11 +744,11 @@ void topo_group_remove_conn(struct TOPO_GROUP* group, struct ETCP_CONN* conn) {
|
|
|
|
|
bool found_in_list = false; |
|
|
|
|
struct ll_entry* e = group->senders_list->head; |
|
|
|
|
while (e) { struct TOPO_GROUP_CONN_ITEM* item = (struct TOPO_GROUP_CONN_ITEM*)e->data; if (item->conn == conn) { found_in_list = true; break; } e = e->next; } |
|
|
|
|
if (!found_in_list) { DEBUG_WARN(DEBUG_CATEGORY_BGP, "conn already removed or not in list, skipping"); return; } |
|
|
|
|
if (!found_in_list) { DEBUG_WARN(DEBUG_CATEGORY_BGP, "topo_group_remove_conn: conn=%p peer=%016llx state=%d NOT in senders_list (already removed?), skip grp=%016llx ch=%s", (void*)conn, (unsigned long long)conn->peer_node_id, conn->state, (unsigned long long)group->group_id, group->channel_id); return; } |
|
|
|
|
|
|
|
|
|
DEBUG_INFO(DEBUG_CATEGORY_BGP, "senders_remove conn=%p peer=%016llx name='%s' grp=%016llx", |
|
|
|
|
(void*)conn, (unsigned long long)conn->peer_node_id, conn->log_name, |
|
|
|
|
(unsigned long long)group->group_id); |
|
|
|
|
DEBUG_INFO(DEBUG_CATEGORY_BGP, "topo_group_remove_conn: conn=%p peer=%016llx state=%d name='%s' grp=%016llx ch=%s", |
|
|
|
|
(void*)conn, (unsigned long long)conn->peer_node_id, conn->state, conn->log_name, |
|
|
|
|
(unsigned long long)group->group_id, group->channel_id); |
|
|
|
|
|
|
|
|
|
struct ROUTE_TABLE* rt = conn->instance->rt; |
|
|
|
|
int nodes_removed = 0; |
|
|
|
|
@ -797,6 +800,9 @@ void topo_group_remove_conn(struct TOPO_GROUP* group, struct ETCP_CONN* conn) {
|
|
|
|
|
item->handle = NULL; |
|
|
|
|
queue_remove_data(group->senders_list, e); |
|
|
|
|
queue_entry_free(e); |
|
|
|
|
DEBUG_INFO(DEBUG_CATEGORY_BGP, "topo_group_remove_conn: REMOVED conn=%p peer=%016llx from senders_list grp=%016llx ch=%s", |
|
|
|
|
(void*)conn, (unsigned long long)conn->peer_node_id, |
|
|
|
|
(unsigned long long)group->group_id, group->channel_id); |
|
|
|
|
if (h) { |
|
|
|
|
node_conn_direct_close(h); |
|
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_BGP, "topo_group_remove_conn: BGP handle released node=0x%016llx", (unsigned long long)conn->peer_node_id); |
|
|
|
|
|