- return tcp_connection_open (tep);
-}
-
-const char *tcp_dbg_evt_str[] = {
-#define _(sym, str) str,
- foreach_tcp_dbg_evt
-#undef _
-};
-
-const char *tcp_fsm_states[] = {
-#define _(sym, str) str,
- foreach_tcp_fsm_state
-#undef _
-};
-
-u8 *
-format_tcp_state (u8 * s, va_list * args)
-{
- u32 state = va_arg (*args, u32);
-
- if (state < TCP_N_STATES)
- s = format (s, "%s", tcp_fsm_states[state]);
- else
- s = format (s, "UNKNOWN (%d (0x%x))", state, state);
- return s;
-}
-
-const char *tcp_conn_timers[] = {
-#define _(sym, str) str,
- foreach_tcp_timer
-#undef _
-};
-
-u8 *
-format_tcp_timers (u8 * s, va_list * args)
-{
- tcp_connection_t *tc = va_arg (*args, tcp_connection_t *);
- int i, last = -1;
-
- for (i = 0; i < TCP_N_TIMERS; i++)
- if (tc->timers[i] != TCP_TIMER_HANDLE_INVALID)
- last = i;
-
- s = format (s, "[");
- for (i = 0; i < last; i++)
- {
- if (tc->timers[i] != TCP_TIMER_HANDLE_INVALID)
- s = format (s, "%s,", tcp_conn_timers[i]);
- }
-
- if (last >= 0)
- s = format (s, "%s]", tcp_conn_timers[i]);
- else
- s = format (s, "]");
-
- return s;
-}
-
-u8 *
-format_tcp_congestion_status (u8 * s, va_list * args)
-{
- tcp_connection_t *tc = va_arg (*args, tcp_connection_t *);
- if (tcp_in_recovery (tc))
- s = format (s, "recovery");
- else if (tcp_in_fastrecovery (tc))
- s = format (s, "fastrecovery");
- else
- s = format (s, "none");
- return s;
-}
-
-u8 *
-format_tcp_vars (u8 * s, va_list * args)
-{
- tcp_connection_t *tc = va_arg (*args, tcp_connection_t *);
- s = format (s, " snd_una %u snd_nxt %u snd_una_max %u",
- tc->snd_una - tc->iss, tc->snd_nxt - tc->iss,
- tc->snd_una_max - tc->iss);
- s = format (s, " rcv_nxt %u rcv_las %u\n",
- tc->rcv_nxt - tc->irs, tc->rcv_las - tc->irs);
- s = format (s, " snd_wnd %u rcv_wnd %u snd_wl1 %u snd_wl2 %u\n",
- tc->snd_wnd, tc->rcv_wnd, tc->snd_wl1 - tc->irs,
- tc->snd_wl2 - tc->iss);
- s = format (s, " flight size %u send space %u rcv_wnd_av %d\n",
- tcp_flight_size (tc), tcp_available_output_snd_space (tc),
- tcp_rcv_wnd_available (tc));
- s = format (s, " cong %U ", format_tcp_congestion_status, tc);
- s = format (s, "cwnd %u ssthresh %u rtx_bytes %u bytes_acked %u\n",
- tc->cwnd, tc->ssthresh, tc->snd_rxt_bytes, tc->bytes_acked);
- s = format (s, " prev_ssthresh %u snd_congestion %u dupack %u",
- tc->prev_ssthresh, tc->snd_congestion - tc->iss,
- tc->rcv_dupacks);
- s = format (s, " limited_transmit %u\n", tc->limited_transmit - tc->iss);
- s = format (s, " tsecr %u tsecr_last_ack %u\n", tc->rcv_opts.tsecr,
- tc->tsecr_last_ack);
- s = format (s, " rto %u rto_boff %u srtt %u rttvar %u rtt_ts %u ", tc->rto,
- tc->rto_boff, tc->srtt, tc->rttvar, tc->rtt_ts);
- s = format (s, "rtt_seq %u\n", tc->rtt_seq);
- s = format (s, " tsval_recent %u tsval_recent_age %u\n", tc->tsval_recent,
- tcp_time_now () - tc->tsval_recent_age);
- s = format (s, " scoreboard: %U\n", format_tcp_scoreboard, &tc->sack_sb,
- tc);
- if (vec_len (tc->snd_sacks))
- s = format (s, " sacks tx: %U\n", format_tcp_sacks, tc);
-
- return s;
-}
-
-u8 *
-format_tcp_connection_id (u8 * s, va_list * args)
-{
- tcp_connection_t *tc = va_arg (*args, tcp_connection_t *);
- if (!tc)
- return s;
- if (tc->c_is_ip4)
- {
- s = format (s, "[#%d][%s] %U:%d->%U:%d", tc->c_thread_index, "T",
- format_ip4_address, &tc->c_lcl_ip4,
- clib_net_to_host_u16 (tc->c_lcl_port), format_ip4_address,
- &tc->c_rmt_ip4, clib_net_to_host_u16 (tc->c_rmt_port));
- }
- else
- {
- s = format (s, "[#%d][%s] %U:%d->%U:%d", tc->c_thread_index, "T",
- format_ip6_address, &tc->c_lcl_ip6,
- clib_net_to_host_u16 (tc->c_lcl_port), format_ip6_address,
- &tc->c_rmt_ip6, clib_net_to_host_u16 (tc->c_rmt_port));
- }
-
- return s;
-}
-
-u8 *
-format_tcp_connection (u8 * s, va_list * args)
-{
- tcp_connection_t *tc = va_arg (*args, tcp_connection_t *);
- u32 verbose = va_arg (*args, u32);
-
- if (!tc)
- return s;
- s = format (s, "%-50U", format_tcp_connection_id, tc);
- if (verbose)
- {
- s = format (s, "%-15U", format_tcp_state, tc->state);
- if (verbose > 1)
- s = format (s, " %U\n%U", format_tcp_timers, tc, format_tcp_vars, tc);
- }
-
- return s;
-}
-
-u8 *
-format_tcp_session (u8 * s, va_list * args)
-{
- u32 tci = va_arg (*args, u32);
- u32 thread_index = va_arg (*args, u32);
- u32 verbose = va_arg (*args, u32);
- tcp_connection_t *tc;