Browse Source

conn_mgr: split handler into router (routed) and direct paths

conn_mgr_router_recv_handler (etcp_router_bind): DIRECT_REQ, INTERM_EXCHANGE, DISCONNECT
conn_mgr_direct_recv_handler (etcp_bind): INVITE_INFO_REQ, INVITE_INFO_RESP
Each transport path now has its own handler — no more mixed concerns.
topo_upd
evgeny 2 months ago
parent
commit
4c1ea11022
  1. 1
      src/routing_layer/conn_mgr.h
  2. 12
      src/routing_layer/conn_mgr_core.c
  3. 2
      src/utun_instance.c

1
src/routing_layer/conn_mgr.h

@ -76,6 +76,7 @@ typedef void (*conn_mgr_cb_t)(struct CONN_MGR_HANDLE* h,
struct CONN_MGR* conn_mgr_init(struct TOPO_GROUP* group);
void conn_mgr_destroy(struct CONN_MGR* mgr);
void conn_mgr_direct_recv_handler(struct ETCP_CONN* conn, struct ll_entry* entry);
void conn_mgr_router_recv_handler(struct ETCP_CONN* conn, struct ll_entry* entry);
/* ═══════ единая точка входа ═══════ */

12
src/routing_layer/conn_mgr_core.c

@ -726,8 +726,16 @@ void conn_mgr_router_recv_handler(struct ETCP_CONN* conn, struct ll_entry* entry
case CM_SUBCMD_INTERM_EXCHANGE_RESP: if (mgr) cm_handle_interm_exchange_resp(mgr, d, len); break;
case CM_SUBCMD_INTERM_SELECTED: if (mgr) cm_handle_interm_selected(mgr, d, len); break;
case CM_SUBCMD_DISCONNECT: if (len >= CM_DISCONNECT_SIZE && mgr) cm_handle_disconnect(mgr, ((struct CM_DISCONNECT*)d)->node_id); break;
case CM_SUBCMD_INVITE_INFO_REQ: if (mgr && len >= sizeof(struct CM_INVITE_REQ)) cm_handle_invite_info_req(mgr, conn, d, len); break;
case CM_SUBCMD_INVITE_INFO_RESP: if (mgr) cm_handle_invite_info_resp(mgr, conn, d, len); break;
}
}
void conn_mgr_direct_recv_handler(struct ETCP_CONN* conn, struct ll_entry* entry) {
if (!entry || !entry->dgram || entry->len < 3) return;
uint8_t* d = entry->dgram + 1; size_t len = entry->len - 1; uint8_t sub = d[1];
struct CONN_MGR* mgr = conn->instance->conn_mgr;
switch (sub) {
case CM_SUBCMD_INVITE_INFO_REQ: if (mgr && len >= sizeof(struct CM_INVITE_REQ)) cm_handle_invite_info_req(mgr, conn, d, len); break;
case CM_SUBCMD_INVITE_INFO_RESP: if (mgr) cm_handle_invite_info_resp(mgr, conn, d, len); break;
}
}

2
src/utun_instance.c

@ -207,7 +207,7 @@ static int instance_init_common(struct UTUN_INSTANCE* instance, struct UASYNC* u
} else {
DEBUG_INFO(DEBUG_CATEGORY_BGP, "BGP module initialized");
etcp_router_bind(instance, ETCP_RT_ID_CONN_MGR, conn_mgr_router_recv_handler);
etcp_bind(instance, ETCP_RT_ID_CONN_MGR, conn_mgr_router_recv_handler);
etcp_bind(instance, ETCP_RT_ID_CONN_MGR, conn_mgr_direct_recv_handler);
struct TOPO_GROUP* g = topo_groups_get_default(instance->topo_groups);
if (instance->rt && g && g->local_node) {
topo_group_update_my_nodeinfo(instance, g);

Loading…
Cancel
Save