+u8 *
+format_dpdk_mempool (u8 * s, va_list * args)
+{
+ struct rte_mempool *mp = va_arg (*args, struct rte_mempool *);
+ uword indent = format_get_indent (s);
+ u32 count = rte_mempool_avail_count (mp);
+
+ s = format (s, "%s\n%Uavailable %7d, allocated %7d total %7d\n",
+ mp->name, format_white_space, indent + 2,
+ count, mp->size - count, mp->size);
+ s = format (s, "%Uphys_addr %p, flags %08x, nb_mem_chunks %u\n",
+ format_white_space, indent + 2,
+ mp->mz->phys_addr, mp->flags, mp->nb_mem_chunks);
+ s = format (s, "%Uelt_size %4u, header_size %3u, trailer_size %u\n",
+ format_white_space, indent + 2,
+ mp->elt_size, mp->header_size, mp->trailer_size);
+ s = format (s, "%Uprivate_data_size %3u, total_elt_size %u\n",
+ format_white_space, indent + 2,
+ mp->private_data_size,
+ mp->elt_size + mp->header_size + mp->trailer_size);
+ return s;
+}
+
+static clib_error_t *
+show_dpdk_crypto_pools_fn (vlib_main_t * vm,
+ unformat_input_t * input, vlib_cli_command_t * cmd)
+{
+ dpdk_crypto_main_t *dcm = &dpdk_crypto_main;
+ crypto_data_t *data;
+
+ /* *INDENT-OFF* */
+ vec_foreach (data, dcm->data)
+ {
+ if (data->crypto_op)
+ vlib_cli_output (vm, "%U\n", format_dpdk_mempool, data->crypto_op);
+#if ! DPDK_NO_AEAD
+ if (data->session_h)
+ vlib_cli_output (vm, "%U\n", format_dpdk_mempool, data->session_h);
+
+ struct rte_mempool **mp;
+ vec_foreach (mp, data->session_drv)
+ if (mp[0])
+ vlib_cli_output (vm, "%U\n", format_dpdk_mempool, mp[0]);
+#endif
+ }
+ /* *INDENT-ON* */
+
+#if DPDK_NO_AEAD
+ crypto_dev_t *dev;
+ /* *INDENT-OFF* */
+ vec_foreach (dev, dcm->dev) if (rte_cryptodevs[dev->id].data->session_pool)
+ vlib_cli_output (vm, "%U\n", format_dpdk_mempool,
+ rte_cryptodevs[dev->id].data->session_pool);
+ /* *INDENT-ON* */
+#endif
+
+ return NULL;
+}
+
+/*?
+ * This command is used to display the DPDK Crypto pools information.
+ *
+ * @cliexpar
+ * Example of how to display the DPDK Cypto pools information:
+ * @cliexstart{show crypto device mapping}
+ * vpp# show dpdk crypto pools
+ * crypto_pool_numa1
+ * available 15872, allocated 512 total 16384
+ * phys_addr 0xf3d2086c0, flags 00000010, nb_mem_chunks 1
+ * elt_size 160, header_size 64, trailer_size 96
+ * private_data_size 64, total_elt_size 320
+ *
+ * session_h_pool_numa1
+ * available 19998, allocated 2 total 20000
+ * phys_addr 0xf3c9c4380, flags 00000010, nb_mem_chunks 1
+ * elt_size 40, header_size 64, trailer_size 88
+ * private_data_size 0, total_elt_size 192
+ *
+ * session_drv0_pool_numa1
+ * available 19998, allocated 2 total 20000
+ * phys_addr 0xf3ad42d80, flags 00000010, nb_mem_chunks 1
+ * elt_size 512, header_size 64, trailer_size 0
+ * private_data_size 0, total_elt_size 576
+ * @cliexend
+?*/
+/* *INDENT-OFF* */
+VLIB_CLI_COMMAND (show_dpdk_crypto_pools, static) = {
+ .path = "show dpdk crypto pools",
+ .short_help = "show dpdk crypto pools",
+ .function = show_dpdk_crypto_pools_fn,
+};
+/* *INDENT-ON* */
+
+/* TODO Allow user define number of sessions supported */
+/* TODO Allow user define descriptor queue size */
+