FD.io VPP  v19.08.1-401-g8e4ed521a
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 clib_error_t *
58  vlib_cli_command_t * cmd)
59 {
60  unformat_input_t _line_input, *line_input = &_line_input;
62  u32 group = ~0, level = ~0;
63  clib_error_t *error = 0;
64  u8 is_show = 0;
65 
66  if (!TCP_DEBUG_ALWAYS)
67  return clib_error_return (0, "must compile with TCP_DEBUG_ALWAYS set");
68 
69  if (!unformat_user (input, unformat_line_input, line_input))
70  return clib_error_return (0, "expected enable | disable");
71 
72  while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
73  {
74  if (unformat (line_input, "show"))
75  is_show = 1;
76  else if (unformat (line_input, "group %d", &group))
77  ;
78  else if (unformat (line_input, "level %d", &level))
79  ;
80  else
81  {
82  error = clib_error_return (0, "unknown input `%U'",
83  format_unformat_error, line_input);
84  goto done;
85  }
86  }
87 
88  if (is_show)
89  {
91  goto done;
92  }
93  if (group >= TCP_EVT_N_GRP)
94  {
95  error = clib_error_return (0, "group out of bounds");
96  goto done;
97  }
98  if (group == ~0 || level == ~0)
99  {
100  error = clib_error_return (0, "group and level must be set");
101  goto done;
102  }
103 
104  tdm->grp_dbg_lvl[group] = level;
105 
106 done:
107 
108  unformat_free (line_input);
109  return error;
110 }
111 
112 /* *INDENT-OFF* */
113 VLIB_CLI_COMMAND (tcp_debug_command, static) =
114 {
115  .path = "tcp debug",
116  .short_help = "tcp [show] [debug group <N> level <N>]",
117  .function = tcp_debug_fn,
118 };
119 /* *INDENT-ON* */
120 
121 /*
122  * fd.io coding-style-patch-verification: ON
123  *
124  * Local Variables:
125  * eval: (c-set-style "gnu")
126  * End:
127  */
vlib_main_t vlib_global_main
Definition: main.c:1940
word elog_track_register(elog_main_t *em, elog_track_t *t)
register an event track
Definition: elog.c:198
int i
uword unformat_user(unformat_input_t *input, unformat_function_t *func,...)
Definition: unformat.c:989
static clib_error_t * tcp_debug_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: tcp_debug.c:57
u32 * free_track_indices
Definition: tcp_debug.h:70
unsigned char u8
Definition: types.h:56
#define foreach_tcp_evt_grp
Definition: tcp_debug.h:53
#define clib_error_return(e, args...)
Definition: error.h:99
unsigned int u32
Definition: types.h:88
u8 grp_dbg_lvl[TCP_EVT_N_GRP]
Definition: tcp_debug.h:69
unformat_function_t unformat_line_input
Definition: format.h:283
struct _unformat_input_t unformat_input_t
#define UNFORMAT_END_OF_INPUT
Definition: format.h:145
vlib_main_t * vm
Definition: buffer.c:323
static void tcp_debug_show_groups(void)
Definition: tcp_debug.c:43
elog_main_t elog_main
Definition: main.h:193
u32 track_index_plus_one
Set to one when track has been added to main structure.
Definition: elog.h:120
#define VLIB_CLI_COMMAND(x,...)
Definition: cli.h:161
void tcp_evt_track_register(elog_track_t *et)
Definition: tcp_debug.c:20
static vlib_main_t * vlib_get_main(void)
Definition: global_funcs.h:23
#define TCP_DEBUG_ALWAYS
Build debugging infra unconditionally.
Definition: tcp_debug.h:26
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
static void unformat_free(unformat_input_t *i)
Definition: format.h:163
u8 * format_unformat_error(u8 *s, va_list *va)
Definition: unformat.c:91
tcp_dbg_main_t tcp_dbg_main
Definition: tcp_debug.c:17
static const char * tcp_evt_grp_str[]
Definition: tcp_debug.c:36
void vlib_cli_output(vlib_main_t *vm, char *fmt,...)
Definition: cli.c:772
uword unformat(unformat_input_t *i, const char *fmt,...)
Definition: unformat.c:978
static uword unformat_check_input(unformat_input_t *i)
Definition: format.h:171