@ -103,12 +103,26 @@ void route_ping_handle_resp(struct ROUTE_BGP* bgp, struct ETCP_CONN* from_conn,
void route_ping_cancel_for_conn ( struct ROUTE_BGP * bgp , struct ETCP_CONN * conn ) {
if ( ! bgp | | ! conn ) return ;
struct route_ping_pending * * cur = & bgp - > ping_pending ;
if ( ! bgp - > ping_pending ) {
DEBUG_DEBUG ( DEBUG_CATEGORY_BGP , " cancel_for_conn: ping_pending is NULL for %s " , conn - > log_name ) ;
return ;
}
DEBUG_DEBUG ( DEBUG_CATEGORY_BGP , " cancel_for_conn: checking pending for %s " , conn - > log_name ) ;
int cancelled = 0 ;
struct route_ping_pending * * cur = & bgp - > ping_pending ;
while ( * cur ) {
struct route_ping_pending * p = * cur ;
struct nat_check_arg * na = ( struct nat_check_arg * ) p - > arg ;
if ( na & & na - > link & & na - > link - > conn = = conn ) {
DEBUG_DEBUG ( DEBUG_CATEGORY_BGP , " checking pending req_id=%016llx arg=%p na=%p link=%p link->etcp=%s " ,
( unsigned long long ) p - > request_id , p - > arg , na ,
na ? na - > link : NULL ,
( na & & na - > link & & na - > link - > etcp ) ? na - > link - > etcp - > log_name : " NULL " ) ;
if ( na & & na - > link & & na - > link - > etcp = = conn ) {
* cur = p - > next ;
if ( p - > timeout_timer ) {
uasync_cancel_timeout ( bgp - > instance - > ua , p - > timeout_timer ) ;
@ -118,13 +132,15 @@ void route_ping_cancel_for_conn(struct ROUTE_BGP* bgp, struct ETCP_CONN* conn) {
na - > link = NULL ;
u_free ( p ) ;
cancelled + + ;
DEBUG_INFO ( DEBUG_CATEGORY_BGP , " cancel_for_conn: cancelled req_id=%016llx " ,
( unsigned long long ) p - > request_id ) ;
} else {
cur = & ( * cur ) - > next ;
}
}
if ( cancelled > 0 ) {
DEBUG_INFO ( DEBUG_CATEGORY_BGP , " Cancelled %d pending NAT checks for conn %s " ,
cancelled , conn - > log_name ) ;
if ( cancelled = = 0 ) {
DEBUG_DEBUG ( DEBUG_CATEGORY_BGP , " cancel_for_conn: no pending found for %s " , conn - > log_name ) ;
}
}
@ -187,6 +203,12 @@ int route_ping_send_req_addr(struct ROUTE_BGP* bgp, struct ETCP_CONN* to_conn,
pending - > next = bgp - > ping_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 " ) ;
DEBUG_INFO ( DEBUG_CATEGORY_BGP , " request_id=%016llx ip=%s port=%u pubkey=%s " ,