|
FD.io VPP
v21.10.1-2-g0a485f517
Vector Packet Processing
|
Go to the documentation of this file.
51 u32 vtr_op = va_arg (*args,
u32);
52 u32 dot1q = va_arg (*args,
u32);
53 u32 tag1 = va_arg (*args,
u32);
54 u32 tag2 = va_arg (*args,
u32);
60 return format (s,
"push-1 %s %d", dot1q ?
"dot1q" :
"dot1ad", tag1);
62 return format (s,
"push-2 %s %d %d", dot1q ?
"dot1q" :
"dot1ad", tag1,
65 return format (s,
"pop-1");
67 return format (s,
"pop-2");
69 return format (s,
"trans-1-1 %s %d", dot1q ?
"dot1q" :
"dot1ad", tag1);
71 return format (s,
"trans-1-2 %s %d %d", dot1q ?
"dot1q" :
"dot1ad",
74 return format (s,
"trans-2-1 %s %d", dot1q ?
"dot1q" :
"dot1ad", tag1);
76 return format (s,
"trans-2-2 %s %d %d", dot1q ?
"dot1q" :
"dot1ad",
107 return format (s,
"polling");
110 return format (s,
"interrupt");
113 return format (s,
"adaptive");
115 return format (s,
"unknown");
121 u32 link_speed = va_arg (*args,
u32);
124 return format (s,
"unknown");
126 if (link_speed >= 1000000)
127 return format (s,
"%f Gbps", (
f64) link_speed / 1000000);
129 if (link_speed >= 1000)
130 return format (s,
"%f Mbps", (
f64) link_speed / 1000);
132 return format (s,
"%u Kbps", link_speed);
163 int verbose = va_arg (*args,
int);
167 return format (s,
"%=32s%=6s%=8s%s",
"Name",
"Idx",
"Link",
"Hardware");
171 s =
format (s,
"%-32v%=6d",
hi->name,
hi->hw_if_index);
174 s =
format (s,
"%=8s",
"slave");
185 s =
format (s,
"Slave-Idx:");
187 s =
format (s,
" %d", hw_idx);
189 else if (dev_class->format_device_name)
190 s =
format (s,
"%U", dev_class->format_device_name,
hi->dev_instance);
192 s =
format (s,
"%s%d", dev_class->name,
hi->dev_instance);
201 "queue",
"thread",
"mode");
202 for (
int i = 0;
i <
vec_len (
hi->rx_queue_indices);
i++)
216 "queue",
"shared",
"thread(s)");
217 for (
int i = 0;
i <
vec_len (
hi->tx_queue_indices);
i++)
236 if (hw_class->format_device)
239 hw_class->format_device,
hi->hw_if_index, verbose);
244 if (hw_class->format_address &&
vec_len (
hi->hw_address) > 0)
246 format (s,
" address %U", hw_class->format_address,
250 if (dev_class->format_device)
253 dev_class->format_device,
hi->dev_instance, verbose);
290 return format (s,
"DELETED");
299 u32 hw_if_index = va_arg (*args,
u32);
305 return format (s,
"DELETED");
314 u32 indent, n_printed;
317 int json_need_comma_nl = 0;
333 for (j = 0; j < n_counters; j++)
351 if (json_need_comma_nl)
356 s =
format (s,
"%s%s_packets%s: %s%Ld%s,\n", x,
cm->name, x, x,
358 s =
format (s,
"%s%s_bytes%s: %s%Ld%s", x,
cm->name, x, x,
360 json_need_comma_nl = 1;
370 n =
format (n,
"%s packets",
cm->name);
374 n =
format (n,
"%s bytes",
cm->name);
375 s =
format (s,
"\n%U%-16v%16Ld",
386 for (j = 0; j < n_counters; j++)
401 if (json_need_comma_nl)
406 s =
format (s,
"%s%s%s: %s%Ld%s", x,
cm->name, x, x, vtotal, x);
407 json_need_comma_nl = 1;
416 s =
format (s,
"%-16s%16Ld",
cm->name, vtotal);
441 return format (s,
"%=32s%=5s%=10s%=21s%=16s%=16s",
442 "Name",
"Idx",
"State",
"MTU (L3/IP4/IP6/MPLS)",
"Counter",
445 s =
format (s,
"%-32U%=5d%=10U%=21U",
466 return format (s,
"%=32s%=5s%=16s%=16s%=16s",
467 "Name",
"Idx",
"State",
"Counter",
"Count");
469 s =
format (s,
"%-32v%=5d%=16U",
483 #define _(a,b,c,v) if (buf->flags & VNET_BUFFER_F_##b) s = format (s, "%s ", c);
506 "sw_if_index[VLIB_RX]: %d, sw_if_index[VLIB_TX]: %d",
511 "L2 offset %d, L3 offset %d, L4 offset %d, feature arc index %d",
518 "ip.adj_index[VLIB_RX]: %d, ip.adj_index[VLIB_TX]: %d",
519 (
u32) (o->
ip.adj_index[0]), (
u32) (o->
ip.adj_index[1]));
523 "ip.flow_hash: 0x%x, ip.save_protocol: 0x%x, ip.fib_index: %d",
524 o->
ip.flow_hash, o->
ip.save_protocol, o->
ip.fib_index);
528 "ip.save_rewrite_length: %d, ip.rpf_id: %d",
529 o->
ip.save_rewrite_length, o->
ip.rpf_id);
533 "ip.icmp.type: %d ip.icmp.code: %d, ip.icmp.data: 0x%x",
534 (
u32) (o->
ip.icmp.type),
535 (
u32) (o->
ip.icmp.code), o->
ip.icmp.data);
539 "ip.reass.next_index: %d, ip.reass.estimated_mtu: %d",
540 o->
ip.reass.next_index, (
u32) (o->
ip.reass.estimated_mtu));
543 "ip.reass.error_next_index: %d, ip.reass.owner_thread_index: %d",
544 o->
ip.reass.error_next_index,
545 (
u32) (o->
ip.reass.owner_thread_index));
548 "ip.reass.ip_proto: %d, ip.reass.l4_src_port: %d",
549 o->
ip.reass.ip_proto, (
u32) (o->
ip.reass.l4_src_port));
551 s =
format (s,
"ip.reass.l4_dst_port: %d", o->
ip.reass.l4_dst_port);
555 "ip.reass.fragment_first: %d ip.reass.fragment_last: %d",
556 (
u32) (o->
ip.reass.fragment_first),
557 (
u32) (o->
ip.reass.fragment_last));
561 "ip.reass.range_first: %d ip.reass.range_last: %d",
562 (
u32) (o->
ip.reass.range_first),
563 (
u32) (o->
ip.reass.range_last));
567 "ip.reass.next_range_bi: 0x%x, ip.reass.ip6_frag_hdr_offset: %d",
568 o->
ip.reass.next_range_bi,
569 (
u32) (o->
ip.reass.ip6_frag_hdr_offset));
573 "mpls.ttl: %d, mpls.exp: %d, mpls.first: %d, "
574 "mpls.save_rewrite_length: %d, mpls.bier.n_bytes: %d",
576 o->
mpls.save_rewrite_length, (
u32) (o->
mpls.bier.n_bytes));
578 s =
format (s,
"mpls.mpls_hdr_length: %d", (
u32) (o->
mpls.mpls_hdr_length));
582 "l2.feature_bitmap: %08x, l2.bd_index: %d, l2.l2fib_sn %d, "
583 "l2.l2_len: %d, l2.shg: %d, l2.bd_age: %d",
584 (
u32) (o->
l2.feature_bitmap), (
u32) (o->
l2.bd_index),
585 (
u32) (o->
l2.l2fib_sn),
590 "l2.feature_bitmap_input: %U, L2.feature_bitmap_output: %U",
596 "l2t.next_index: %d, l2t.session_index: %d",
597 (
u32) (o->
l2t.next_index), o->
l2t.session_index);
601 "l2_classify.table_index: %d, l2_classify.opaque_index: %d, "
602 "l2_classify.hash: 0x%llx",
610 s =
format (s,
"ipsec.sad_index: %d, ipsec.protect_index",
618 "map_t.map_domain_index: %d, map_t.v6.saddr: 0x%x, "
619 "map_t.v6.daddr: 0x%x, map_t.v6.frag_offset: %d, "
620 "map_t.v6.l4_offset: %d, map_t.v6.l4_protocol: %d, "
621 "map.t.checksum_offset: %d",
622 o->
map_t.map_domain_index,
631 "map_t.v6.l4_protocol: %d, map_t.checksum_offset: %d, "
638 "ip_frag.mtu: %d, ip_frag.next_index: %d, ip_frag.flags: 0x%x",
643 s =
format (s,
"cop.current_config_index: %d", o->
cop.current_config_index);
646 s =
format (s,
"lisp.overlay_afi: %d", (
u32) (o->
lisp.overlay_afi));
651 "tcp.connection_index: %d, tcp.seq_number: %d, tcp.next_node_opaque: %d "
652 "tcp.seq_end: %d, tcp.ack_number: %d, tcp.hdr_offset: %d, "
653 "tcp.data_offset: %d", o->
tcp.connection_index, o->
tcp.next_node_opaque,
654 o->
tcp.seq_number, o->
tcp.seq_end, o->
tcp.ack_number,
659 "tcp.data_len: %d, tcp.flags: 0x%x",
663 s =
format (s,
"snat.flags: 0x%x", o->
snat.flags);
669 s = (*helper_fp) (
b, s);
691 s =
format (s,
"qos.bits: %x, qos.source: %x",
697 s =
format (s,
"gbp.flags: %x, gbp.sclass: %d",
701 s =
format (s,
"gso_size: %d, gso_l4_hdr_sz: %d",
711 s = (*helper_fp) (
b, s);
735 u32 *flagp = va_arg (*args,
u32 *);
744 #define _(bit,enum,str,verbose) \
745 else if (unformat (input, str)) \
747 flags |= (1 << LOG2_VLIB_BUFFER_FLAG_USER(bit)); \
763 u32 *flagp = va_arg (*args,
u32 *);
771 #define _(bit, enum, str, verbose) \
772 else if (unformat (input, str)) \
774 oflags |= (1 << bit); \
782 *flagp = (
u32) oflags;
790 u32 *hw_if_index = va_arg (*args,
u32 *);
797 if (
c->unformat_device_name
810 u32 *result = va_arg (*args,
u32 *);
812 u32 hw_if_index,
id, id_specified;
818 if (
unformat (input,
"%_%v.%d%_", &if_name, &
id)
837 if (!(p =
hash_get (
hi->sub_interface_sw_if_index_by_id,
id)))
853 u32 *result = va_arg (*args,
u32 *);
862 else if (
unformat (input,
"enable"))
874 u32 *result = va_arg (*args,
u32 *);
vnet_interface_main_t * im
@ VNET_SW_INTERFACE_FLAG_ERROR
vnet_sw_interface_type_t type
@ VNET_HW_IF_RX_MODE_ADAPTIVE
struct _vnet_device_class vnet_device_class_t
static_always_inline vnet_hw_if_rx_queue_t * vnet_hw_if_get_rx_queue(vnet_main_t *vnm, u32 queue_index)
static counter_t vlib_get_simple_counter(vlib_simple_counter_main_t *cm, u32 index)
Get the value of a simple counter Scrapes the entire set of per-thread counters.
static vnet_sw_interface_t * vnet_get_sw_interface_or_null(vnet_main_t *vnm, u32 sw_if_index)
struct vnet_buffer_opaque_t::@157::@168 cop
u8 * format_l2_output_features(u8 *s, va_list *args)
struct vnet_buffer_opaque_t::@157::@162 l2_classify
vnet_buffer_opquae_formatter_t * buffer_opaque_format_helpers
vl_api_tunnel_mode_t mode
static uword vnet_sw_interface_is_api_visible(vnet_main_t *vnm, u32 sw_if_index)
@ VNET_SW_INTERFACE_FLAG_ADMIN_UP
@ VNET_HW_IF_RX_MODE_POLLING
@ VNET_HW_INTERFACE_FLAG_LINK_UP
vlib_simple_counter_main_t * sw_if_counters
@ foreach_vnet_buffer_offload_flag
static vnet_device_class_t * vnet_get_device_class(vnet_main_t *vnm, u32 dev_class_index)
vnet_buffer_opquae_formatter_t * buffer_opaque2_format_helpers
__clib_export u8 * format_bitmap_list(u8 *s, va_list *args)
Format a bitmap as a list.
struct vnet_buffer_opaque2_t::@203 gbp
struct vnet_buffer_opaque_t::@157::@171 snat
vnet_sw_interface_flags_t flags
static vnet_hw_interface_class_t * vnet_get_hw_interface_class(vnet_main_t *vnm, u32 hw_class_index)
struct vnet_buffer_opaque_t::@157::@159 ip
struct vnet_buffer_opaque_t::@157::@167 ip_frag
struct vnet_buffer_opaque_t::@157::@165 map
@ foreach_vnet_buffer_flag
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
#define vec_add1(V, E)
Add 1 element to end of vector (unspecified alignment).
static vnet_hw_interface_t * vnet_get_hw_interface(vnet_main_t *vnm, u32 hw_if_index)
vnet_main_t * vnet_get_main(void)
static uword clib_bitmap_count_set_bits(uword *ai)
Return the number of set bits in a bitmap.
Combined counter to hold both packets and byte differences.
struct vnet_buffer_opaque2_t::@202 qos
QoS marking data that needs to persist from the recording nodes (nominally in the ingress path) to th...
@ VNET_HW_IF_RX_MODE_INTERRUPT
static_always_inline vnet_hw_if_tx_queue_t * vnet_hw_if_get_tx_queue(vnet_main_t *vnm, u32 queue_index)
vnet_feature_config_main_t * cm
vnet_device_class_t * device_classes
#define VNET_HW_INTERFACE_BOND_INFO_SLAVE
counter_t packets
packet counter
vlib_combined_counter_main_t * combined_sw_if_counters
struct vnet_buffer_opaque_t::@157::@164 ipsec
struct vnet_buffer_opaque_t::@157::@169 lisp
struct vnet_buffer_opaque_t::@157::@170 tcp
struct vnet_buffer_opaque_t::@157::@166 map_t
unformat_function_t unformat_hash_vec_string
static void vlib_get_combined_counter(const vlib_combined_counter_main_t *cm, u32 index, vlib_counter_t *result)
Get the value of a combined counter, never called in the speed path Scrapes the entire set of per-thr...
#define vec_free(V)
Free vector's memory (no header).
description fragment has unexpected format
A collection of combined counters.
u32 sw_if_index[VLIB_N_RX_TX]
counter_t bytes
byte counter
#define vec_foreach(var, vec)
Vector iterator.
@ VNET_SW_INTERFACE_FLAG_PUNT
uword * hw_interface_by_name
A collection of simple counters.
struct vnet_buffer_opaque_t::@157::@163 policer
struct vnet_buffer_opaque_t::@157::@160 mpls
struct vnet_buffer_opaque_t::@157::opaque_l2 l2
u8 *(* vnet_buffer_opquae_formatter_t)(const vlib_buffer_t *b, u8 *s)
@ VNET_SW_INTERFACE_TYPE_HARDWARE
#define clib_bitmap_foreach(i, ai)
Macro to iterate across set bits in a bitmap.
static vnet_sw_interface_t * vnet_get_sup_sw_interface(vnet_main_t *vnm, u32 sw_if_index)
vl_api_interface_index_t sw_if_index
struct vnet_buffer_opaque_t::@157::@161 l2t
struct _vnet_hw_interface_class vnet_hw_interface_class_t
u32 opaque[10]
Opaque data used by sub-graphs for their own purposes.
vnet_interface_main_t interface_main
VLIB buffer representation.
vl_api_wireguard_peer_flags_t flags