X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=app%2Ftest-pmd%2Fcmdline.c;h=43c8ca050aa7965aa2f51355a694d0c23fb3e844;hb=16321de09396eaef80881b4573d4b7fb87a49ea7;hp=7becedce2ad1d3b59b795814ff36f72b29664b57;hpb=01b2092a5e4b9284a505061d8262651f07635fa4;p=dpdk.git diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 7becedce2a..43c8ca050a 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -182,6 +182,10 @@ static void cmd_help_long_parsed(void *parsed_result, "show port (info|stats|fdir|stat_qmap) (port_id|all)\n" " Display information for port_id, or all.\n\n" + "show port rss-hash [key]\n" + " Display the RSS hash functions and RSS hash key" + " of port X\n\n" + "clear port (info|stats|fdir|stat_qmap) (port_id|all)\n" " Clear information for port_id, or all.\n\n" @@ -294,17 +298,9 @@ static void cmd_help_long_parsed(void *parsed_result, " bit 3 - insert sctp checksum offload if set\n" " Please check the NIC datasheet for HW limits.\n\n" -#ifdef RTE_LIBRTE_IEEE1588 - "set fwd (io|mac|mac_retry|rxonly|txonly|csum|ieee1588)\n" - " Set IO, MAC, MAC_RETRY, RXONLY, CSUM or TXONLY or ieee1588" - " packet forwarding mode.\n\n" - -#else - "set fwd (io|mac|mac_retry|rxonly|txonly|csum)\n" - " Set IO, MAC, MAC_RETRY, RXONLY, CSUM or TXONLY packet" - " forwarding mode.\n\n" + "set fwd (%s)\n" + " Set packet forwarding mode.\n\n" -#endif "mac_addr add (port_id) (XX:XX:XX:XX:XX:XX)\n" " Add a MAC address on port_id.\n\n" @@ -398,6 +394,7 @@ static void cmd_help_long_parsed(void *parsed_result, " using the lowest port on the NIC.\n\n" #endif + , list_pkt_forwarding_modes() ); } @@ -1131,26 +1128,22 @@ cmd_config_rss_parsed(void *parsed_result, __attribute__((unused)) void *data) { struct cmd_config_rss *res = parsed_result; - - if (!all_ports_stopped()) { - printf("Please stop all ports first\n"); - return; - } + struct rte_eth_rss_conf rss_conf; + uint8_t i; if (!strcmp(res->value, "ip")) - rss_hf = ETH_RSS_IPV4 | ETH_RSS_IPV6; + rss_conf.rss_hf = ETH_RSS_IPV4 | ETH_RSS_IPV6; else if (!strcmp(res->value, "udp")) - rss_hf = ETH_RSS_IPV4 | ETH_RSS_IPV6 | ETH_RSS_IPV4_UDP; + rss_conf.rss_hf = ETH_RSS_IPV4_UDP | ETH_RSS_IPV6_UDP; else if (!strcmp(res->value, "none")) - rss_hf = 0; + rss_conf.rss_hf = 0; else { printf("Unknown parameter\n"); return; } - - init_port_config(); - - cmd_reconfig_device_queue(RTE_PORT_ALL, 1, 1); + rss_conf.rss_key = NULL; + for (i = 0; i < rte_eth_dev_count(); i++) + rte_eth_dev_rss_hash_update(i, &rss_conf); } cmdline_parse_token_string_t cmd_config_rss_port = @@ -1354,6 +1347,63 @@ cmdline_parse_inst_t cmd_showport_reta = { }, }; +/* *** Show RSS hash configuration *** */ +struct cmd_showport_rss_hash { + cmdline_fixed_string_t show; + cmdline_fixed_string_t port; + uint8_t port_id; + cmdline_fixed_string_t rss_hash; + cmdline_fixed_string_t key; /* optional argument */ +}; + +static void cmd_showport_rss_hash_parsed(void *parsed_result, + __attribute__((unused)) struct cmdline *cl, + void *show_rss_key) +{ + struct cmd_showport_rss_hash *res = parsed_result; + + port_rss_hash_conf_show(res->port_id, show_rss_key != NULL); +} + +cmdline_parse_token_string_t cmd_showport_rss_hash_show = + TOKEN_STRING_INITIALIZER(struct cmd_showport_rss_hash, show, "show"); +cmdline_parse_token_string_t cmd_showport_rss_hash_port = + TOKEN_STRING_INITIALIZER(struct cmd_showport_rss_hash, port, "port"); +cmdline_parse_token_num_t cmd_showport_rss_hash_port_id = + TOKEN_NUM_INITIALIZER(struct cmd_showport_rss_hash, port_id, UINT8); +cmdline_parse_token_string_t cmd_showport_rss_hash_rss_hash = + TOKEN_STRING_INITIALIZER(struct cmd_showport_rss_hash, rss_hash, + "rss-hash"); +cmdline_parse_token_string_t cmd_showport_rss_hash_rss_key = + TOKEN_STRING_INITIALIZER(struct cmd_showport_rss_hash, key, "key"); + +cmdline_parse_inst_t cmd_showport_rss_hash = { + .f = cmd_showport_rss_hash_parsed, + .data = NULL, + .help_str = "show port X rss-hash (X = port number)\n", + .tokens = { + (void *)&cmd_showport_rss_hash_show, + (void *)&cmd_showport_rss_hash_port, + (void *)&cmd_showport_rss_hash_port_id, + (void *)&cmd_showport_rss_hash_rss_hash, + NULL, + }, +}; + +cmdline_parse_inst_t cmd_showport_rss_hash_key = { + .f = cmd_showport_rss_hash_parsed, + .data = "show_rss_key", + .help_str = "show port X rss-hash key (X = port number)\n", + .tokens = { + (void *)&cmd_showport_rss_hash_show, + (void *)&cmd_showport_rss_hash_port, + (void *)&cmd_showport_rss_hash_port_id, + (void *)&cmd_showport_rss_hash_rss_hash, + (void *)&cmd_showport_rss_hash_rss_key, + NULL, + }, +}; + /* *** Configure DCB *** */ struct cmd_config_dcb { cmdline_fixed_string_t port; @@ -2335,6 +2385,46 @@ cmdline_parse_inst_t cmd_set_flush_rx = { }, }; +/* *** ENABLE/DISABLE LINK STATUS CHECK *** */ +struct cmd_set_link_check { + cmdline_fixed_string_t set; + cmdline_fixed_string_t link_check; + cmdline_fixed_string_t mode; +}; + +static void +cmd_set_link_check_parsed(void *parsed_result, + __attribute__((unused)) struct cmdline *cl, + __attribute__((unused)) void *data) +{ + struct cmd_set_link_check *res = parsed_result; + no_link_check = (uint8_t)((strcmp(res->mode, "on") == 0) ? 0 : 1); +} + +cmdline_parse_token_string_t cmd_setlinkcheck_set = + TOKEN_STRING_INITIALIZER(struct cmd_set_link_check, + set, "set"); +cmdline_parse_token_string_t cmd_setlinkcheck_link_check = + TOKEN_STRING_INITIALIZER(struct cmd_set_link_check, + link_check, "link_check"); +cmdline_parse_token_string_t cmd_setlinkcheck_mode = + TOKEN_STRING_INITIALIZER(struct cmd_set_link_check, + mode, "on#off"); + + +cmdline_parse_inst_t cmd_set_link_check = { + .f = cmd_set_link_check_parsed, + .help_str = "set link_check on|off: enable/disable link status check " + "when starting/stopping a port", + .data = NULL, + .tokens = { + (void *)&cmd_setlinkcheck_set, + (void *)&cmd_setlinkcheck_link_check, + (void *)&cmd_setlinkcheck_mode, + NULL, + }, +}; + #ifdef RTE_NIC_BYPASS /* *** SET NIC BYPASS MODE *** */ struct cmd_set_bypass_mode_result { @@ -2688,22 +2778,12 @@ cmdline_parse_token_string_t cmd_setfwd_fwd = TOKEN_STRING_INITIALIZER(struct cmd_set_fwd_mode_result, fwd, "fwd"); cmdline_parse_token_string_t cmd_setfwd_mode = TOKEN_STRING_INITIALIZER(struct cmd_set_fwd_mode_result, mode, -#ifdef RTE_LIBRTE_IEEE1588 - "io#mac#mac_retry#rxonly#txonly#csum#ieee1588"); -#else - "io#mac#mac_retry#rxonly#txonly#csum"); -#endif + "" /* defined at init */); cmdline_parse_inst_t cmd_set_fwd_mode = { .f = cmd_set_fwd_mode_parsed, .data = NULL, -#ifdef RTE_LIBRTE_IEEE1588 - .help_str = "set fwd io|mac|mac_retry|rxonly|txonly|csum|ieee1588 - set IO, MAC," - " MAC_RETRY, RXONLY, TXONLY, CSUM or IEEE1588 packet forwarding mode", -#else - .help_str = "set fwd io|mac|mac_retry|rxonly|txonly|csum - set IO, MAC," - " MAC_RETRY, RXONLY, CSUM or TXONLY packet forwarding mode", -#endif + .help_str = NULL, /* defined at init */ .tokens = { (void *)&cmd_setfwd_set, (void *)&cmd_setfwd_fwd, @@ -2712,6 +2792,28 @@ cmdline_parse_inst_t cmd_set_fwd_mode = { }, }; +static void cmd_set_fwd_mode_init(void) +{ + char *modes, *c; + static char token[128]; + static char help[256]; + cmdline_parse_token_string_t *token_struct; + + modes = list_pkt_forwarding_modes(); + rte_snprintf(help, sizeof help, "set fwd %s - " + "set packet forwarding mode", modes); + cmd_set_fwd_mode.help_str = help; + + /* string token separator is # */ + for (c = token; *modes != '\0'; modes++) + if (*modes == '|') + *c++ = '#'; + else + *c++ = *modes; + token_struct = (cmdline_parse_token_string_t*)cmd_set_fwd_mode.tokens[2]; + token_struct->string_data.str = token; +} + /* *** SET BURST TX DELAY TIME RETRY NUMBER *** */ struct cmd_set_burst_tx_retry_result { cmdline_fixed_string_t set; @@ -5023,19 +5125,19 @@ static void cmd_dump_parsed(void *parsed_result, struct cmd_dump_result *res = parsed_result; if (!strcmp(res->dump, "dump_physmem")) - rte_dump_physmem_layout(); + rte_dump_physmem_layout(stdout); else if (!strcmp(res->dump, "dump_memzone")) - rte_memzone_dump(); + rte_memzone_dump(stdout); else if (!strcmp(res->dump, "dump_log_history")) - rte_log_dump_history(); + rte_log_dump_history(stdout); else if (!strcmp(res->dump, "dump_struct_sizes")) dump_struct_sizes(); else if (!strcmp(res->dump, "dump_ring")) - rte_ring_list_dump(); + rte_ring_list_dump(stdout); else if (!strcmp(res->dump, "dump_mempool")) - rte_mempool_list_dump(); + rte_mempool_list_dump(stdout); else if (!strcmp(res->dump, "dump_devargs")) - rte_eal_devargs_dump(); + rte_eal_devargs_dump(stdout); } cmdline_parse_token_string_t cmd_dump_dump = @@ -5077,7 +5179,7 @@ static void cmd_dump_one_parsed(void *parsed_result, struct cmdline *cl, cmdline_printf(cl, "Cannot find ring\n"); return; } - rte_ring_dump(r); + rte_ring_dump(stdout, r); } else if (!strcmp(res->dump, "dump_mempool")) { struct rte_mempool *mp; mp = rte_mempool_lookup(res->name); @@ -5085,7 +5187,7 @@ static void cmd_dump_one_parsed(void *parsed_result, struct cmdline *cl, cmdline_printf(cl, "Cannot find mempool\n"); return; } - rte_mempool_dump(mp); + rte_mempool_dump(stdout, mp); } } @@ -5131,6 +5233,7 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_set_allmulti_mode_one, (cmdline_parse_inst_t *)&cmd_set_allmulti_mode_all, (cmdline_parse_inst_t *)&cmd_set_flush_rx, + (cmdline_parse_inst_t *)&cmd_set_link_check, #ifdef RTE_NIC_BYPASS (cmdline_parse_inst_t *)&cmd_set_bypass_mode, (cmdline_parse_inst_t *)&cmd_set_bypass_event, @@ -5187,6 +5290,8 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_set_mirror_mask, (cmdline_parse_inst_t *)&cmd_set_mirror_link, (cmdline_parse_inst_t *)&cmd_reset_mirror_rule, + (cmdline_parse_inst_t *)&cmd_showport_rss_hash, + (cmdline_parse_inst_t *)&cmd_showport_rss_hash_key, (cmdline_parse_inst_t *)&cmd_dump, (cmdline_parse_inst_t *)&cmd_dump_one, NULL, @@ -5198,6 +5303,9 @@ prompt(void) { struct cmdline *cl; + /* initialize non-constant commands */ + cmd_set_fwd_mode_init(); + cl = cmdline_stdin_new(main_ctx, "testpmd> "); if (cl == NULL) { return;