u8 * format_transport_connection (u8 * s, va_list * args) { u32 transport_proto = va_arg (*args, u32); u32 conn_index = va_arg (*args, u32); u32 thread_index = va_arg (*args, u32); u32 verbose = va_arg (*args, u32); transport_proto_vft_t *tp_vft; transport_connection_t *tc; u32 indent; tp_vft = transport_protocol_get_vft (transport_proto); if (!tp_vft) return s; s = format (s, "%U", tp_vft->format_connection, conn_index, thread_index, verbose); tc = tp_vft->get_connection (conn_index, thread_index); if (tc && transport_connection_is_tx_paced (tc) && verbose > 1) { indent = format_get_indent (s) + 1; s = format (s, "%Upacer: %U\n", format_white_space, indent, format_transport_pacer, &tc->pacer); } return s; }
uword l_first = b_first->current_length; uword l = 0; while (b->flags & VLIB_BUFFER_NEXT_PRESENT) { b = vlib_get_buffer (vm, b->next_buffer); l += b->current_length; } b_first->total_length_not_including_first_buffer = l; b_first->flags |= VLIB_BUFFER_TOTAL_LENGTH_VALID; return l + l_first; } u8 * format_vlib_buffer (u8 * s, va_list * args) { vlib_buffer_t * b = va_arg (*args, vlib_buffer_t *); uword indent = format_get_indent (s); s = format (s, "current data %d, length %d, free-list %d", b->current_data, b->current_length, b->free_list_index); if (b->flags & VLIB_BUFFER_TOTAL_LENGTH_VALID) s = format (s, ", totlen-nifb %d", b->total_length_not_including_first_buffer); if (b->flags & VLIB_BUFFER_IS_TRACED) s = format (s, ", trace 0x%x", b->trace_index); while (b->flags & VLIB_BUFFER_NEXT_PRESENT) { vlib_main_t * vm = vlib_get_main();
typedef struct { ipsec_crypto_alg_t crypto_alg; ipsec_integ_alg_t integ_alg; u8 packet_data[64]; } esp_decrypt_trace_t; /* packet trace format function */ static u8 * format_esp_decrypt_trace (u8 * s, va_list * args) { CLIB_UNUSED (vlib_main_t * vm) = va_arg (*args, vlib_main_t *); CLIB_UNUSED (vlib_node_t * node) = va_arg (*args, vlib_node_t *); esp_decrypt_trace_t *t = va_arg (*args, esp_decrypt_trace_t *); u32 indent = format_get_indent (s); s = format (s, "cipher %U auth %U\n", format_ipsec_crypto_alg, t->crypto_alg, format_ipsec_integ_alg, t->integ_alg); s = format (s, "%U%U", format_white_space, indent, format_esp_header, t->packet_data); return s; } always_inline uword dpdk_esp_decrypt_inline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * from_frame, int is_ip6) { u32 n_left_from, *from, *to_next, next_index, thread_index;
typedef struct { ipsec_crypto_alg_t crypto_alg; ipsec_integ_alg_t integ_alg; u8 packet_data[64]; } esp_encrypt_trace_t; /* packet trace format function */ static u8 * format_esp_encrypt_trace (u8 * s, va_list * args) { CLIB_UNUSED (vlib_main_t * vm) = va_arg (*args, vlib_main_t *); CLIB_UNUSED (vlib_node_t * node) = va_arg (*args, vlib_node_t *); esp_encrypt_trace_t *t = va_arg (*args, esp_encrypt_trace_t *); ip4_header_t *ih4 = (ip4_header_t *) t->packet_data; u32 indent = format_get_indent (s), offset; s = format (s, "cipher %U auth %U\n", format_ipsec_crypto_alg, t->crypto_alg, format_ipsec_integ_alg, t->integ_alg); if ((ih4->ip_version_and_header_length & 0xF0) == 0x60) { s = format (s, "%U%U", format_white_space, indent, format_ip6_header, ih4); offset = sizeof (ip6_header_t); } else { s = format (s, "%U%U", format_white_space, indent, format_ip4_header, ih4);