X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Ftcp%2Ftcp_debug.h;h=262d3faae10f9ed1018fae959bf27ea2f804c633;hb=bbe6d110a10d64e5bde21c4b839642acfbf91cbd;hp=a52efe00720e601b3a2b75c9ecd9cb54259bc5b5;hpb=ca1c8f3e782dc68a51aa2792771d9b4aac696ddd;p=vpp.git diff --git a/src/vnet/tcp/tcp_debug.h b/src/vnet/tcp/tcp_debug.h index a52efe00720..262d3faae10 100755 --- a/src/vnet/tcp/tcp_debug.h +++ b/src/vnet/tcp/tcp_debug.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Cisco and/or its affiliates. + * Copyright (c) 2017-2019 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -177,7 +177,7 @@ typedef enum _tcp_dbg_evt { \ ELOG_TYPE_DECLARE (_e) = \ { \ - .format = "close: %d", \ + .format = "close: cidx %d", \ .format_args = "i4", \ }; \ DECLARE_ETD(_tc, _e, 1); \ @@ -201,11 +201,13 @@ typedef enum _tcp_dbg_evt TCP_EVT_INIT_HANDLER(_tc, 0); \ ELOG_TYPE_DECLARE (_e) = \ { \ - .format = "syn-rx: irs %u", \ - .format_args = "i4", \ + .format = "syn-rx: cidx %u sidx %u irs %u", \ + .format_args = "i4i4i4", \ }; \ - DECLARE_ETD(_tc, _e, 1); \ - ed->data[0] = _tc->irs; \ + DECLARE_ETD(_tc, _e, 3); \ + ed->data[0] = _tc->c_c_index; \ + ed->data[1] = _tc->c_s_index; \ + ed->data[2] = _tc->irs; \ TCP_EVT_STATE_CHANGE_HANDLER(_tc); \ } @@ -225,11 +227,12 @@ typedef enum _tcp_dbg_evt { \ ELOG_TYPE_DECLARE (_e) = \ { \ - .format = "delete: %d", \ - .format_args = "i4", \ + .format = "delete: cidx %d sidx %d", \ + .format_args = "i4i4", \ }; \ - DECLARE_ETD(_tc, _e, 1); \ + DECLARE_ETD(_tc, _e, 2); \ ed->data[0] = _tc->c_c_index; \ + ed->data[1] = _tc->c_s_index; \ TCP_EVT_DEALLOC_HANDLER(_tc); \ } @@ -378,7 +381,7 @@ if (_tc) \ .n_enum_strings = 2, \ .enum_strings = { \ "syn", \ - "syn-ack", \ + "synack", \ }, \ }; \ DECLARE_ETD(_tc, _e, 5); \ @@ -388,6 +391,50 @@ if (_tc) \ ed->data[3] = _tc->snd_nxt - _tc->iss; \ ed->data[4] = _tc->rcv_nxt - _tc->irs; \ } + +#define TCP_EVT_TIMER_POP_HANDLER(_tc_index, _timer_id, ...) \ +{ \ + tcp_connection_t *_tc; \ + if (_timer_id == TCP_TIMER_RETRANSMIT_SYN \ + || _timer_id == TCP_TIMER_ESTABLISH_AO) \ + { \ + _tc = tcp_half_open_connection_get (_tc_index); \ + } \ + else \ + { \ + u32 _thread_index = vlib_get_thread_index (); \ + _tc = tcp_connection_get (_tc_index, _thread_index); \ + } \ + ELOG_TYPE_DECLARE (_e) = \ + { \ + .format = "timer-pop: %s cidx %u sidx %u", \ + .format_args = "t4i4i4", \ + .n_enum_strings = 8, \ + .enum_strings = { \ + "retransmit", \ + "delack", \ + "persist", \ + "keep", \ + "waitclose", \ + "retransmit syn", \ + "establish", \ + "establish-ao", \ + }, \ + }; \ + if (_tc) \ + { \ + DECLARE_ETD(_tc, _e, 3); \ + ed->data[0] = _timer_id; \ + ed->data[1] = _tc->c_c_index; \ + ed->data[2] = _tc->c_s_index; \ + } \ + else \ + { \ + clib_warning ("pop %d for unexisting connection %d", _timer_id, \ + _tc_index); \ + } \ +} + #else #define TCP_EVT_SYN_SENT_HANDLER(_tc, ...) #define TCP_EVT_SYNACK_SENT_HANDLER(_tc, ...) @@ -398,6 +445,7 @@ if (_tc) \ #define TCP_EVT_FIN_RCVD_HANDLER(_tc, ...) #define TCP_EVT_RST_RCVD_HANDLER(_tc, ...) #define TCP_EVT_STATE_CHANGE_HANDLER(_tc, ...) +#define TCP_EVT_TIMER_POP_HANDLER(_tc_index, _timer_id, ...) #endif #if TCP_DEBUG_SM > 1 @@ -542,52 +590,11 @@ if (_av > 0) \ ed->data[4] = _tc->rcv_wnd - (_tc->rcv_nxt - _tc->rcv_las); \ } -#define TCP_EVT_TIMER_POP_HANDLER(_tc_index, _timer_id, ...) \ -{ \ - tcp_connection_t *_tc; \ - if (_timer_id == TCP_TIMER_RETRANSMIT_SYN \ - || _timer_id == TCP_TIMER_ESTABLISH) \ - { \ - _tc = tcp_half_open_connection_get (_tc_index); \ - } \ - else \ - { \ - u32 _thread_index = vlib_get_thread_index (); \ - _tc = tcp_connection_get (_tc_index, _thread_index); \ - } \ - ELOG_TYPE_DECLARE (_e) = \ - { \ - .format = "timer-pop: %s (%d)", \ - .format_args = "t4i4", \ - .n_enum_strings = 7, \ - .enum_strings = { \ - "retransmit", \ - "delack", \ - "persist", \ - "keep", \ - "waitclose", \ - "retransmit syn", \ - "establish", \ - }, \ - }; \ - if (_tc) \ - { \ - DECLARE_ETD(_tc, _e, 2); \ - ed->data[0] = _timer_id; \ - ed->data[1] = _timer_id; \ - } \ - else \ - { \ - clib_warning ("pop %d for unexisting connection %d", _timer_id, \ - _tc_index); \ - } \ -} #else #define TCP_EVT_ACK_SENT_HANDLER(_tc, ...) #define TCP_EVT_ACK_RCVD_HANDLER(_tc, ...) #define TCP_EVT_PKTIZE_HANDLER(_tc, ...) #define TCP_EVT_INPUT_HANDLER(_tc, _type, _len, _written, ...) -#define TCP_EVT_TIMER_POP_HANDLER(_tc_index, _timer_id, ...) #endif /* @@ -627,7 +634,7 @@ if (_av > 0) \ #if TCP_DEBUG_CC -#define TCP_EVT_CC_EVT_HANDLER(_tc, _sub_evt, ...) \ +#define TCP_EVT_CC_EVT_PRINT(_tc, _sub_evt) \ { \ ELOG_TYPE_DECLARE (_e) = \ { \ @@ -636,8 +643,8 @@ if (_av > 0) \ .n_enum_strings = 7, \ .enum_strings = { \ "fast-rxt", \ - "rxt-timeout", \ "first-rxt", \ + "rxt-timeout", \ "recovered", \ "congestion", \ "undo", \ @@ -652,6 +659,20 @@ if (_av > 0) \ ed->data[4] = tcp_flight_size (_tc); \ } +#define TCP_EVT_CC_EVT_HANDLER(_tc, _sub_evt, ...) \ +{ \ + if (_tc->snd_una != _tc->iss) \ + TCP_EVT_CC_STAT_PRINT (_tc); \ + if ((_sub_evt <= 1 && TCP_DEBUG_CC > 1) \ + || (_sub_evt > 1 && TCP_DEBUG_CC > 0)) \ + TCP_EVT_CC_EVT_PRINT (_tc, _sub_evt); \ +} +#else +#define TCP_EVT_CC_EVT_HANDLER(_tc, _sub_evt, ...) \ + +#endif + +#if TCP_DEBUG_CC > 1 #define TCP_EVT_CC_RTX_HANDLER(_tc, offset, n_bytes, ...) \ { \ ELOG_TYPE_DECLARE (_e) = \ @@ -772,7 +793,6 @@ if (TCP_DEBUG_CC > 1) \ #define TCP_EVT_DUPACK_SENT_HANDLER(_tc, _btcp, ...) #define TCP_EVT_DUPACK_RCVD_HANDLER(_tc, ...) #define TCP_EVT_CC_PACK_HANDLER(_tc, ...) -#define TCP_EVT_CC_EVT_HANDLER(_tc, _sub_evt, ...) #define TCP_EVT_CC_SCOREBOARD_HANDLER(_tc, ...) #define TCP_EVT_CC_SACKS_HANDLER(_tc, ...) #define TCP_EVT_CC_INPUT_HANDLER(_tc, _len, _written, ...) @@ -785,42 +805,58 @@ if (TCP_DEBUG_CC > 1) \ #define STATS_INTERVAL 1 -#define TCP_EVT_CC_RTO_STAT_HANDLER(_tc, ...) \ -{ \ -if (_tc->c_cc_stat_tstamp + STATS_INTERVAL < tcp_time_now()) \ +#define tcp_cc_time_to_print_stats(_tc) \ + _tc->c_cc_stat_tstamp + STATS_INTERVAL < tcp_time_now() \ + || tcp_in_fastrecovery (_tc) \ + +#define TCP_EVT_CC_RTO_STAT_PRINT(_tc) \ { \ ELOG_TYPE_DECLARE (_e) = \ { \ - .format = "rcv_stat: rto %u srtt %u rttvar %u ", \ - .format_args = "i4i4i4", \ + .format = "rcv_stat: rto %u srtt %u mrtt-us %u rttvar %u", \ + .format_args = "i4i4i4i4", \ }; \ - DECLARE_ETD(_tc, _e, 3); \ + DECLARE_ETD(_tc, _e, 4); \ ed->data[0] = _tc->rto; \ ed->data[1] = _tc->srtt; \ - ed->data[2] = _tc->rttvar; \ -} \ + ed->data[2] = (u32) (_tc->mrtt_us * 1e6); \ + ed->data[3] = _tc->rttvar; \ } -#define TCP_EVT_CC_SND_STAT_HANDLER(_tc, ...) \ + +#define TCP_EVT_CC_RTO_STAT_HANDLER(_tc, ...) \ { \ -if (_tc->c_cc_stat_tstamp + STATS_INTERVAL < tcp_time_now()) \ +if (tcp_cc_time_to_print_stats (_tc)) \ +{ \ + TCP_EVT_CC_RTO_STAT_PRINT (_tc); \ + _tc->c_cc_stat_tstamp = tcp_time_now (); \ +} \ +} + +#define TCP_EVT_CC_SND_STAT_PRINT(_tc) \ { \ ELOG_TYPE_DECLARE (_e) = \ { \ - .format = "snd_stat: dack %u sacked %u lost %u out %u rxt %u", \ + .format = "snd_stat: cc_space %u sacked %u lost %u out %u rxt %u", \ .format_args = "i4i4i4i4i4", \ }; \ DECLARE_ETD(_tc, _e, 5); \ - ed->data[0] = _tc->rcv_dupacks; \ + ed->data[0] = tcp_available_cc_snd_space (_tc); \ ed->data[1] = _tc->sack_sb.sacked_bytes; \ ed->data[2] = _tc->sack_sb.lost_bytes; \ ed->data[3] = tcp_bytes_out (_tc); \ ed->data[3] = _tc->snd_rxt_bytes; \ -} \ } -#define TCP_EVT_CC_STAT_HANDLER(_tc, ...) \ +#define TCP_EVT_CC_SND_STAT_HANDLER(_tc, ...) \ +{ \ +if (tcp_cc_time_to_print_stats (_tc)) \ { \ -if (_tc->c_cc_stat_tstamp + STATS_INTERVAL < tcp_time_now()) \ + TCP_EVT_CC_SND_STAT_PRINT(_tc); \ + _tc->c_cc_stat_tstamp = tcp_time_now (); \ +} \ +} + +#define TCP_EVT_CC_STAT_PRINT(_tc) \ { \ ELOG_TYPE_DECLARE (_e) = \ { \ @@ -833,12 +869,21 @@ if (_tc->c_cc_stat_tstamp + STATS_INTERVAL < tcp_time_now()) \ ed->data[2] = tcp_snd_space (_tc); \ ed->data[3] = _tc->ssthresh; \ ed->data[4] = _tc->snd_wnd; \ - TCP_EVT_CC_RTO_STAT_HANDLER (_tc); \ + TCP_EVT_CC_RTO_STAT_PRINT (_tc); \ + TCP_EVT_CC_SND_STAT_PRINT (_tc); \ +} + +#define TCP_EVT_CC_STAT_HANDLER(_tc, ...) \ +{ \ +if (tcp_cc_time_to_print_stats (_tc)) \ +{ \ + TCP_EVT_CC_STAT_PRINT (_tc); \ _tc->c_cc_stat_tstamp = tcp_time_now(); \ } \ } #else #define TCP_EVT_CC_STAT_HANDLER(_tc, ...) +#define TCP_EVT_CC_STAT_PRINT(_tc) #endif /*