FD.io VPP  v21.06-3-gbb25fbf28
Vector Packet Processing
tcp_debug.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include <vnet/tcp/tcp_debug.h>
16 
18 
19 void
21 {
23  u32 fl_len, track_index;
24 
25  fl_len = vec_len (tdm->free_track_indices);
26  if (fl_len)
27  {
28  track_index = tdm->free_track_indices[fl_len - 1];
29  _vec_len (tdm->free_track_indices) -= 1;
30  et->track_index_plus_one = track_index + 1;
31  }
32  else
34 }
35 
36 static const char *tcp_evt_grp_str[] = {
37 #define _(sym, str) str,
39 #undef _
40 };
41 
42 static void
44 {
47  int i = 0;
48 
49  vlib_cli_output (vm, "%-10s%-30s%-10s", "Index", "Group", "Level");
50 
51  for (i = 0; i < TCP_EVT_N_GRP; i++)
52  vlib_cli_output (vm, "%-10d%-30s%-10d", i, tcp_evt_grp_str[i],
53  tdm->grp_dbg_lvl[i]);
54 }
55 
56 static void
58 {
60  int i, have_enabled = 0;
61 
62  if (tdm->grp_dbg_lvl[TCP_EVT_GRP_LC])
63  return;
64 
65  for (i = 0; i < TCP_EVT_N_GRP; i++)
66  {
67  if (tdm->grp_dbg_lvl[i])
68  {
69  have_enabled = 1;
70  break;
71  }
72  }
73 
74  /* Make sure LC is enabled for track initialization */
75  if (have_enabled)
76  tdm->grp_dbg_lvl[TCP_EVT_GRP_LC] = 1;
77 }
78 
79 static clib_error_t *
81  vlib_cli_command_t * cmd)
82 {
83  unformat_input_t _line_input, *line_input = &_line_input;
85  u32 group = ~0, level = ~0;
86  clib_error_t *error = 0;
87  u8 is_show = 0;
88 
89  if (!TCP_DEBUG_ALWAYS)
90  return clib_error_return (0, "must compile with TCP_DEBUG_ALWAYS set");
91 
92  if (!unformat_user (input, unformat_line_input, line_input))
93  return clib_error_return (0, "expected enable | disable");
94 
95  while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
96  {
97  if (unformat (line_input, "show"))
98  is_show = 1;
99  else if (unformat (line_input, "group %d", &group))
100  ;
101  else if (unformat (line_input, "level %d", &level))
102  ;
103  else
104  {
105  error = clib_error_return (0, "unknown input `%U'",
106  format_unformat_error, line_input);
107  goto done;
108  }
109  }
110 
111  if (is_show)
112  {
114  goto done;
115  }
116  if (group >= TCP_EVT_N_GRP)
117  {
118  error = clib_error_return (0, "group out of bounds");
119  goto done;
120  }
121  if (group == ~0 || level == ~0)
122  {
123  error = clib_error_return (0, "group and level must be set");
124  goto done;
125  }
126 
127  tdm->grp_dbg_lvl[group] = level;
128 
130 
131 done:
132 
133  unformat_free (line_input);
134  return error;
135 }
136 
137 /* *INDENT-OFF* */
139 {
140  .path = "tcp debug",
141  .short_help = "tcp [show] [debug group <N> level <N>]",
142  .function = tcp_debug_fn,
143 };
144 /* *INDENT-ON* */
145 
146 /*
147  * fd.io coding-style-patch-verification: ON
148  *
149  * Local Variables:
150  * eval: (c-set-style "gnu")
151  * End:
152  */
TCP_EVT_N_GRP
@ TCP_EVT_N_GRP
Definition: tcp_debug.h:64
unformat_user
uword unformat_user(unformat_input_t *input, unformat_function_t *func,...)
Definition: unformat.c:989
tcp_dbg_main_::free_track_indices
u32 * free_track_indices
Definition: tcp_debug.h:70
tcp_dbg_main_
Definition: tcp_debug.h:67
tcp_evt_track_register
void tcp_evt_track_register(elog_track_t *et)
Definition: tcp_debug.c:20
unformat_line_input
unformat_function_t unformat_line_input
Definition: format.h:275
tcp_debug_show_groups
static void tcp_debug_show_groups(void)
Definition: tcp_debug.c:43
clib_error_return
#define clib_error_return(e, args...)
Definition: error.h:99
vlib_cli_command_t::path
char * path
Definition: cli.h:96
vm
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
Definition: nat44_ei.c:3047
elog_track_t::track_index_plus_one
u32 track_index_plus_one
Set to one when track has been added to main structure.
Definition: elog.h:120
tcp_debug_command
static vlib_cli_command_t tcp_debug_command
(constructor) VLIB_CLI_COMMAND (tcp_debug_command)
Definition: tcp_debug.c:138
unformat_input_t
struct _unformat_input_t unformat_input_t
error
Definition: cJSON.c:88
tcp_dbg_main_::grp_dbg_lvl
u8 grp_dbg_lvl[TCP_EVT_N_GRP]
Definition: tcp_debug.h:69
unformat
uword unformat(unformat_input_t *i, const char *fmt,...)
Definition: unformat.c:978
vec_len
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
Definition: vec_bootstrap.h:142
unformat_free
static void unformat_free(unformat_input_t *i)
Definition: format.h:155
tcp_dbg_main
tcp_dbg_main_t tcp_dbg_main
Definition: tcp_debug.c:17
unformat_check_input
static uword unformat_check_input(unformat_input_t *i)
Definition: format.h:163
TCP_DEBUG_ALWAYS
#define TCP_DEBUG_ALWAYS
Build debugging infra unconditionally.
Definition: tcp_debug.h:26
vlib_global_main
vlib_global_main_t vlib_global_main
Definition: main.c:1786
foreach_tcp_evt_grp
#define foreach_tcp_evt_grp
Definition: tcp_debug.h:53
i
sll srl srl sll sra u16x4 i
Definition: vector_sse42.h:261
format_unformat_error
u8 * format_unformat_error(u8 *s, va_list *va)
Definition: unformat.c:91
VLIB_CLI_COMMAND
#define VLIB_CLI_COMMAND(x,...)
Definition: cli.h:163
tcp_debug_check_lc
static void tcp_debug_check_lc(void)
Definition: tcp_debug.c:57
vlib_cli_output
void vlib_cli_output(vlib_main_t *vm, char *fmt,...)
Definition: cli.c:716
vlib_global_main_t::elog_main
elog_main_t elog_main
Definition: main.h:300
tcp_debug_fn
static clib_error_t * tcp_debug_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: tcp_debug.c:80
elog_track_t
Definition: elog.h:113
u32
unsigned int u32
Definition: types.h:88
vlib_main_t
Definition: main.h:102
vlib_get_main
static vlib_main_t * vlib_get_main(void)
Definition: global_funcs.h:38
u8
unsigned char u8
Definition: types.h:56
clib_error_t
Definition: clib_error.h:21
elog_track_register
__clib_export word elog_track_register(elog_main_t *em, elog_track_t *t)
register an event track
Definition: elog.c:198
vlib_cli_command_t
Definition: cli.h:92
tcp_debug.h
tcp_evt_grp_str
static const char * tcp_evt_grp_str[]
Definition: tcp_debug.c:36
UNFORMAT_END_OF_INPUT
#define UNFORMAT_END_OF_INPUT
Definition: format.h:137