app/testpmd: command to configure MTU

Take avantage of the .set_mtu ethdev function and make it possible to configure
MTU on devices using testpmd.

Signed-off-by: Ivan Boule <ivan.boule@6wind.com>
Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
This commit is contained in:
Ivan Boule 2014-06-17 20:09:32 +02:00 committed by Thomas Monjalon
parent 12cd0cccc3
commit ae03d0d18a
3 changed files with 68 additions and 1 deletions

View File

@ -527,6 +527,8 @@ static void cmd_help_long_parsed(void *parsed_result,
"port config all (txfreet|txrst|rxfreet) (value)\n"
" Set free threshold for rx/tx, or set"
" tx rs bit threshold.\n\n"
"port config mtu X value\n"
" Set the MTU of port X to a given value\n\n"
);
}
@ -1086,6 +1088,57 @@ cmdline_parse_inst_t cmd_config_max_pkt_len = {
},
};
/* *** configure port MTU *** */
struct cmd_config_mtu_result {
cmdline_fixed_string_t port;
cmdline_fixed_string_t keyword;
cmdline_fixed_string_t mtu;
uint8_t port_id;
uint16_t value;
};
static void
cmd_config_mtu_parsed(void *parsed_result,
__attribute__((unused)) struct cmdline *cl,
__attribute__((unused)) void *data)
{
struct cmd_config_mtu_result *res = parsed_result;
if (res->value < ETHER_MIN_LEN) {
printf("mtu cannot be less than %d\n", ETHER_MIN_LEN);
return;
}
port_mtu_set(res->port_id, res->value);
}
cmdline_parse_token_string_t cmd_config_mtu_port =
TOKEN_STRING_INITIALIZER(struct cmd_config_mtu_result, port,
"port");
cmdline_parse_token_string_t cmd_config_mtu_keyword =
TOKEN_STRING_INITIALIZER(struct cmd_config_mtu_result, keyword,
"config");
cmdline_parse_token_string_t cmd_config_mtu_mtu =
TOKEN_STRING_INITIALIZER(struct cmd_config_mtu_result, keyword,
"mtu");
cmdline_parse_token_num_t cmd_config_mtu_port_id =
TOKEN_NUM_INITIALIZER(struct cmd_config_mtu_result, port_id, UINT8);
cmdline_parse_token_num_t cmd_config_mtu_value =
TOKEN_NUM_INITIALIZER(struct cmd_config_mtu_result, value, UINT16);
cmdline_parse_inst_t cmd_config_mtu = {
.f = cmd_config_mtu_parsed,
.data = NULL,
.help_str = "port config mtu value",
.tokens = {
(void *)&cmd_config_mtu_port,
(void *)&cmd_config_mtu_keyword,
(void *)&cmd_config_mtu_mtu,
(void *)&cmd_config_mtu_port_id,
(void *)&cmd_config_mtu_value,
NULL,
},
};
/* *** configure rx mode *** */
struct cmd_config_rx_mode_flag {
cmdline_fixed_string_t port;
@ -6553,6 +6606,7 @@ cmdline_parse_ctx_t main_ctx[] = {
(cmdline_parse_inst_t *)&cmd_config_speed_all,
(cmdline_parse_inst_t *)&cmd_config_speed_specific,
(cmdline_parse_inst_t *)&cmd_config_rx_tx,
(cmdline_parse_inst_t *)&cmd_config_mtu,
(cmdline_parse_inst_t *)&cmd_config_max_pkt_len,
(cmdline_parse_inst_t *)&cmd_config_rx_mode_flag,
(cmdline_parse_inst_t *)&cmd_config_rss,

View File

@ -503,6 +503,19 @@ port_reg_set(portid_t port_id, uint32_t reg_off, uint32_t reg_v)
display_port_reg_value(port_id, reg_off, reg_v);
}
void
port_mtu_set(portid_t port_id, uint16_t mtu)
{
int diag;
if (port_id_is_invalid(port_id))
return;
diag = rte_eth_dev_set_mtu(port_id, mtu);
if (diag == 0)
return;
printf("Set MTU failed. diag=%d\n", diag);
}
/*
* RX/TX ring descriptors display functions.
*/

View File

@ -454,7 +454,7 @@ void fwd_config_setup(void);
void set_def_fwd_config(void);
int init_fwd_streams(void);
void port_mtu_set(portid_t port_id, uint16_t mtu);
void port_reg_bit_display(portid_t port_id, uint32_t reg_off, uint8_t bit_pos);
void port_reg_bit_set(portid_t port_id, uint32_t reg_off, uint8_t bit_pos,
uint8_t bit_v);