test: move to app directory
[dpdk.git] / app / test-pmd / cmdline.c
index 4856d23..db53cc0 100644 (file)
@@ -280,6 +280,9 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "set portlist (x[,y]*)\n"
                        "    Set the list of forwarding ports.\n\n"
 
+                       "set port setup on (iterator|event)\n"
+                       "    Select how attached port is retrieved for setup.\n\n"
+
                        "set tx loopback (port_id) (on|off)\n"
                        "    Enable or disable tx loopback.\n\n"
 
@@ -725,7 +728,8 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "    show all queue region related configuration info\n\n"
 
                        "add port tm node shaper profile (port_id) (shaper_profile_id)"
-                       " (tb_rate) (tb_size) (packet_length_adjust)\n"
+                       " (cmit_tb_rate) (cmit_tb_size) (peak_tb_rate) (peak_tb_size)"
+                       " (packet_length_adjust)\n"
                        "       Add port tm node private shaper profile.\n\n"
 
                        "del port tm node shaper profile (port_id) (shaper_profile_id)\n"
@@ -790,6 +794,12 @@ static void cmd_help_long_parsed(void *parsed_result,
                        " eth-dst (eth-dst)\n"
                        "       Configure the VXLAN encapsulation for flows.\n\n"
 
+                       "vxlan-tos-ttl ip-version (ipv4|ipv6) vni (vni) udp-src"
+                       " (udp-src) udp-dst (udp-dst) ip-tos (ip-tos) ip-ttl (ip-ttl)"
+                       " ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src)"
+                       " eth-dst (eth-dst)\n"
+                       "       Configure the VXLAN encapsulation for flows.\n\n"
+
                        "nvgre ip-version (ipv4|ipv6) tni (tni) ip-src"
                        " (ip-src) ip-dst (ip-dst) eth-src (eth-src) eth-dst"
                        " (eth-dst)\n"
@@ -1249,6 +1259,59 @@ cmdline_parse_inst_t cmd_operate_specific_port = {
        },
 };
 
+/* *** enable port setup (after attach) via iterator or event *** */
+struct cmd_set_port_setup_on_result {
+       cmdline_fixed_string_t set;
+       cmdline_fixed_string_t port;
+       cmdline_fixed_string_t setup;
+       cmdline_fixed_string_t on;
+       cmdline_fixed_string_t mode;
+};
+
+static void cmd_set_port_setup_on_parsed(void *parsed_result,
+                               __attribute__((unused)) struct cmdline *cl,
+                               __attribute__((unused)) void *data)
+{
+       struct cmd_set_port_setup_on_result *res = parsed_result;
+
+       if (strcmp(res->mode, "event") == 0)
+               setup_on_probe_event = true;
+       else if (strcmp(res->mode, "iterator") == 0)
+               setup_on_probe_event = false;
+       else
+               printf("Unknown mode\n");
+}
+
+cmdline_parse_token_string_t cmd_set_port_setup_on_set =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_port_setup_on_result,
+                       set, "set");
+cmdline_parse_token_string_t cmd_set_port_setup_on_port =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_port_setup_on_result,
+                       port, "port");
+cmdline_parse_token_string_t cmd_set_port_setup_on_setup =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_port_setup_on_result,
+                       setup, "setup");
+cmdline_parse_token_string_t cmd_set_port_setup_on_on =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_port_setup_on_result,
+                       on, "on");
+cmdline_parse_token_string_t cmd_set_port_setup_on_mode =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_port_setup_on_result,
+                       mode, "iterator#event");
+
+cmdline_parse_inst_t cmd_set_port_setup_on = {
+       .f = cmd_set_port_setup_on_parsed,
+       .data = NULL,
+       .help_str = "set port setup on iterator|event",
+       .tokens = {
+               (void *)&cmd_set_port_setup_on_set,
+               (void *)&cmd_set_port_setup_on_port,
+               (void *)&cmd_set_port_setup_on_setup,
+               (void *)&cmd_set_port_setup_on_on,
+               (void *)&cmd_set_port_setup_on_mode,
+               NULL,
+       },
+};
+
 /* *** attach a specified port *** */
 struct cmd_operate_attach_port_result {
        cmdline_fixed_string_t port;
@@ -1305,7 +1368,7 @@ static void cmd_operate_detach_port_parsed(void *parsed_result,
        struct cmd_operate_detach_port_result *res = parsed_result;
 
        if (!strcmp(res->keyword, "detach"))
-               detach_port(res->port_id);
+               detach_port_device(res->port_id);
        else
                printf("Unknown parameter\n");
 }
@@ -5920,6 +5983,8 @@ static void cmd_create_bonded_device_parsed(void *parsed_result,
                nb_ports = rte_eth_dev_count_avail();
                reconfig(port_id, res->socket);
                rte_eth_promiscuous_enable(port_id);
+               ports[port_id].need_setup = 0;
+               ports[port_id].port_status = RTE_PORT_STOPPED;
        }
 
 }
