57 lines
2.8 KiB
C
57 lines
2.8 KiB
C
/**
|
|
* @file route_ping.h
|
|
* @brief Удалённый пинг через BGP-посредника.
|
|
*
|
|
* A просит B пропинговать C и вернуть сводную статистику:
|
|
* A --PING_REQ--> B --ETCP ping--> C
|
|
* A <--PING_RESP-- B (sent/ok/avg_rtt)
|
|
*
|
|
* Промежуточный узел задаётся ЯВНО в to_conn — вызывающий сам выбирает,
|
|
* через кого слать запрос. Автоподбор посредника (nat_check_find_third_node)
|
|
* находится в nat_detection.c, не здесь.
|
|
*/
|
|
#ifndef ROUTE_PING_H
|
|
#define ROUTE_PING_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
#include "nat_detection.h"
|
|
|
|
/** Запросить у to_conn серию пингов на target_ip:target_port.
|
|
* cb вызывается всегда ровно 1 раз:
|
|
* success=1 если хоть один пинг успешен (PONG получен)
|
|
* success=0 при общем таймауте или все пинги провалились
|
|
* @param to_conn промежуточный узел — выбирается вызывающим явно */
|
|
int route_ping_send_req_addr(struct NAT_DETECTION* nd, struct TOPO_GROUP* group,
|
|
struct ETCP_CONN* to_conn,
|
|
uint32_t target_ip, uint16_t target_port,
|
|
uint8_t count, uint16_t interval_ms, uint16_t timeout_ms,
|
|
uint16_t wait_timeout_ms, route_ping_callback_t cb,
|
|
void* arg, const uint8_t* pubkey);
|
|
|
|
/** Отменить все ожидающие ответы (при остановке NAT_DETECTION). */
|
|
void route_ping_destroy_pending(struct NAT_DETECTION* nd);
|
|
|
|
/** Отменить pending для conn (при разрыве/реините соединения). */
|
|
void route_ping_cancel_for_conn(struct NAT_DETECTION* nd, struct ETCP_CONN* conn);
|
|
|
|
/** Отменить pending для конкретного линка (при закрытии линка без разрыва conn). */
|
|
void route_ping_cancel_for_link(struct NAT_DETECTION* nd, struct ETCP_LINK* link);
|
|
|
|
/** Входящий PING_REQ — мы посредник: пингуем цель, шлём PING_RESP. */
|
|
void route_ping_handle_req(struct NAT_DETECTION* nd, struct TOPO_GROUP* group,
|
|
struct ETCP_CONN* from_conn, const uint8_t* data, size_t len);
|
|
|
|
/** Входящий PING_RESP — мы инициатор: находим pending по request_id, вызываем cb. */
|
|
void route_ping_handle_resp(struct NAT_DETECTION* nd,
|
|
struct ETCP_CONN* from_conn, const uint8_t* data, size_t len);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif // ROUTE_PING_H
|