@ -42,6 +42,7 @@ struct route_ping_pending {
void * arg ;
void * arg ;
void * timeout_timer ;
void * timeout_timer ;
uint8_t cancelled ;
uint8_t cancelled ;
struct ETCP_CONN * via_conn ; // через кого отправили запрос (third_conn)
} ;
} ;
// если удаленный узел долго не отвечает - вызываем коллбэк по таймауту
// если удаленный узел долго не отвечает - вызываем коллбэк по таймауту
@ -117,12 +118,12 @@ void route_ping_cancel_for_conn(struct ROUTE_BGP* bgp, struct ETCP_CONN* conn) {
struct route_ping_pending * p = * cur ;
struct route_ping_pending * p = * cur ;
struct nat_check_arg * na = ( struct nat_check_arg * ) p - > arg ;
struct nat_check_arg * na = ( struct nat_check_arg * ) p - > arg ;
DEBUG_DEBUG ( DEBUG_CATEGORY_BGP , " checking pending req_id=%016llx arg=%p na=%p link=%p link->etcp=%s " ,
DEBUG_DEBUG ( DEBUG_CATEGORY_BGP , " checking pending req_id=%016llx via=%s link->etcp=%s " ,
( unsigned long long ) p - > request_id , p - > arg , na ,
( unsigned long long ) p - > request_id ,
na ? na - > link : NULL ,
p - > via_conn ? p - > via_conn - > log_name : " NULL " ,
( na & & na - > link & & na - > link - > etcp ) ? na - > link - > etcp - > log_name : " NULL " ) ;
( na & & na - > link & & na - > link - > etcp ) ? na - > link - > etcp - > log_name : " NULL " ) ;
if ( na & & na - > link & & na - > link - > etcp = = conn ) {
if ( ( na & & na - > link & & na - > link - > etcp = = conn ) | | p - > via_conn = = conn ) {
* cur = p - > next ;
* cur = p - > next ;
if ( p - > timeout_timer ) {
if ( p - > timeout_timer ) {
uasync_cancel_timeout ( bgp - > instance - > ua , p - > timeout_timer ) ;
uasync_cancel_timeout ( bgp - > instance - > ua , p - > timeout_timer ) ;
@ -200,15 +201,10 @@ int route_ping_send_req_addr(struct ROUTE_BGP* bgp, struct ETCP_CONN* to_conn,
pending - > request_id = req_pkt - > request_id ;
pending - > request_id = req_pkt - > request_id ;
pending - > callback = cb ;
pending - > callback = cb ;
pending - > arg = arg ;
pending - > arg = arg ;
pending - > via_conn = to_conn ;
pending - > next = bgp - > ping_pending ;
pending - > next = bgp - > ping_pending ;
bgp - > ping_pending = pending ;
bgp - > ping_pending = pending ;
struct nat_check_arg * na_dbg = ( struct nat_check_arg * ) arg ;
DEBUG_DEBUG ( DEBUG_CATEGORY_BGP , " pending created req_id=%016llx arg=%p link=%p link->etcp=%s " ,
( unsigned long long ) pending - > request_id , pending - > arg ,
na_dbg ? na_dbg - > link : NULL ,
( na_dbg & & na_dbg - > link & & na_dbg - > link - > etcp ) ? na_dbg - > link - > etcp - > log_name : " NULL " ) ;
pending - > timeout_timer = uasync_set_timeout ( bgp - > instance - > ua , wait_timeout_ms * 10 , pending , route_ping_pending_timeout , " route_ping " ) ;
pending - > timeout_timer = uasync_set_timeout ( bgp - > instance - > ua , wait_timeout_ms * 10 , pending , route_ping_pending_timeout , " route_ping " ) ;
DEBUG_INFO ( DEBUG_CATEGORY_BGP , " request_id=%016llx ip=%s port=%u pubkey=%s " ,
DEBUG_INFO ( DEBUG_CATEGORY_BGP , " request_id=%016llx ip=%s port=%u pubkey=%s " ,