@@ -14975,6 +15040,8 @@ struct cmd_set_vxlan_result {
        cmdline_ipaddr_t ip_src;
        cmdline_ipaddr_t ip_dst;
        uint16_t tci;
+       uint8_t tos;
+       uint8_t ttl;
        struct ether_addr eth_src;
        struct ether_addr eth_dst;
 };
@@ -14983,6 +15050,9 @@ cmdline_parse_token_string_t cmd_set_vxlan_set =
        TOKEN_STRING_INITIALIZER(struct cmd_set_vxlan_result, set, "set");
 cmdline_parse_token_string_t cmd_set_vxlan_vxlan =
        TOKEN_STRING_INITIALIZER(struct cmd_set_vxlan_result, vxlan, "vxlan");
+cmdline_parse_token_string_t cmd_set_vxlan_vxlan_tos_ttl =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_vxlan_result, vxlan,
+                                "vxlan-tos-ttl");
 cmdline_parse_token_string_t cmd_set_vxlan_vxlan_with_vlan =
        TOKEN_STRING_INITIALIZER(struct cmd_set_vxlan_result, vxlan,
                                 "vxlan-with-vlan");
@@ -15007,6 +15077,16 @@ cmdline_parse_token_string_t cmd_set_vxlan_udp_dst =
                                 "udp-dst");
 cmdline_parse_token_num_t cmd_set_vxlan_udp_dst_value =
        TOKEN_NUM_INITIALIZER(struct cmd_set_vxlan_result, udp_dst, UINT16);
+cmdline_parse_token_string_t cmd_set_vxlan_ip_tos =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_vxlan_result, pos_token,
+                                "ip-tos");
+cmdline_parse_token_num_t cmd_set_vxlan_ip_tos_value =
+       TOKEN_NUM_INITIALIZER(struct cmd_set_vxlan_result, tos, UINT8);
+cmdline_parse_token_string_t cmd_set_vxlan_ip_ttl =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_vxlan_result, pos_token,
+                                "ip-ttl");
+cmdline_parse_token_num_t cmd_set_vxlan_ip_ttl_value =
+       TOKEN_NUM_INITIALIZER(struct cmd_set_vxlan_result, ttl, UINT8);
 cmdline_parse_token_string_t cmd_set_vxlan_ip_src =
        TOKEN_STRING_INITIALIZER(struct cmd_set_vxlan_result, pos_token,
                                 "ip-src");
@@ -15045,10 +15125,15 @@ static void cmd_set_vxlan_parsed(void *parsed_result,
                .vxlan_id = rte_cpu_to_be_32(res->vni) & RTE_BE32(0x00ffffff),
        };
 
+       vxlan_encap_conf.select_tos_ttl = 0;
        if (strcmp(res->vxlan, "vxlan") == 0)
                vxlan_encap_conf.select_vlan = 0;
        else if (strcmp(res->vxlan, "vxlan-with-vlan") == 0)
                vxlan_encap_conf.select_vlan = 1;
