+static_always_inline void
+dpdk_crypto_input_check_op (vlib_main_t * vm, vlib_node_runtime_t * node,
+ struct rte_crypto_op *op0, u16 * next)
+{
+ if (PREDICT_FALSE (op0->status != RTE_CRYPTO_OP_STATUS_SUCCESS))
+ {
+ next[0] = DPDK_CRYPTO_INPUT_NEXT_DROP;
+ vlib_node_increment_counter (vm,
+ node->node_index,
+ DPDK_CRYPTO_INPUT_ERROR_STATUS, 1);
+ /* if auth failed */
+ if (op0->status == RTE_CRYPTO_OP_STATUS_AUTH_FAILED)
+ vlib_node_increment_counter (vm,
+ node->node_index,
+ DPDK_CRYPTO_INPUT_ERROR_AUTH_FAILED, 1);
+ }
+}
+
+always_inline void
+dpdk_crypto_input_trace (vlib_main_t * vm, vlib_node_runtime_t * node,
+ struct rte_crypto_op **ops, u32 n_deq)
+{
+ u32 n_left, n_trace;
+ if (PREDICT_FALSE ((n_trace = vlib_get_trace_count (vm, node))))
+ {
+ n_left = n_deq;
+
+ while (n_trace && n_left)
+ {
+ vlib_buffer_t *b0;
+ struct rte_crypto_op *op0;
+ u16 next;
+
+ op0 = ops[0];
+
+ next = crypto_op_get_priv (op0)->next;
+
+ b0 = vlib_buffer_from_rte_mbuf (op0->sym[0].m_src);
+
+ vlib_trace_buffer (vm, node, next, b0, /* follow_chain */ 0);
+
+ dpdk_crypto_input_trace_t *tr =
+ vlib_add_trace (vm, node, b0, sizeof (*tr));
+ tr->status = op0->status;
+
+ n_trace--;
+ n_left--;
+ ops++;
+ }
+ vlib_set_trace_count (vm, node, n_trace);
+ }
+}
+