app/testpmd: add extended Rx queue setup
[dpdk.git] / app / test-pmd / cmdline.c
index 08e123f..07ee4e4 100644 (file)
@@ -183,7 +183,7 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "show (rxq|txq) info (port_id) (queue_id)\n"
                        "    Display information for configured RX/TX queue.\n\n"
 
-                       "show config (rxtx|cores|fwd|txpkts)\n"
+                       "show config (rxtx|cores|fwd|rxoffs|rxpkts|txpkts)\n"
                        "    Display the given configuration.\n\n"
 
                        "read rxd (port_id) (queue_id) (rxd_id)\n"
@@ -248,6 +248,12 @@ static void cmd_help_long_parsed(void *parsed_result,
 
                        "show port (port_id) macs|mcast_macs"
                        "       Display list of mac addresses added to port.\n\n"
+
+                       "show port (port_id) fec capabilities"
+                       "       Show fec capabilities of a port.\n\n"
+
+                       "show port (port_id) fec_mode"
+                       "       Show fec mode of a port.\n\n"
                );
        }
 
@@ -288,6 +294,18 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "    Set the transmit delay time and number of retries,"
                        " effective when retry is enabled.\n\n"
 
+                       "set rxoffs (x[,y]*)\n"
+                       "    Set the offset of each packet segment on"
+                       " receiving if split feature is engaged."
+                       " Affects only the queues configured with split"
+                       " offloads.\n\n"
+
+                       "set rxpkts (x[,y]*)\n"
+                       "    Set the length of each segment to scatter"
+                       " packets on receiving if split feature is engaged."
+                       " Affects only the queues configured with split"
+                       " offloads.\n\n"
+
                        "set txpkts (x[,y]*)\n"
                        "    Set the length of each segment of TXONLY"
                        " and optionally CSUM packets.\n\n"
@@ -751,6 +769,9 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "show port (port_id) queue-region\n"
                        "    show all queue region related configuration info\n\n"
 
+                       "set port (port_id) fec_mode auto|off|rs|baser\n"
+                       "    set fec mode for a specific port\n\n"
+
                        , list_pkt_forwarding_modes()
                );
        }
@@ -874,16 +895,16 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "port config <port_id> rx_offload vlan_strip|"
                        "ipv4_cksum|udp_cksum|tcp_cksum|tcp_lro|qinq_strip|"
                        "outer_ipv4_cksum|macsec_strip|header_split|"
-                       "vlan_filter|vlan_extend|jumbo_frame|"
-                       "scatter|timestamp|security|keep_crc on|off\n"
+                       "vlan_filter|vlan_extend|jumbo_frame|scatter|"
+                       "buffer_split|timestamp|security|keep_crc on|off\n"
                        "     Enable or disable a per port Rx offloading"
                        " on all Rx queues of a port\n\n"
 
                        "port (port_id) rxq (queue_id) rx_offload vlan_strip|"
                        "ipv4_cksum|udp_cksum|tcp_cksum|tcp_lro|qinq_strip|"
                        "outer_ipv4_cksum|macsec_strip|header_split|"
-                       "vlan_filter|vlan_extend|jumbo_frame|"
-                       "scatter|timestamp|security|keep_crc on|off\n"
+                       "vlan_filter|vlan_extend|jumbo_frame|scatter|"
+                       "buffer_split|timestamp|security|keep_crc on|off\n"
                        "    Enable or disable a per queue Rx offloading"
                        " only on a specific Rx queue\n\n"
 
@@ -1143,6 +1164,24 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "    List and destroy aged flows"
                        " flow rules\n\n"
 
+                       "flow shared_action {port_id} create"
+                       " [action_id {shared_action_id}]"
+                       " [ingress] [egress]"
+                       " action {action} / end\n"
+                       "    Create shared action.\n\n"
+
+                       "flow shared_action {port_id} update"
+                       " {shared_action_id} action {action} / end\n"
+                       "    Update shared action.\n\n"
+
+                       "flow shared_action {port_id} destroy"
+                       " action_id {shared_action_id} [...]\n"
+                       "    Destroy specific shared actions.\n\n"
+
+                       "flow shared_action {port_id} query"
+                       " {shared_action_id}\n"
+                       "    Query an existing shared action.\n\n"
+
                        "set vxlan ip-version (ipv4|ipv6) vni (vni) udp-src"
                        " (udp-src) udp-dst (udp-dst) ip-src (ip-src) ip-dst"
                        " (ip-dst) eth-src (eth-src) eth-dst (eth-dst)\n"
