From 7ca5aaac10e95306f74ea4afd52110dd46aa0381 Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Tue, 24 Sep 2019 18:10:49 +0200 Subject: vlib: add flag to explicitelly mark nodes which can init per-node packet trace Type: feature Change-Id: I913f08383ee1c24d610c3d2aac07cef402570e2c Signed-off-by: Damjan Marion --- src/plugins/avf/input.c | 1 + src/plugins/dpdk/device/node.c | 1 + src/plugins/dpdk/ipsec/crypto_node.c | 1 + src/plugins/ixge/ixge.c | 1 + src/plugins/marvell/pp2/input.c | 1 + src/plugins/memif/node.c | 1 + src/plugins/rdma/input.c | 1 + src/plugins/vmxnet3/input.c | 1 + src/vlib/handoff_trace.c | 1 + src/vlib/node.h | 1 + src/vlib/trace.c | 12 ++++++++++++ src/vnet/bonding/device.c | 1 + src/vnet/devices/af_packet/node.c | 1 + src/vnet/devices/netmap/node.c | 1 + src/vnet/devices/virtio/node.c | 1 + src/vnet/devices/virtio/vhost_user_input.c | 1 + src/vnet/ethernet/p2p_ethernet_input.c | 1 + src/vnet/ip/punt_node.c | 1 + src/vnet/pg/input.c | 1 + src/vnet/session/session_node.c | 1 + src/vnet/unix/tuntap.c | 1 + 21 files changed, 32 insertions(+) diff --git a/src/plugins/avf/input.c b/src/plugins/avf/input.c index d6dda6c4b92..8d1ded88505 100644 --- a/src/plugins/avf/input.c +++ b/src/plugins/avf/input.c @@ -468,6 +468,7 @@ VLIB_REGISTER_NODE (avf_input_node) = { .state = VLIB_NODE_STATE_DISABLED, .n_errors = AVF_INPUT_N_ERROR, .error_strings = avf_input_error_strings, + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, }; /* *INDENT-ON* */ diff --git a/src/plugins/dpdk/device/node.c b/src/plugins/dpdk/device/node.c index 0e6fba3af7f..a16d48591e8 100644 --- a/src/plugins/dpdk/device/node.c +++ b/src/plugins/dpdk/device/node.c @@ -478,6 +478,7 @@ VLIB_REGISTER_NODE (dpdk_input_node) = { .type = VLIB_NODE_TYPE_INPUT, .name = "dpdk-input", .sibling_of = "device-input", + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, /* Will be enabled if/when hardware is detected. */ .state = VLIB_NODE_STATE_DISABLED, diff --git a/src/plugins/dpdk/ipsec/crypto_node.c b/src/plugins/dpdk/ipsec/crypto_node.c index 7fae7d65581..76e57a3228a 100644 --- a/src/plugins/dpdk/ipsec/crypto_node.c +++ b/src/plugins/dpdk/ipsec/crypto_node.c @@ -303,6 +303,7 @@ VLIB_NODE_FN (dpdk_crypto_input_node) (vlib_main_t * vm, VLIB_REGISTER_NODE (dpdk_crypto_input_node) = { .name = "dpdk-crypto-input", + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .format_trace = format_dpdk_crypto_input_trace, .type = VLIB_NODE_TYPE_INPUT, .state = VLIB_NODE_STATE_DISABLED, diff --git a/src/plugins/ixge/ixge.c b/src/plugins/ixge/ixge.c index c27042df8b2..6ab79c9872c 100644 --- a/src/plugins/ixge/ixge.c +++ b/src/plugins/ixge/ixge.c @@ -2219,6 +2219,7 @@ VLIB_REGISTER_NODE (ixge_input_node, static) = { .function = ixge_input, .type = VLIB_NODE_TYPE_INPUT, .name = "ixge-input", + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, /* Will be enabled if/when hardware is detected. */ .state = VLIB_NODE_STATE_DISABLED, diff --git a/src/plugins/marvell/pp2/input.c b/src/plugins/marvell/pp2/input.c index 50f09633272..ec3d376714d 100644 --- a/src/plugins/marvell/pp2/input.c +++ b/src/plugins/marvell/pp2/input.c @@ -374,6 +374,7 @@ mrvl_pp2_input_fn (vlib_main_t * vm, vlib_node_runtime_t * node, /* *INDENT-OFF* */ VLIB_REGISTER_NODE (mrvl_pp2_input_node) = { .function = mrvl_pp2_input_fn, + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .name = "mrvl-pp2-input", .sibling_of = "device-input", .format_trace = format_mrvl_pp2_input_trace, diff --git a/src/plugins/memif/node.c b/src/plugins/memif/node.c index 154d2444957..aef8ffbd0c2 100644 --- a/src/plugins/memif/node.c +++ b/src/plugins/memif/node.c @@ -925,6 +925,7 @@ VLIB_NODE_FN (memif_input_node) (vlib_main_t * vm, /* *INDENT-OFF* */ VLIB_REGISTER_NODE (memif_input_node) = { .name = "memif-input", + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .sibling_of = "device-input", .format_trace = format_memif_input_trace, .type = VLIB_NODE_TYPE_INPUT, diff --git a/src/plugins/rdma/input.c b/src/plugins/rdma/input.c index 3c9481f2e07..30fae83e058 100644 --- a/src/plugins/rdma/input.c +++ b/src/plugins/rdma/input.c @@ -360,6 +360,7 @@ VLIB_NODE_FN (rdma_input_node) (vlib_main_t * vm, /* *INDENT-OFF* */ VLIB_REGISTER_NODE (rdma_input_node) = { .name = "rdma-input", + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .sibling_of = "device-input", .format_trace = format_rdma_input_trace, .type = VLIB_NODE_TYPE_INPUT, diff --git a/src/plugins/vmxnet3/input.c b/src/plugins/vmxnet3/input.c index 64fdf1c300c..173ab915b2b 100644 --- a/src/plugins/vmxnet3/input.c +++ b/src/plugins/vmxnet3/input.c @@ -481,6 +481,7 @@ VLIB_NODE_FN (vmxnet3_input_node) (vlib_main_t * vm, VLIB_REGISTER_NODE (vmxnet3_input_node) = { .name = "vmxnet3-input", .sibling_of = "device-input", + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .format_trace = format_vmxnet3_input_trace, .type = VLIB_NODE_TYPE_INPUT, .state = VLIB_NODE_STATE_DISABLED, diff --git a/src/vlib/handoff_trace.c b/src/vlib/handoff_trace.c index 7a6743885da..fcb514bd837 100644 --- a/src/vlib/handoff_trace.c +++ b/src/vlib/handoff_trace.c @@ -79,6 +79,7 @@ typedef enum VLIB_REGISTER_NODE (handoff_trace_node, static) = { .name = "handoff_trace", + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .function = handoff_trace_node_fn, .vector_size = sizeof (u32), .format_trace = format_handoff_trace, diff --git a/src/vlib/node.h b/src/vlib/node.h index 2db31c68d7f..9f324f79fa4 100644 --- a/src/vlib/node.h +++ b/src/vlib/node.h @@ -303,6 +303,7 @@ typedef struct vlib_node_t #define VLIB_NODE_FLAG_SWITCH_FROM_INTERRUPT_TO_POLLING_MODE (1 << 6) #define VLIB_NODE_FLAG_SWITCH_FROM_POLLING_TO_INTERRUPT_MODE (1 << 7) +#define VLIB_NODE_FLAG_TRACE_SUPPORTED (1 << 8) /* State for input nodes. */ u8 state; diff --git a/src/vlib/trace.c b/src/vlib/trace.c index 70621135c68..530598d349d 100644 --- a/src/vlib/trace.c +++ b/src/vlib/trace.c @@ -357,6 +357,7 @@ cli_add_trace_buffer (vlib_main_t * vm, { unformat_input_t _line_input, *line_input = &_line_input; vlib_trace_main_t *tm; + vlib_node_t *node; vlib_trace_node_t *tn; u32 node_index, add; u8 verbose = 0; @@ -383,6 +384,17 @@ cli_add_trace_buffer (vlib_main_t * vm, } } + node = vlib_get_node (vm, node_index); + + if ((node->flags & VLIB_NODE_FLAG_TRACE_SUPPORTED) == 0) + { + error = clib_error_create ("node '%U' doesn't support per-node " + "tracing. There may be another way to " + "initiate trace on this node.", + format_vlib_node_name, vm, node_index); + goto done; + } + /* *INDENT-OFF* */ foreach_vlib_main (( { diff --git a/src/vnet/bonding/device.c b/src/vnet/bonding/device.c index 77a53b6a17a..f5470c3ff2d 100644 --- a/src/vnet/bonding/device.c +++ b/src/vnet/bonding/device.c @@ -790,6 +790,7 @@ bond_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f) /* *INDENT-OFF* */ VLIB_REGISTER_NODE (bond_process_node) = { .function = bond_process, + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .type = VLIB_NODE_TYPE_PROCESS, .name = "bond-process", }; diff --git a/src/vnet/devices/af_packet/node.c b/src/vnet/devices/af_packet/node.c index 85f3e0118cf..196c0882bde 100644 --- a/src/vnet/devices/af_packet/node.c +++ b/src/vnet/devices/af_packet/node.c @@ -369,6 +369,7 @@ VLIB_NODE_FN (af_packet_input_node) (vlib_main_t * vm, /* *INDENT-OFF* */ VLIB_REGISTER_NODE (af_packet_input_node) = { .name = "af-packet-input", + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .sibling_of = "device-input", .format_trace = format_af_packet_input_trace, .type = VLIB_NODE_TYPE_INPUT, diff --git a/src/vnet/devices/netmap/node.c b/src/vnet/devices/netmap/node.c index 00e31c0c1a2..bc55ecc8eb1 100644 --- a/src/vnet/devices/netmap/node.c +++ b/src/vnet/devices/netmap/node.c @@ -278,6 +278,7 @@ VLIB_NODE_FN (netmap_input_node) (vlib_main_t * vm, VLIB_REGISTER_NODE (netmap_input_node) = { .name = "netmap-input", .sibling_of = "device-input", + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .format_trace = format_netmap_input_trace, .type = VLIB_NODE_TYPE_INPUT, /* default state is INTERRUPT mode, switch to POLLING if worker threads are enabled */ diff --git a/src/vnet/devices/virtio/node.c b/src/vnet/devices/virtio/node.c index 8441250ff1d..9711c7a030b 100644 --- a/src/vnet/devices/virtio/node.c +++ b/src/vnet/devices/virtio/node.c @@ -398,6 +398,7 @@ VLIB_REGISTER_NODE (virtio_input_node) = { .name = "virtio-input", .sibling_of = "device-input", .format_trace = format_virtio_input_trace, + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .type = VLIB_NODE_TYPE_INPUT, .state = VLIB_NODE_STATE_INTERRUPT, .n_errors = VIRTIO_INPUT_N_ERROR, diff --git a/src/vnet/devices/virtio/vhost_user_input.c b/src/vnet/devices/virtio/vhost_user_input.c index 488764ba0b7..2d90ed1224d 100644 --- a/src/vnet/devices/virtio/vhost_user_input.c +++ b/src/vnet/devices/virtio/vhost_user_input.c @@ -794,6 +794,7 @@ VLIB_REGISTER_NODE (vhost_user_input_node) = { .type = VLIB_NODE_TYPE_INPUT, .name = "vhost-user-input", .sibling_of = "device-input", + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, /* Will be enabled if/when hardware is detected. */ .state = VLIB_NODE_STATE_DISABLED, diff --git a/src/vnet/ethernet/p2p_ethernet_input.c b/src/vnet/ethernet/p2p_ethernet_input.c index 36845fcda1b..7e5f7cadc0d 100644 --- a/src/vnet/ethernet/p2p_ethernet_input.c +++ b/src/vnet/ethernet/p2p_ethernet_input.c @@ -237,6 +237,7 @@ VLIB_REGISTER_NODE (p2p_ethernet_input_node) = { .vector_size = sizeof (u32), .format_trace = format_p2p_ethernet_trace, .type = VLIB_NODE_TYPE_INTERNAL, + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .n_errors = ARRAY_LEN(p2p_ethernet_error_strings), .error_strings = p2p_ethernet_error_strings, diff --git a/src/vnet/ip/punt_node.c b/src/vnet/ip/punt_node.c index 8a39d118a81..b48af84475c 100644 --- a/src/vnet/ip/punt_node.c +++ b/src/vnet/ip/punt_node.c @@ -621,6 +621,7 @@ VLIB_REGISTER_NODE (punt_socket_rx_node) = { .function = punt_socket_rx, .name = "punt-socket-rx", + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .type = VLIB_NODE_TYPE_INPUT, .state = VLIB_NODE_STATE_INTERRUPT, .vector_size = 1, diff --git a/src/vnet/pg/input.c b/src/vnet/pg/input.c index bb760b09b26..39aea7c3c5a 100644 --- a/src/vnet/pg/input.c +++ b/src/vnet/pg/input.c @@ -1797,6 +1797,7 @@ pg_input (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) /* *INDENT-OFF* */ VLIB_REGISTER_NODE (pg_input_node) = { .function = pg_input, + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .name = "pg-input", .sibling_of = "device-input", .type = VLIB_NODE_TYPE_INPUT, diff --git a/src/vnet/session/session_node.c b/src/vnet/session/session_node.c index ad18637a952..891870c9d45 100644 --- a/src/vnet/session/session_node.c +++ b/src/vnet/session/session_node.c @@ -1339,6 +1339,7 @@ session_queue_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node, VLIB_REGISTER_NODE (session_queue_node) = { .function = session_queue_node_fn, + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .name = "session-queue", .format_trace = format_session_queue_trace, .type = VLIB_NODE_TYPE_INPUT, diff --git a/src/vnet/unix/tuntap.c b/src/vnet/unix/tuntap.c index 9d6f8992414..72c4f73e6df 100644 --- a/src/vnet/unix/tuntap.c +++ b/src/vnet/unix/tuntap.c @@ -398,6 +398,7 @@ static char *tuntap_rx_error_strings[] = { /* *INDENT-OFF* */ VLIB_REGISTER_NODE (tuntap_rx_node,static) = { .function = tuntap_rx, + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .name = "tuntap-rx", .sibling_of = "device-input", .type = VLIB_NODE_TYPE_INPUT, -- cgit 1.2.3-korg