+       else if (strcmp(res->vxlan, "vxlan-tos-ttl") == 0) {
+               vxlan_encap_conf.select_vlan = 0;
+               vxlan_encap_conf.select_tos_ttl = 1;
+       }
        if (strcmp(res->ip_version, "ipv4") == 0)
                vxlan_encap_conf.select_ipv4 = 1;
        else if (strcmp(res->ip_version, "ipv6") == 0)
@@ -15058,6 +15143,8 @@ static void cmd_set_vxlan_parsed(void *parsed_result,
        rte_memcpy(vxlan_encap_conf.vni, &id.vni[1], 3);
        vxlan_encap_conf.udp_src = rte_cpu_to_be_16(res->udp_src);
        vxlan_encap_conf.udp_dst = rte_cpu_to_be_16(res->udp_dst);
+       vxlan_encap_conf.ip_tos = res->tos;
+       vxlan_encap_conf.ip_ttl = res->ttl;
        if (vxlan_encap_conf.select_ipv4) {
                IPV4_ADDR_TO_UINT(res->ip_src, vxlan_encap_conf.ipv4_src);
                IPV4_ADDR_TO_UINT(res->ip_dst, vxlan_encap_conf.ipv4_dst);
@@ -15102,6 +15189,40 @@ cmdline_parse_inst_t cmd_set_vxlan = {
        },
 };
 
+cmdline_parse_inst_t cmd_set_vxlan_tos_ttl = {
+       .f = cmd_set_vxlan_parsed,
+       .data = NULL,
+       .help_str = "set vxlan-tos-ttl ip-version ipv4|ipv6 vni <vni> udp-src"
+               " <udp-src> udp-dst <udp-dst> ip-tos <ip-tos> ip-ttl <ip-ttl>"
+               " ip-src <ip-src> ip-dst <ip-dst> eth-src <eth-src>"
+               " eth-dst <eth-dst>",
+       .tokens = {
+               (void *)&cmd_set_vxlan_set,
+               (void *)&cmd_set_vxlan_vxlan_tos_ttl,
+               (void *)&cmd_set_vxlan_ip_version,
+               (void *)&cmd_set_vxlan_ip_version_value,
+               (void *)&cmd_set_vxlan_vni,
+               (void *)&cmd_set_vxlan_vni_value,
+               (void *)&cmd_set_vxlan_udp_src,
+               (void *)&cmd_set_vxlan_udp_src_value,
+               (void *)&cmd_set_vxlan_udp_dst,
+               (void *)&cmd_set_vxlan_udp_dst_value,
+               (void *)&cmd_set_vxlan_ip_tos,
+               (void *)&cmd_set_vxlan_ip_tos_value,
+               (void *)&cmd_set_vxlan_ip_ttl,
+               (void *)&cmd_set_vxlan_ip_ttl_value,
+               (void *)&cmd_set_vxlan_ip_src,
+               (void *)&cmd_set_vxlan_ip_src_value,
+               (void *)&cmd_set_vxlan_ip_dst,
+               (void *)&cmd_set_vxlan_ip_dst_value,
+               (void *)&cmd_set_vxlan_eth_src,
+               (void *)&cmd_set_vxlan_eth_src_value,
+               (void *)&cmd_set_vxlan_eth_dst,
+               (void *)&cmd_set_vxlan_eth_dst_value,
+               NULL,
+       },
+};
+
 cmdline_parse_inst_t cmd_set_vxlan_with_vlan = {
        .f = cmd_set_vxlan_parsed,
        .data = NULL,
@@ -15508,10 +15629,9 @@ static void cmd_set_mplsogre_encap_parsed(void *parsed_result,
        struct cmd_set_mplsogre_encap_result *res = parsed_result;
        union {
                uint32_t mplsogre_label;
-               uint8_t label[3];
+               uint8_t label[4];
        } id = {
-               .mplsogre_label =
-                       rte_cpu_to_be_32(res->label) & RTE_BE32(0x00ffffff),
+               .mplsogre_label = rte_cpu_to_be_32(res->label<<12),
        };
 
        if (strcmp(res->mplsogre, "mplsogre_encap") == 0)
@@ -15524,7 +15644,7 @@ static void cmd_set_mplsogre_encap_parsed(void *parsed_result,
                mplsogre_encap_conf.select_ipv4 = 0;
        else
                return;
-       rte_memcpy(mplsogre_encap_conf.label, &id.label[1], 3);
+       rte_memcpy(mplsogre_encap_conf.label, &id.label, 3);
        if (mplsogre_encap_conf.select_ipv4) {
                IPV4_ADDR_TO_UINT(res->ip_src, mplsogre_encap_conf.ipv4_src);
                IPV4_ADDR_TO_UINT(res->ip_dst, mplsogre_encap_conf.ipv4_dst);
@@ -15745,10 +15865,9 @@ static void cmd_set_mplsoudp_encap_parsed(void *parsed_result,
        struct cmd_set_mplsoudp_encap_result *res = parsed_result;
        union {
                uint32_t mplsoudp_label;
-               uint8_t label[3];
+               uint8_t label[4];
        } id = {
-               .mplsoudp_label =
-                       rte_cpu_to_be_32(res->label) & RTE_BE32(0x00ffffff),
+               .mplsoudp_label = rte_cpu_to_be_32(res->label<<12),
        };
 
        if (strcmp(res->mplsoudp, "mplsoudp_encap") == 0)
@@ -15761,7 +15880,7 @@ static void cmd_set_mplsoudp_encap_parsed(void *parsed_result,
                mplsoudp_encap_conf.select_ipv4 = 0;
        else
                return;
-       rte_memcpy(mplsoudp_encap_conf.label, &id.label[1], 3);
+       rte_memcpy(mplsoudp_encap_conf.label, &id.label, 3);
        mplsoudp_encap_conf.udp_src = rte_cpu_to_be_16(res->udp_src);
        mplsoudp_encap_conf.udp_dst = rte_cpu_to_be_16(res->udp_dst);
        if (mplsoudp_encap_conf.select_ipv4) {
@@ -17746,10 +17865,7 @@ search_rx_offload(const char *name)
                if (!strcasecmp(single_name, name)) {
                        found = 1;
                        break;
-               } else if (!strcasecmp(single_name, "UNKNOWN"))
-                       break;
-               else if (single_name == NULL)
-                       break;
+               }
                single_offload <<= 1;
        }
 
@@ -18401,7 +18517,7 @@ cmd_show_tx_metadata_parsed(void *parsed_result,
        }
        if (!strcmp(res->cmd_keyword, "tx_metadata")) {
                printf("Port %u tx_metadata: %u\n", res->cmd_pid,
-                               ports[res->cmd_pid].tx_metadata);
+                       rte_be_to_cpu_32(ports[res->cmd_pid].tx_metadata));
        }
 }
 
@@ -18529,6 +18645,7 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *)&cmd_operate_specific_port,
        (cmdline_parse_inst_t *)&cmd_operate_attach_port,
        (cmdline_parse_inst_t *)&cmd_operate_detach_port,
+       (cmdline_parse_inst_t *)&cmd_set_port_setup_on,
        (cmdline_parse_inst_t *)&cmd_config_speed_all,
        (cmdline_parse_inst_t *)&cmd_config_speed_specific,
        (cmdline_parse_inst_t *)&cmd_config_loopback_all,
@@ -18641,6 +18758,7 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *)&cmd_set_port_tm_hierarchy_default,
 #endif
        (cmdline_parse_inst_t *)&cmd_set_vxlan,
+       (cmdline_parse_inst_t *)&cmd_set_vxlan_tos_ttl,
        (cmdline_parse_inst_t *)&cmd_set_vxlan_with_vlan,
        (cmdline_parse_inst_t *)&cmd_set_nvgre,
        (cmdline_parse_inst_t *)&cmd_set_nvgre_with_vlan,