FD.io VPP  v17.07-30-g839fa73
Vector Packet Processing
cli.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016 Intel 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 <vnet/vnet.h>
17 #include <dpdk/device/dpdk.h>
18 #include <dpdk/ipsec/ipsec.h>
19 
20 static void
21 dpdk_ipsec_show_mapping (vlib_main_t * vm, u16 detail_display)
22 {
25  u32 i, skip_master;
26 
27  if (!dcm->enabled)
28  {
29  vlib_cli_output (vm, "DPDK Cryptodev support is disabled\n");
30  return;
31  }
32 
33  if (detail_display)
34  vlib_cli_output (vm, "worker\t%10s\t%15s\tdir\tdev\tqp\n",
35  "cipher", "auth");
36  else
37  vlib_cli_output (vm, "worker\tcrypto device id(type)\n");
38 
39  skip_master = vlib_num_workers () > 0;
40 
41  for (i = 0; i < tm->n_vlib_mains; i++)
42  {
43  uword key, data;
44  u32 thread_index = vlib_mains[i]->thread_index;
45  crypto_worker_main_t *cwm = &dcm->workers_main[thread_index];
46  u8 *s = 0;
47 
48  if (skip_master)
49  {
50  skip_master = 0;
51  continue;
52  }
53 
54  if (!detail_display)
55  {
56  i32 last_cdev = -1;
57  crypto_qp_data_t *qpd;
58 
59  s = format (s, "%u\t", thread_index);
60 
61  /* *INDENT-OFF* */
62  vec_foreach (qpd, cwm->qp_data)
63  {
64  u32 dev_id = qpd->dev_id;
65 
66  if ((u16) last_cdev != dev_id)
67  {
68  struct rte_cryptodev_info cdev_info;
69 
70  rte_cryptodev_info_get (dev_id, &cdev_info);
71 
72  s = format(s, "%u(%s)\t", dev_id, cdev_info.feature_flags &
73  RTE_CRYPTODEV_FF_HW_ACCELERATED ? "HW" : "SW");
74  }
75  last_cdev = dev_id;
76  }
77  /* *INDENT-ON* */
78  vlib_cli_output (vm, "%s", s);
79  }
80  else
81  {
82  char cipher_str[15], auth_str[15];
83  struct rte_cryptodev_capabilities cap;
85  /* *INDENT-OFF* */
86  hash_foreach (key, data, cwm->algo_qp_map,
87  ({
88  cap.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC;
89  cap.sym.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER;
90  cap.sym.cipher.algo = p_key->cipher_algo;
91  check_algo_is_supported (&cap, cipher_str);
92  cap.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC;
93  cap.sym.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH;
94  cap.sym.auth.algo = p_key->auth_algo;
95  check_algo_is_supported (&cap, auth_str);
96  vlib_cli_output (vm, "%u\t%10s\t%15s\t%3s\t%u\t%u\n",
97  vlib_mains[i]->thread_index, cipher_str, auth_str,
98  p_key->is_outbound ? "out" : "in",
99  cwm->qp_data[data].dev_id,
100  cwm->qp_data[data].qp_id);
101  }));
102  /* *INDENT-ON* */
103  }
104  }
105 }
106 
107 static clib_error_t *
109  vlib_cli_command_t * cmd)
110 {
111  unformat_input_t _line_input, *line_input = &_line_input;
112  u16 detail = 0;
113  clib_error_t *error = NULL;
114 
115  if (!unformat_user (input, unformat_line_input, line_input))
116  return 0;
117 
118  while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
119  {
120  if (unformat (line_input, "verbose"))
121  detail = 1;
122  else
123  {
124  error = clib_error_return (0, "parse error: '%U'",
125  format_unformat_error, line_input);
126  goto done;
127  }
128  }
129 
130  dpdk_ipsec_show_mapping (vm, detail);
131 
132 done:
133  unformat_free (line_input);
134 
135  return error;
136 }
137 
138 /*?
139  * This command is used to display the DPDK Crypto device data. See
140  * @ref dpdk_crypto_ipsec_doc for more details on initializing the
141  * DPDK Crypto device.
142  *
143  * @cliexpar
144  * Example of displaying the DPDK Crypto device data when disabled:
145  * @cliexstart{show crypto device mapping}
146  * DPDK Cryptodev support is disabled
147  * @cliexend
148  * Example of displaying the DPDK Crypto device data when enabled:
149  * @cliexstart{show crypto device mapping}
150  * worker crypto device id(type)
151  * 1 1(SW)
152  * 2 1(SW)
153  * @cliexend
154  * Example of displaying the DPDK Crypto device data when enabled with verbose:
155  * @cliexstart{show crypto device mapping verbose}
156  * worker cipher auth dir dev qp
157  * 1 AES_CTR AES-XCBC-MAC in 1 0
158  * 1 AES_CTR HMAC-SHA384 in 1 0
159  * 1 AES_CTR HMAC-SHA384 out 1 1
160  * 1 AES_CBC HMAC-SHA512 in 1 0
161  * 1 AES_CBC HMAC-SHA256 in 1 0
162  * 1 AES_CBC AES-XCBC-MAC out 1 1
163  * 1 AES_CTR AES-XCBC-MAC out 1 1
164  * 1 AES_CBC HMAC-SHA256 out 1 1
165  * 1 AES_CTR HMAC-SHA512 out 1 1
166  * 1 AES_CTR HMAC-SHA256 in 1 0
167  * 1 AES_CTR HMAC-SHA1 in 1 0
168  * 1 AES_CBC HMAC-SHA512 out 1 1
169  * 1 AES_CBC HMAC-SHA384 out 1 1
170  * 1 AES_CTR HMAC-SHA1 out 1 1
171  * 1 AES_CTR HMAC-SHA256 out 1 1
172  * 1 AES_CBC HMAC-SHA1 in 1 0
173  * 1 AES_CBC AES-XCBC-MAC in 1 0
174  * 1 AES_CTR HMAC-SHA512 in 1 0
175  * 1 AES_CBC HMAC-SHA1 out 1 1
176  * 1 AES_CBC HMAC-SHA384 in 1 0
177  * 2 AES_CTR AES-XCBC-MAC in 1 2
178  * 2 AES_CTR HMAC-SHA384 in 1 2
179  * 2 AES_CTR HMAC-SHA384 out 1 3
180  * 2 AES_CBC HMAC-SHA512 in 1 2
181  * 2 AES_CBC HMAC-SHA256 in 1 2
182  * 2 AES_CBC AES-XCBC-MAC out 1 3
183  * 2 AES_CTR AES-XCBC-MAC out 1 3
184  * 2 AES_CBC HMAC-SHA256 out 1 3
185  * 2 AES_CTR HMAC-SHA512 out 1 3
186  * 2 AES_CTR HMAC-SHA256 in 1 2
187  * 2 AES_CTR HMAC-SHA1 in 1 2
188  * 2 AES_CBC HMAC-SHA512 out 1 3
189  * 2 AES_CBC HMAC-SHA384 out 1 3
190  * 2 AES_CTR HMAC-SHA1 out 1 3
191  * 2 AES_CTR HMAC-SHA256 out 1 3
192  * 2 AES_CBC HMAC-SHA1 in 1 2
193  * 2 AES_CBC AES-XCBC-MAC in 1 2
194  * 2 AES_CTR HMAC-SHA512 in 1 2
195  * 2 AES_CBC HMAC-SHA1 out 1 3
196  * 2 AES_CBC HMAC-SHA384 in 1 2
197  * @cliexend
198 ?*/
199 /* *INDENT-OFF* */
200 VLIB_CLI_COMMAND (lcore_cryptodev_map, static) = {
201  .path = "show crypto device mapping",
202  .short_help =
203  "show cryptodev device mapping [verbose]",
204  .function = lcore_cryptodev_map_fn,
205 };
206 /* *INDENT-ON* */
207 
208 /*
209  * fd.io coding-style-patch-verification: ON
210  *
211  * Local Variables:
212  * eval: (c-set-style "gnu")
213  * End:
214  */
sll srl srl sll sra u16x4 i
Definition: vector_sse2.h:337
#define NULL
Definition: clib.h:55
static void dpdk_ipsec_show_mapping(vlib_main_t *vm, u16 detail_display)
Definition: cli.c:21
u32 thread_index
Definition: main.h:159
uword unformat_user(unformat_input_t *input, unformat_function_t *func,...)
Definition: unformat.c:983
u8 * format(u8 *s, const char *fmt,...)
Definition: format.c:419
dpdk_crypto_main_t dpdk_crypto_main
Definition: ipsec.h:89
uword * algo_qp_map
Definition: ipsec.h:79
int i32
Definition: types.h:81
#define hash_foreach(key_var, value_var, h, body)
Definition: hash.h:418
#define clib_error_return(e, args...)
Definition: error.h:99
unformat_function_t unformat_line_input
Definition: format.h:281
struct _unformat_input_t unformat_input_t
#define UNFORMAT_END_OF_INPUT
Definition: format.h:143
#define VLIB_CLI_COMMAND(x,...)
Definition: cli.h:154
unsigned int u32
Definition: types.h:88
crypto_worker_main_t * workers_main
Definition: ipsec.h:85
crypto_qp_data_t * qp_data
Definition: ipsec.h:78
u64 uword
Definition: types.h:112
unsigned short u16
Definition: types.h:57
unsigned char u8
Definition: types.h:56
static void unformat_free(unformat_input_t *i)
Definition: format.h:161
vlib_main_t ** vlib_mains
u8 * format_unformat_error(u8 *s, va_list *va)
Definition: unformat.c:91
static vlib_thread_main_t * vlib_get_thread_main()
Definition: global_funcs.h:32
static u32 vlib_num_workers()
Definition: threads.h:332
#define vec_foreach(var, vec)
Vector iterator.
void vlib_cli_output(vlib_main_t *vm, char *fmt,...)
Definition: cli.c:680
uword unformat(unformat_input_t *i, const char *fmt,...)
Definition: unformat.c:972
static uword unformat_check_input(unformat_input_t *i)
Definition: format.h:169
static clib_error_t * lcore_cryptodev_map_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: cli.c:108