FD.io VPP  v18.11-rc0-18-g2a3fb1a
Vector Packet Processing
elog_samples.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016 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 
16 #include <vlib/vlib.h>
17 #include <vppinfra/elog.h>
18 
19 static inline void
21 {
22  ELOG_TYPE_DECLARE (e) =
23  {
24  .format = "four int: first %d second %d third %d fourth %d",.format_args =
25  "i4i4i4i4",};
26  struct
27  {
28  u32 data[4];
29  } *ed;
31  ed->data[0] = data[0];
32  ed->data[1] = data[1];
33  ed->data[2] = data[2];
34  ed->data[3] = data[3];
35 }
36 
37 static inline void
39 {
40  ELOG_TYPE_DECLARE (e) =
41  {
42  .format =
43  "four_int_track: first %d second %d third %d fourth %d",.format_args =
44  "i4i4i4i4",};
45  struct
46  {
47  u32 data[4];
48  } *ed;
49  ELOG_TRACK (sample_track);
50  ed = ELOG_TRACK_DATA (&vlib_global_main.elog_main, e, sample_track);
51  ed->data[0] = data[0];
52  ed->data[1] = data[1];
53  ed->data[2] = data[2];
54  ed->data[3] = data[3];
55 }
56 
57 static inline void
59 {
60  ELOG_TYPE_DECLARE (e) =
61  {
62  .format = "my enum: %s",.format_args = "t1",.n_enum_strings =
63  2,.enum_strings =
64  {
65  "string 1", "string 2",},};
66  struct
67  {
68  u8 which;
69  } *ed;
71  ed->which = which;
72 }
73 
74 static inline void
76 {
77  ELOG_TYPE_DECLARE (e) =
78  {
79  .format = "one datum: %d",.format_args = "i4",};
80 
81  elog (&vlib_global_main.elog_main, &e, data);
82 }
83 
84 static clib_error_t *
86  unformat_input_t * input, vlib_cli_command_t * cmd)
87 {
88  int i;
89  u32 samples[4];
90 
91  for (i = 0; i < 10; i++)
92  {
93  samples[0] = i;
94  samples[1] = i + 1;
95  samples[2] = i + 2;
96  samples[3] = i + 3;
97 
98  elog_four_int_sample (samples);
100  elog_enum_sample (0);
101  elog_enum_sample (1);
103  }
104 
105  return 0;
106 }
107 
108 /* *INDENT-OFF* */
109 VLIB_CLI_COMMAND (test_elog_command, static) = {
110  .path = "test elog sample",
111  .short_help = "test elog sample",
112  .function = test_elog_command_fn,
113 };
114 /* *INDENT-ON* */
115 
116 /*
117  * fd.io coding-style-patch-verification: ON
118  *
119  * Local Variables:
120  * eval: (c-set-style "gnu")
121  * End:
122  */
vlib_main_t vlib_global_main
Definition: main.c:1644
static clib_error_t * test_elog_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: elog_samples.c:85
static void elog_four_int_sample(u32 *data)
Definition: elog_samples.c:20
int i
unsigned char u8
Definition: types.h:56
unsigned int u32
Definition: types.h:88
#define ELOG_TRACK(f)
Definition: elog.h:468
struct _unformat_input_t unformat_input_t
#define ELOG_DATA(em, f)
Definition: elog.h:481
static void elog(elog_main_t *em, elog_event_type_t *type, u32 data)
Log a single-datum event.
Definition: elog.h:364
The fine-grained event logger allows lightweight, thread-safe event logging at minimum cost...
static void elog_four_int_track_sample(u32 *data)
Definition: elog_samples.c:38
vlib_main_t * vm
Definition: buffer.c:294
elog_main_t elog_main
Definition: main.h:158
#define ELOG_TYPE_DECLARE(f)
Definition: elog.h:439
#define VLIB_CLI_COMMAND(x,...)
Definition: cli.h:154
#define ELOG_TRACK_DATA(em, f, track)
Definition: elog.h:475
static void elog_enum_sample(u8 which)
Definition: elog_samples.c:58
static void elog_one_datum_sample(u32 data)
Definition: elog_samples.c:75