app/testpmd: configure event display
authorGaetan Rivet <gaetan.rivet@6wind.com>
Tue, 2 May 2017 09:54:06 +0000 (11:54 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Sat, 6 May 2017 08:39:31 +0000 (10:39 +0200)
Add two parameters to testpmd:

  --print-event <event name>
  --mask-event <event name>

To enable or disable to printing of events. This display is configured
on a per-event basis. By default, all except VF_MBOX are displayed.

Fixes: 76ad4a2d82d4 ("app/testpmd: add generic event handler")

Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
Acked-by: Jingjing Wu <jingjing.wu@intel.com>
app/test-pmd/parameters.c
app/test-pmd/testpmd.c
app/test-pmd/testpmd.h
doc/guides/testpmd_app_ug/run_app.rst

index 36f7dd8..23f2fa3 100644 (file)
@@ -206,6 +206,10 @@ usage(char* progname)
        printf("  --no-rmv-interrupt: disable device removal interrupt.\n");
        printf("  --bitrate-stats=N: set the logical core N to perform "
                "bit-rate calculation.\n");
+       printf("  --print-event <unknown|intr_lsc|queue_state|intr_reset|vf_mbox|macsec|intr_rmv>: "
+              "enable print of designated event");
+       printf("  --mask-event <unknown|intr_lsc|queue_state|intr_reset|vf_mbox|macsec|intr_rmv>: "
+              "disable print of designated event");
 }
 
 #ifdef RTE_LIBRTE_CMDLINE
@@ -503,6 +507,36 @@ parse_ringnuma_config(const char *q_arg)
        return 0;
 }
 
+static int
+parse_event_printing_config(const char *optarg, int enable)
+{
+       uint32_t mask = 0;
+
+       if (!strcmp(optarg, "unknown"))
+               mask = UINT32_C(1) << RTE_ETH_EVENT_UNKNOWN;
+       else if (!strcmp(optarg, "intr_lsc"))
+               mask = UINT32_C(1) << RTE_ETH_EVENT_INTR_LSC;
+       else if (!strcmp(optarg, "queue_state"))
+               mask = UINT32_C(1) << RTE_ETH_EVENT_QUEUE_STATE;
+       else if (!strcmp(optarg, "intr_reset"))
+               mask = UINT32_C(1) << RTE_ETH_EVENT_INTR_RESET;
+       else if (!strcmp(optarg, "vf_mbox"))
+               mask = UINT32_C(1) << RTE_ETH_EVENT_VF_MBOX;
+       else if (!strcmp(optarg, "macsec"))
+               mask = UINT32_C(1) << RTE_ETH_EVENT_MACSEC;
+       else if (!strcmp(optarg, "intr_rmv"))
+               mask = UINT32_C(1) << RTE_ETH_EVENT_INTR_RMV;
+       else {
+               fprintf(stderr, "Invalid event: %s\n", optarg);
+               return -1;
+       }
+       if (enable)
+               event_print_mask |= mask;
+       else
+               event_print_mask &= ~mask;
+       return 0;
+}
+
 void
 launch_args_parse(int argc, char** argv)
 {
@@ -581,6 +615,8 @@ launch_args_parse(int argc, char** argv)
                { "disable-link-check",         0, 0, 0 },
                { "no-lsc-interrupt",           0, 0, 0 },
                { "no-rmv-interrupt",           0, 0, 0 },
+               { "print-event",                1, 0, 0 },
+               { "mask-event",                 1, 0, 0 },
                { 0, 0, 0, 0 },
        };
 
@@ -1032,6 +1068,16 @@ launch_args_parse(int argc, char** argv)
                                lsc_interrupt = 0;
                        if (!strcmp(lgopts[opt_idx].name, "no-rmv-interrupt"))
                                rmv_interrupt = 0;
+                       if (!strcmp(lgopts[opt_idx].name, "print-event"))
+                               if (parse_event_printing_config(optarg, 1)) {
+                                       rte_exit(EXIT_FAILURE,
+                                                "invalid print-event argument\n");
+                               }
+                       if (!strcmp(lgopts[opt_idx].name, "mask-event"))
+                               if (parse_event_printing_config(optarg, 0)) {
+                                       rte_exit(EXIT_FAILURE,
+                                                "invalid mask-event argument\n");
+                               }
 
                        break;
                case 'h':
index dd216f6..cec1cb9 100644 (file)
@@ -281,6 +281,17 @@ uint8_t lsc_interrupt = 1; /* enabled by default */
  */
 uint8_t rmv_interrupt = 1; /* enabled by default */
 
+/*
+ * Display or mask ether events
+ * Default to all events except VF_MBOX
+ */
+uint32_t event_print_mask = (UINT32_C(1) << RTE_ETH_EVENT_UNKNOWN) |
+                           (UINT32_C(1) << RTE_ETH_EVENT_INTR_LSC) |
+                           (UINT32_C(1) << RTE_ETH_EVENT_QUEUE_STATE) |
+                           (UINT32_C(1) << RTE_ETH_EVENT_INTR_RESET) |
+                           (UINT32_C(1) << RTE_ETH_EVENT_MACSEC) |
+                           (UINT32_C(1) << RTE_ETH_EVENT_INTR_RMV);
+
 /*
  * NIC bypass mode configuration options.
  */
@@ -1814,7 +1825,7 @@ eth_event_callback(uint8_t port_id, enum rte_eth_event_type type, void *param)
                fprintf(stderr, "\nPort %" PRIu8 ": %s called upon invalid event %d\n",
                        port_id, __func__, type);
                fflush(stderr);
-       } else {
+       } else if (event_print_mask & (UINT32_C(1) << type)) {
                printf("\nPort %" PRIu8 ": %s event\n", port_id,
                        event_desc[type]);
                fflush(stdout);
index 8b3d903..3c6a59a 100644 (file)
@@ -308,6 +308,8 @@ extern uint8_t no_link_check; /**<set by "--disable-link-check" parameter */
 extern volatile int test_done; /* stop packet forwarding when set to 1. */
 extern uint8_t lsc_interrupt; /**< disabled by "--no-lsc-interrupt" parameter */
 extern uint8_t rmv_interrupt; /**< disabled by "--no-rmv-interrupt" parameter */
+extern uint32_t event_print_mask;
+/**< set by "--print-event xxxx" and "--mask-event xxxx parameters */
 
 #ifdef RTE_NIC_BYPASS
 extern uint32_t bypass_timeout; /**< Store the NIC bypass watchdog timeout */
index a117354..98f6d1f 100644 (file)
@@ -477,3 +477,11 @@ The commandline options are:
 *   ``--bitrate-stats=N``
 
     Set the logical core N to perform bitrate calculation.
+
+*   ``--print-event <unknown|intr_lsc|queue_state|intr_reset|vf_mbox|macsec|intr_rmv>``
+
+    Enable printing the occurrence of the designated event.
+
+*   ``--mask-event <unknown|intr_lsc|queue_state|intr_reset|vf_mbox|macsec|intr_rmv>``
+
+    Disable printing the occurrence of the designated event.