@@ -2898,7 +2937,7 @@ cmd_setup_rxtx_queue_parsed(
                if (!numa_support || socket_id == NUMA_NO_CONFIG)
                        socket_id = port->socket_id;
 
-               mp = mbuf_pool_find(socket_id);
+               mp = mbuf_pool_find(socket_id, 0);
                if (mp == NULL) {
                        printf("Failed to setup RX queue: "
                                "No mempool allocation"
@@ -2906,12 +2945,12 @@ cmd_setup_rxtx_queue_parsed(
                                rxring_numa[res->portid]);
                        return;
                }
-               ret = rte_eth_rx_queue_setup(res->portid,
-                                            res->qid,
-                                            port->nb_rx_desc[res->qid],
-                                            socket_id,
-                                            &port->rx_conf[res->qid],
-                                            mp);
+               ret = rx_queue_setup(res->portid,
+                                    res->qid,
+                                    port->nb_rx_desc[res->qid],
+                                    socket_id,
+                                    &port->rx_conf[res->qid],
+                                    mp);
                if (ret)
                        printf("Failed to setup RX queue\n");
        } else {
@@ -3880,6 +3919,98 @@ cmdline_parse_inst_t cmd_set_log = {
        },
 };
 
+/* *** SET SEGMENT OFFSETS OF RX PACKETS SPLIT *** */
+
+struct cmd_set_rxoffs_result {
+       cmdline_fixed_string_t cmd_keyword;
+       cmdline_fixed_string_t rxoffs;
+       cmdline_fixed_string_t seg_offsets;
+};
+
+static void
+cmd_set_rxoffs_parsed(void *parsed_result,
+                     __rte_unused struct cmdline *cl,
+                     __rte_unused void *data)
+{
+       struct cmd_set_rxoffs_result *res;
+       unsigned int seg_offsets[MAX_SEGS_BUFFER_SPLIT];
+       unsigned int nb_segs;
+
+       res = parsed_result;
+       nb_segs = parse_item_list(res->seg_offsets, "segment offsets",
+                                 MAX_SEGS_BUFFER_SPLIT, seg_offsets, 0);
+       if (nb_segs > 0)
+               set_rx_pkt_offsets(seg_offsets, nb_segs);
+}
+
+cmdline_parse_token_string_t cmd_set_rxoffs_keyword =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_rxoffs_result,
+                                cmd_keyword, "set");
+cmdline_parse_token_string_t cmd_set_rxoffs_name =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_rxoffs_result,
+                                rxoffs, "rxoffs");
+cmdline_parse_token_string_t cmd_set_rxoffs_offsets =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_rxoffs_result,
+                                seg_offsets, NULL);
+
+cmdline_parse_inst_t cmd_set_rxoffs = {
+       .f = cmd_set_rxoffs_parsed,
+       .data = NULL,
+       .help_str = "set rxoffs <len0[,len1]*>",
+       .tokens = {
+               (void *)&cmd_set_rxoffs_keyword,
+               (void *)&cmd_set_rxoffs_name,
+               (void *)&cmd_set_rxoffs_offsets,
+               NULL,
+       },
+};
+
+/* *** SET SEGMENT LENGTHS OF RX PACKETS SPLIT *** */
+
+struct cmd_set_rxpkts_result {
+       cmdline_fixed_string_t cmd_keyword;
+       cmdline_fixed_string_t rxpkts;
+       cmdline_fixed_string_t seg_lengths;
+};
+
+static void
+cmd_set_rxpkts_parsed(void *parsed_result,
+                     __rte_unused struct cmdline *cl,
+                     __rte_unused void *data)
+{
+       struct cmd_set_rxpkts_result *res;
+       unsigned int seg_lengths[MAX_SEGS_BUFFER_SPLIT];
+       unsigned int nb_segs;
+
+       res = parsed_result;
+       nb_segs = parse_item_list(res->seg_lengths, "segment lengths",
+                                 MAX_SEGS_BUFFER_SPLIT, seg_lengths, 0);
+       if (nb_segs > 0)
+               set_rx_pkt_segments(seg_lengths, nb_segs);
+}
+
+cmdline_parse_token_string_t cmd_set_rxpkts_keyword =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_rxpkts_result,
+                                cmd_keyword, "set");
+cmdline_parse_token_string_t cmd_set_rxpkts_name =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_rxpkts_result,
+                                rxpkts, "rxpkts");
+cmdline_parse_token_string_t cmd_set_rxpkts_lengths =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_rxpkts_result,
+                                seg_lengths, NULL);
+
+cmdline_parse_inst_t cmd_set_rxpkts = {
+       .f = cmd_set_rxpkts_parsed,
+       .data = NULL,
+       .help_str = "set rxpkts <len0[,len1]*>",
+       .tokens = {
+               (void *)&cmd_set_rxpkts_keyword,
+               (void *)&cmd_set_rxpkts_name,
+               (void *)&cmd_set_rxpkts_lengths,
+               NULL,
+       },
+};
+
 /* *** SET SEGMENT LENGTHS OF TXONLY PACKETS *** */
 
 struct cmd_set_txpkts_result {
@@ -4294,6 +4425,9 @@ cmd_tx_vlan_set_parsed(void *parsed_result,
 {
        struct cmd_tx_vlan_set_result *res = parsed_result;
 
+       if (port_id_is_invalid(res->port_id, ENABLED_WARN))
+               return;
+
        if (!port_is_stopped(res->port_id)) {
                printf("Please stop port %d first\n", res->port_id);
                return;
@@ -4348,6 +4482,9 @@ cmd_tx_vlan_set_qinq_parsed(void *parsed_result,
 {
        struct cmd_tx_vlan_set_qinq_result *res = parsed_result;
 
+       if (port_id_is_invalid(res->port_id, ENABLED_WARN))
+               return;
+
        if (!port_is_stopped(res->port_id)) {
                printf("Please stop port %d first\n", res->port_id);
                return;
@@ -4461,6 +4598,9 @@ cmd_tx_vlan_reset_parsed(void *parsed_result,
 {
        struct cmd_tx_vlan_reset_result *res = parsed_result;
 
+       if (port_id_is_invalid(res->port_id, ENABLED_WARN))
+               return;
+
        if (!port_is_stopped(res->port_id)) {
                printf("Please stop port %d first\n", res->port_id);
                return;
@@ -7499,6 +7639,10 @@ static void cmd_showcfg_parsed(void *parsed_result,
                fwd_lcores_config_display();
        else if (!strcmp(res->what, "fwd"))
                pkt_fwd_config_display(&cur_fwd_config);
+       else if (!strcmp(res->what, "rxoffs"))
+               show_rx_pkt_offsets();
+       else if (!strcmp(res->what, "rxpkts"))
+               show_rx_pkt_segments();
        else if (!strcmp(res->what, "txpkts"))
                show_tx_pkt_segments();
        else if (!strcmp(res->what, "txtimes"))
@@ -7511,12 +7655,12 @@ cmdline_parse_token_string_t cmd_showcfg_port =
        TOKEN_STRING_INITIALIZER(struct cmd_showcfg_result, cfg, "config");
 cmdline_parse_token_string_t cmd_showcfg_what =
        TOKEN_STRING_INITIALIZER(struct cmd_showcfg_result, what,
-                                "rxtx#cores#fwd#txpkts#txtimes");
+                                "rxtx#cores#fwd#rxoffs#rxpkts#txpkts#txtimes");
 
 cmdline_parse_inst_t cmd_showcfg = {
        .f = cmd_showcfg_parsed,
        .data = NULL,
-       .help_str = "show config rxtx|cores|fwd|txpkts|txtimes",
+       .help_str = "show config rxtx|cores|fwd|rxoffs|rxpkts|txpkts|txtimes",
        .tokens = {
                (void *)&cmd_showcfg_show,
                (void *)&cmd_showcfg_port,
@@ -18399,7 +18543,8 @@ cmdline_parse_token_string_t cmd_config_per_port_rx_offload_result_offload =
                 offload, "vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#"
                           "qinq_strip#outer_ipv4_cksum#macsec_strip#"
                           "header_split#vlan_filter#vlan_extend#jumbo_frame#"
-                          "scatter#timestamp#security#keep_crc#rss_hash");
+                          "scatter#buffer_split#timestamp#security#"
+                          "keep_crc#rss_hash");
 cmdline_parse_token_string_t cmd_config_per_port_rx_offload_result_on_off =
        TOKEN_STRING_INITIALIZER
                (struct cmd_config_per_port_rx_offload_result,
@@ -18479,8 +18624,8 @@ cmdline_parse_inst_t cmd_config_per_port_rx_offload = {
        .help_str = "port config <port_id> rx_offload vlan_strip|ipv4_cksum|"
                    "udp_cksum|tcp_cksum|tcp_lro|qinq_strip|outer_ipv4_cksum|"
                    "macsec_strip|header_split|vlan_filter|vlan_extend|"
-                   "jumbo_frame|scatter|timestamp|security|keep_crc|rss_hash "
-                   "on|off",
+                   "jumbo_frame|scatter|buffer_split|timestamp|security|"
+                   "keep_crc|rss_hash on|off",
        .tokens = {
                (void *)&cmd_config_per_port_rx_offload_result_port,
                (void *)&cmd_config_per_port_rx_offload_result_config,
@@ -18529,7 +18674,7 @@ cmdline_parse_token_string_t cmd_config_per_queue_rx_offload_result_offload =
                 offload, "vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#"
                           "qinq_strip#outer_ipv4_cksum#macsec_strip#"
                           "header_split#vlan_filter#vlan_extend#jumbo_frame#"
-                          "scatter#timestamp#security#keep_crc");
+                          "scatter#buffer_split#timestamp#security#keep_crc");
 cmdline_parse_token_string_t cmd_config_per_queue_rx_offload_result_on_off =
        TOKEN_STRING_INITIALIZER
                (struct cmd_config_per_queue_rx_offload_result,
@@ -18585,8 +18730,8 @@ cmdline_parse_inst_t cmd_config_per_queue_rx_offload = {
                    "vlan_strip|ipv4_cksum|"
                    "udp_cksum|tcp_cksum|tcp_lro|qinq_strip|outer_ipv4_cksum|"
                    "macsec_strip|header_split|vlan_filter|vlan_extend|"
-                   "jumbo_frame|scatter|timestamp|security|keep_crc "
-                   "on|off",
+                   "jumbo_frame|scatter|buffer_split|timestamp|security|"
+                   "keep_crc on|off",
        .tokens = {
                (void *)&cmd_config_per_queue_rx_offload_result_port,
                (void *)&cmd_config_per_queue_rx_offload_result_port_id,
@@ -19209,6 +19354,226 @@ cmdline_parse_inst_t cmd_show_tx_metadata = {
        },
 };
 
+/* *** show fec capability per port configuration *** */
+struct cmd_show_fec_capability_result {
+       cmdline_fixed_string_t cmd_show;
+       cmdline_fixed_string_t cmd_port;
+       cmdline_fixed_string_t cmd_fec;
+       cmdline_fixed_string_t cmd_keyword;
+       portid_t cmd_pid;
+};
+
+static void
+cmd_show_fec_capability_parsed(void *parsed_result,
+               __rte_unused struct cmdline *cl,
+               __rte_unused void *data)
+{
+#define FEC_CAP_NUM 2
+       struct cmd_show_fec_capability_result *res = parsed_result;
+       struct rte_eth_fec_capa speed_fec_capa[FEC_CAP_NUM];
+       unsigned int num = FEC_CAP_NUM;
+       unsigned int ret_num;
+       int ret;
+
+       if (!rte_eth_dev_is_valid_port(res->cmd_pid)) {
+               printf("Invalid port id %u\n", res->cmd_pid);
+               return;
+       }
+
+       ret = rte_eth_fec_get_capability(res->cmd_pid, speed_fec_capa, num);
+       if (ret == -ENOTSUP) {
+               printf("Function not implemented\n");
+               return;
+       } else if (ret < 0) {
+               printf("Get FEC capability failed\n");
+               return;
+       }
+
+       ret_num = (unsigned int)ret;
+       show_fec_capability(ret_num, speed_fec_capa);
+}
+
+cmdline_parse_token_string_t cmd_show_fec_capability_show =
+       TOKEN_STRING_INITIALIZER(struct cmd_show_fec_capability_result,
+                       cmd_show, "show");
+cmdline_parse_token_string_t cmd_show_fec_capability_port =
+       TOKEN_STRING_INITIALIZER(struct cmd_show_fec_capability_result,
+                       cmd_port, "port");
+cmdline_parse_token_num_t cmd_show_fec_capability_pid =
+       TOKEN_NUM_INITIALIZER(struct cmd_show_fec_capability_result,
+                       cmd_pid, UINT16);
+cmdline_parse_token_string_t cmd_show_fec_capability_fec =
+       TOKEN_STRING_INITIALIZER(struct cmd_show_fec_capability_result,
+                       cmd_fec, "fec");
+cmdline_parse_token_string_t cmd_show_fec_capability_keyword =
+       TOKEN_STRING_INITIALIZER(struct cmd_show_fec_capability_result,
+                       cmd_keyword, "capabilities");
+
+cmdline_parse_inst_t cmd_show_capability = {
+       .f = cmd_show_fec_capability_parsed,
+       .data = NULL,
+       .help_str = "show port <port_id> fec capabilities",
+       .tokens = {
+               (void *)&cmd_show_fec_capability_show,
+               (void *)&cmd_show_fec_capability_port,
+               (void *)&cmd_show_fec_capability_pid,
+               (void *)&cmd_show_fec_capability_fec,
+               (void *)&cmd_show_fec_capability_keyword,
+               NULL,
+       },
+};
+
+/* *** show fec mode per port configuration *** */
+struct cmd_show_fec_metadata_result {
+       cmdline_fixed_string_t cmd_show;
+       cmdline_fixed_string_t cmd_port;
+       cmdline_fixed_string_t cmd_keyword;
+       portid_t cmd_pid;
+};
+
+static void
+cmd_show_fec_mode_parsed(void *parsed_result,
+               __rte_unused struct cmdline *cl,
+               __rte_unused void *data)
+{
+#define FEC_NAME_SIZE 16
+       struct cmd_show_fec_metadata_result *res = parsed_result;
+       uint32_t mode;
+       char buf[FEC_NAME_SIZE];
+       int ret;
+
+       if (!rte_eth_dev_is_valid_port(res->cmd_pid)) {
+               printf("Invalid port id %u\n", res->cmd_pid);
+               return;
+       }
+       ret = rte_eth_fec_get(res->cmd_pid, &mode);
+       if (ret == -ENOTSUP) {
+               printf("Function not implemented\n");
+               return;
+       } else if (ret < 0) {
+               printf("Get FEC mode failed\n");
+               return;
+       }
+
+       switch (mode) {
+       case RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC):
+               strlcpy(buf, "off", sizeof(buf));
+               break;
+       case RTE_ETH_FEC_MODE_CAPA_MASK(AUTO):
+               strlcpy(buf, "auto", sizeof(buf));
+               break;
+       case RTE_ETH_FEC_MODE_CAPA_MASK(BASER):
+               strlcpy(buf, "baser", sizeof(buf));
+               break;
+       case RTE_ETH_FEC_MODE_CAPA_MASK(RS):
+               strlcpy(buf, "rs", sizeof(buf));
+               break;
+       default:
+               return;
+       }
+
+       printf("%s\n", buf);
+}
+
+cmdline_parse_token_string_t cmd_show_fec_mode_show =
+       TOKEN_STRING_INITIALIZER(struct cmd_show_fec_metadata_result,
+                       cmd_show, "show");
+cmdline_parse_token_string_t cmd_show_fec_mode_port =
+       TOKEN_STRING_INITIALIZER(struct cmd_show_fec_metadata_result,
+                       cmd_port, "port");
+cmdline_parse_token_num_t cmd_show_fec_mode_pid =
+       TOKEN_NUM_INITIALIZER(struct cmd_show_fec_metadata_result,
+                       cmd_pid, UINT16);
+cmdline_parse_token_string_t cmd_show_fec_mode_keyword =
+       TOKEN_STRING_INITIALIZER(struct cmd_show_fec_metadata_result,
+                       cmd_keyword, "fec_mode");
+
+cmdline_parse_inst_t cmd_show_fec_mode = {
+       .f = cmd_show_fec_mode_parsed,
+       .data = NULL,
+       .help_str = "show port <port_id> fec_mode",
+       .tokens = {
+               (void *)&cmd_show_fec_mode_show,
+               (void *)&cmd_show_fec_mode_port,
+               (void *)&cmd_show_fec_mode_pid,
+               (void *)&cmd_show_fec_mode_keyword,
+               NULL,
+       },
+};
+
+/* *** set fec mode per port configuration *** */
+struct cmd_set_port_fec_mode {
+       cmdline_fixed_string_t set;
+       cmdline_fixed_string_t port;
+       portid_t port_id;
+       cmdline_fixed_string_t fec_mode;
+       cmdline_fixed_string_t fec_value;
+};
+
+/* Common CLI fields for set fec mode */
+cmdline_parse_token_string_t cmd_set_port_fec_mode_set =
+       TOKEN_STRING_INITIALIZER
+               (struct cmd_set_port_fec_mode,
+                set, "set");
+cmdline_parse_token_string_t cmd_set_port_fec_mode_port =
+       TOKEN_STRING_INITIALIZER
+               (struct cmd_set_port_fec_mode,
+                port, "port");
+cmdline_parse_token_num_t cmd_set_port_fec_mode_port_id =
+       TOKEN_NUM_INITIALIZER
+               (struct cmd_set_port_fec_mode,
+                port_id, UINT16);
+cmdline_parse_token_string_t cmd_set_port_fec_mode_str =
+       TOKEN_STRING_INITIALIZER
+               (struct cmd_set_port_fec_mode,
+                fec_mode, "fec_mode");
+cmdline_parse_token_string_t cmd_set_port_fec_mode_value =
+       TOKEN_STRING_INITIALIZER
+               (struct cmd_set_port_fec_mode,
+                fec_value, NULL);
+
+static void
+cmd_set_port_fec_mode_parsed(
+       void *parsed_result,
+       __rte_unused struct cmdline *cl,
+       __rte_unused void *data)
+{
+       struct cmd_set_port_fec_mode *res = parsed_result;
+       uint16_t port_id = res->port_id;
+       uint32_t mode;
+       int ret;
+
+       ret = parse_fec_mode(res->fec_value, &mode);
+       if (ret < 0) {
+               printf("Unknown fec mode: %s for Port %d\n", res->fec_value,
+                       port_id);
+               return;
+       }
+
+       ret = rte_eth_fec_set(port_id, mode);
+       if (ret == -ENOTSUP) {
+               printf("Function not implemented\n");
+               return;
+       } else if (ret < 0) {
+               printf("Set FEC mode failed\n");
+               return;
+       }
+}
+
+cmdline_parse_inst_t cmd_set_fec_mode = {
+       .f = cmd_set_port_fec_mode_parsed,
+       .data = NULL,
+       .help_str = "set port <port_id> fec_mode auto|off|rs|baser",
+       .tokens = {
+               (void *)&cmd_set_port_fec_mode_set,
+               (void *)&cmd_set_port_fec_mode_port,
+               (void *)&cmd_set_port_fec_mode_port_id,
+               (void *)&cmd_set_port_fec_mode_str,
+               (void *)&cmd_set_port_fec_mode_value,
+               NULL,
+       },
+};
+
 /* show port supported ptypes */
 
 /* Common result structure for show port ptypes */
@@ -19568,6 +19933,8 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *)&cmd_reset,
        (cmdline_parse_inst_t *)&cmd_set_numbers,
        (cmdline_parse_inst_t *)&cmd_set_log,
+       (cmdline_parse_inst_t *)&cmd_set_rxoffs,
+       (cmdline_parse_inst_t *)&cmd_set_rxpkts,
        (cmdline_parse_inst_t *)&cmd_set_txpkts,
        (cmdline_parse_inst_t *)&cmd_set_txsplit,
        (cmdline_parse_inst_t *)&cmd_set_txtimes,
@@ -19844,6 +20211,9 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *)&cmd_show_set_raw,
        (cmdline_parse_inst_t *)&cmd_show_set_raw_all,
        (cmdline_parse_inst_t *)&cmd_config_tx_dynf_specific,
+       (cmdline_parse_inst_t *)&cmd_show_fec_mode,
+       (cmdline_parse_inst_t *)&cmd_set_fec_mode,
+       (cmdline_parse_inst_t *)&cmd_show_capability,
        NULL,
 };