@ -60,7 +60,7 @@ struct test_state {
int passed ;
int passed ;
} ;
} ;
static inline uint64_t get_time _us( void ) {
static inline uint64_t now _us( void ) {
struct timeval tv ;
struct timeval tv ;
gettimeofday ( & tv , NULL ) ;
gettimeofday ( & tv , NULL ) ;
return ( uint64_t ) tv . tv_sec * 1000000ULL + tv . tv_usec ;
return ( uint64_t ) tv . tv_sec * 1000000ULL + tv . tv_usec ;
@ -75,7 +75,7 @@ static void send_one_packet(struct test_state* st, uint32_t seq) {
uint16_t data_len = MIN_PKT_SIZE + ( rand ( ) % ( max_data_len - MIN_PKT_SIZE + 1 ) ) ;
uint16_t data_len = MIN_PKT_SIZE + ( rand ( ) % ( max_data_len - MIN_PKT_SIZE + 1 ) ) ;
pkt - > seq_num = seq ;
pkt - > seq_num = seq ;
pkt - > send_time_us = get_time _us( ) ;
pkt - > send_time_us = now _us( ) ;
pkt - > data_len = data_len ;
pkt - > data_len = data_len ;
/* Заполняем данные */
/* Заполняем данные */
@ -95,7 +95,7 @@ static void send_one_packet(struct test_state* st, uint32_t seq) {
/* B -> dummynet (backward) */
/* B -> dummynet (backward) */
pkt - > seq_num = seq + 10000 ; /* Отличаем пакеты от B */
pkt - > seq_num = seq + 10000 ; /* Отличаем пакеты от B */
pkt - > send_time_us = get_time _us( ) ;
pkt - > send_time_us = now _us( ) ;
socket_sendto ( st - > sock_b , buf , sizeof ( * pkt ) + data_len ,
socket_sendto ( st - > sock_b , buf , sizeof ( * pkt ) + data_len ,
( struct sockaddr * ) & dest , sizeof ( dest ) ) ;
( struct sockaddr * ) & dest , sizeof ( dest ) ) ;
}
}
@ -136,7 +136,7 @@ static void recv_callback_a(socket_t sock, void* arg) {
if ( n < ( ssize_t ) sizeof ( struct test_pkt ) ) return ;
if ( n < ( ssize_t ) sizeof ( struct test_pkt ) ) return ;
struct test_pkt * pkt = ( struct test_pkt * ) buf ;
struct test_pkt * pkt = ( struct test_pkt * ) buf ;
uint64_t now = get_time _us( ) ;
uint64_t now = now _us( ) ;
uint64_t latency = now - pkt - > send_time_us ;
uint64_t latency = now - pkt - > send_time_us ;
st - > recv_a + + ;
st - > recv_a + + ;
@ -155,7 +155,7 @@ static void recv_callback_b(socket_t sock, void* arg) {
if ( n < ( ssize_t ) sizeof ( struct test_pkt ) ) return ;
if ( n < ( ssize_t ) sizeof ( struct test_pkt ) ) return ;
struct test_pkt * pkt = ( struct test_pkt * ) buf ;
struct test_pkt * pkt = ( struct test_pkt * ) buf ;
uint64_t now = get_time _us( ) ;
uint64_t now = now _us( ) ;
uint64_t latency = now - pkt - > send_time_us ;
uint64_t latency = now - pkt - > send_time_us ;
st - > recv_b + + ;
st - > recv_b + + ;
@ -262,7 +262,7 @@ static int run_scenario(const char* name,
st . send_timer = uasync_set_timeout ( st . ua , 1 , & st , send_timer_callback , " test_dummynet " ) ;
st . send_timer = uasync_set_timeout ( st . ua , 1 , & st , send_timer_callback , " test_dummynet " ) ;
/* Умное ожидание завершения: ранний выход при готовности + watchdog */
/* Умное ожидание завершения: ранний выход при готовности + watchdog */
uint64_t start_time = get_time _us( ) ;
uint64_t start_time = now _us( ) ;
uint64_t watchdog_start = 0 ; /* Стартует после отправки всех пакетов */
uint64_t watchdog_start = 0 ; /* Стартует после отправки всех пакетов */
int watchdog_active = 0 ;
int watchdog_active = 0 ;
const uint64_t WATCHDOG_US = 3000000ULL ; /* 3 секунды максимум после отправки */
const uint64_t WATCHDOG_US = 3000000ULL ; /* 3 секунды максимум после отправки */
@ -273,7 +273,7 @@ static int run_scenario(const char* name,
while ( 1 ) {
while ( 1 ) {
uasync_poll ( st . ua , 1 ) ; /* 0.1ms timeout - чаще для обработки таймеров */
uasync_poll ( st . ua , 1 ) ; /* 0.1ms timeout - чаще для обработки таймеров */
uint64_t now = get_time _us( ) ;
uint64_t now = now _us( ) ;
/* Активируем watchdog когда все пакеты отправлены */
/* Активируем watchdog когда все пакеты отправлены */
if ( ! watchdog_active & & st . next_seq > = PKT_COUNT ) {
if ( ! watchdog_active & & st . next_seq > = PKT_COUNT ) {