GUI: поле действия и кнопка Send для отправки команд в utun
- Добавлен ETCPMON_CMD_ACTION в протокол (32 байта текст) - В GUI добавлено поле ввода и кнопка Send правее блока Sockets - Добавлен etcpmon_client_send_action для отправки команд - Обработка action 'nat' в control_server: запускает NAT check для всех линков - Сделана route_bgp_start_link_nat_check не-static - Добавлена route_bgp_request_nat_check_all - Исправлен баг route_ping.c (request_id -> nonce) - Исправлена линковка tests/Makefile.am
This commit is contained in:
1 parent
5b0a743e02
commit
57dba26e7c
10 files changed
+125
-5
No files matched your search
+13
-1
@@ -613,7 +613,7 @@ static void handle_client_data(struct control_server* server, struct control_cli
|
||||
close_client(server, client);
|
||||
return;
|
||||
}
|
||||
if (hdr->type < ETCPMON_CMD_LIST_CONN || hdr->type > ETCPMON_CMD_LIST_SOCKETS) {
|
||||
if (hdr->type < ETCPMON_CMD_LIST_CONN || hdr->type > ETCPMON_CMD_ACTION) {
|
||||
DEBUG_ERROR(DEBUG_CATEGORY_CONTROL, "Invalid command type from client: 0x%02X", hdr->type);
|
||||
close_client(server, client);
|
||||
return;
|
||||
@@ -684,6 +684,18 @@ static void handle_client_data(struct control_server* server, struct control_cli
|
||||
send_socket_list(server, client, req_seq);
|
||||
break;
|
||||
|
||||
case ETCPMON_CMD_ACTION:
|
||||
if (payload_size >= sizeof(struct etcpmon_cmd_action)) {
|
||||
struct etcpmon_cmd_action* cmd = (struct etcpmon_cmd_action*)payload;
|
||||
if (strncmp(cmd->action, "nat", 3) == 0) {
|
||||
DEBUG_INFO(DEBUG_CATEGORY_CONTROL, "Action 'nat' received, requesting NAT check for all links");
|
||||
route_bgp_request_nat_check_all(server->instance->bgp);
|
||||
} else {
|
||||
DEBUG_WARN(DEBUG_CATEGORY_CONTROL, "Unknown action received: '%s'", cmd->action);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case ETCPMON_CMD_DISCONNECT:
|
||||
if (server->log_file) {
|
||||
fprintf(server->log_file, "%llu: [LOG] Client requested disconnect\n",
|
||||
|
||||
+18
-2
@@ -113,7 +113,7 @@ static void route_bgp_broadcast_withdraw(struct ROUTE_BGP* bgp, uint64_t node_id
|
||||
// Приём пакетов
|
||||
// ============================================================================
|
||||
|
||||
static void route_bgp_start_link_nat_check(struct ROUTE_BGP* bgp, struct ETCP_LINK* link);
|
||||
void route_bgp_start_link_nat_check(struct ROUTE_BGP* bgp, struct ETCP_LINK* link);
|
||||
static void route_bgp_handle_nat_info(struct ROUTE_BGP* bgp, struct ETCP_CONN* from_conn, const uint8_t* data, size_t len);
|
||||
static void route_bgp_handle_nat_check_req(struct ROUTE_BGP* bgp, struct ETCP_CONN* from_conn, const uint8_t* data, size_t len);
|
||||
|
||||
@@ -596,7 +596,7 @@ static void route_bgp_extract_nat_addr(struct ETCP_CONN* conn, uint32_t* nat_ip,
|
||||
}
|
||||
}
|
||||
|
||||
static void route_bgp_start_link_nat_check(struct ROUTE_BGP* bgp, struct ETCP_LINK* link) {// проверяем тип нат для линка link
|
||||
void route_bgp_start_link_nat_check(struct ROUTE_BGP* bgp, struct ETCP_LINK* link) {// проверяем тип нат для линка link
|
||||
if (!bgp || !link || !link->conn || !link->etcp) return;
|
||||
if (link->nat_check_status == NAT_CHECK_IN_PROGRESS) return;
|
||||
// Find third node to send ping through
|
||||
@@ -1095,3 +1095,19 @@ void route_bgp_send_nat_check_req(struct ETCP_CONN* conn, uint8_t socket_id) {
|
||||
ip_to_str(&pkt->interface_ip, AF_INET).str,
|
||||
(unsigned)ntohs(pkt->interface_port));
|
||||
}
|
||||
|
||||
void route_bgp_request_nat_check_all(struct ROUTE_BGP* bgp) {
|
||||
if (!bgp || !bgp->instance) return;
|
||||
int count = 0;
|
||||
struct ETCP_CONN* conn = bgp->instance->connections;
|
||||
while (conn) {
|
||||
struct ETCP_LINK* link = conn->links;
|
||||
while (link) {
|
||||
route_bgp_start_link_nat_check(bgp, link);
|
||||
count++;
|
||||
link = link->next;
|
||||
}
|
||||
conn = conn->next;
|
||||
}
|
||||
DEBUG_INFO(DEBUG_CATEGORY_BGP, "NAT check requested for all links, count=%d", count);
|
||||
}
|
||||
@@ -195,4 +195,9 @@ void route_bgp_send_nat_check_req(struct ETCP_CONN* conn, uint8_t socket_id);
|
||||
*/
|
||||
void route_bgp_set_nat_check_local(struct ROUTE_BGP* bgp, int allow);
|
||||
|
||||
/**
|
||||
* @brief Запускает NAT check для всех линков всех соединений.
|
||||
*/
|
||||
void route_bgp_request_nat_check_all(struct ROUTE_BGP* bgp);
|
||||
|
||||
#endif // ROUTE_BGP_H
|
||||
+1
-1
@@ -227,7 +227,7 @@ static void route_ping_single_cb(int success,
|
||||
ctx->sum_rtt += rtt;
|
||||
}
|
||||
|
||||
DEBUG_INFO(DEBUG_CATEGORY_BGP, "ping response id=%zu", request_id);
|
||||
DEBUG_INFO(DEBUG_CATEGORY_BGP, "ping response nonce=%llu", (unsigned long long)nonce);
|
||||
|
||||
/* Если ещё не все пакеты отправлены — сразу шлём следующий */
|
||||
if (ctx->count_sent < ctx->count_total) {
|
||||
|
||||
Reference in new issue
Block a user