FD.io VPP  v19.08-27-gf4dcae4
Vector Packet Processing
format.c
Go to the documentation of this file.
1 /*
2  *------------------------------------------------------------------
3  * Copyright (c) 2018 Cisco and/or its affiliates.
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at:
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *------------------------------------------------------------------
16  */
17 
18 #include <vlib/vlib.h>
19 #include <vlib/unix/unix.h>
20 #include <vlib/pci/pci.h>
21 #include <vnet/ethernet/ethernet.h>
22 
23 #include <rdma/rdma.h>
24 
25 u8 *
26 format_rdma_device_name (u8 * s, va_list * args)
27 {
28  u32 i = va_arg (*args, u32);
29  rdma_main_t *rm = &rdma_main;
30  rdma_device_t *rd = vec_elt_at_index (rm->devices, i);
31 
32  if (rd->name)
33  return format (s, "%s", rd->name);
34 
35  s = format (s, "rdma-%u", rd->dev_instance);
36  return s;
37 }
38 
39 u8 *
40 format_rdma_device_flags (u8 * s, va_list * args)
41 {
42  rdma_device_t *rd = va_arg (*args, rdma_device_t *);
43  u8 *t = 0;
44 
45 #define _(a, b, c) if (rd->flags & (1 << a)) \
46 t = format (t, "%s%s", t ? " ":"", c);
48 #undef _
49  s = format (s, "%v", t);
50  vec_free (t);
51  return s;
52 }
53 
54 u8 *
55 format_rdma_device (u8 * s, va_list * args)
56 {
57  u32 i = va_arg (*args, u32);
58  rdma_main_t *rm = &rdma_main;
59  rdma_device_t *rd = vec_elt_at_index (rm->devices, i);
60  u32 indent = format_get_indent (s);
61 
62  s = format (s, "flags: %U", format_rdma_device_flags, rd);
63  if (rd->error)
64  s = format (s, "\n%Uerror %U", format_white_space, indent,
66 
67  return s;
68 }
69 
70 u8 *
71 format_rdma_input_trace (u8 * s, va_list * args)
72 {
73  vlib_main_t *vm = va_arg (*args, vlib_main_t *);
74  vlib_node_t *node = va_arg (*args, vlib_node_t *);
75  rdma_input_trace_t *t = va_arg (*args, rdma_input_trace_t *);
76  vnet_main_t *vnm = vnet_get_main ();
78 
79  s = format (s, "rdma: %v (%d) next-node %U",
81  node->index, t->next_index);
82 
83  return s;
84 }
85 
86 /*
87  * fd.io coding-style-patch-verification: ON
88  *
89  * Local Variables:
90  * eval: (c-set-style "gnu")
91  * End:
92  */
vmrglw vmrglh hi
u8 * format_clib_error(u8 *s, va_list *va)
Definition: error.c:191
vnet_main_t * vnet_get_main(void)
Definition: misc.c:46
u32 index
Definition: node.h:279
u32 dev_instance
Definition: rdma.h:62
u8 * format_rdma_input_trace(u8 *s, va_list *args)
Definition: format.c:71
static vnet_hw_interface_t * vnet_get_hw_interface(vnet_main_t *vnm, u32 hw_if_index)
u8 * format_rdma_device(u8 *s, va_list *args)
Definition: format.c:55
int i
static u32 format_get_indent(u8 *s)
Definition: format.h:72
u8 * format(u8 *s, const char *fmt,...)
Definition: format.c:424
u8 * format_rdma_device_flags(u8 *s, va_list *args)
Definition: format.c:40
unsigned char u8
Definition: types.h:56
rdma_device_t * devices
Definition: rdma.h:89
u8 * format_white_space(u8 *s, va_list *va)
Definition: std-formats.c:129
#define vec_elt_at_index(v, i)
Get vector value at index i checking that i is in bounds.
format_function_t format_vlib_next_node_name
Definition: node_funcs.h:1142
unsigned int u32
Definition: types.h:88
clib_error_t * error
Definition: rdma.h:84
rdma_main_t rdma_main
Definition: device.c:46
vlib_main_t * vm
Definition: buffer.c:312
#define vec_free(V)
Free vector&#39;s memory (no header).
Definition: vec.h:341
u8 * name
Definition: rdma.h:71
u8 * format_rdma_device_name(u8 *s, va_list *args)
Definition: format.c:26