X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=inline;f=examples%2Fethtool%2Fethtool-app%2Fethapp.c;h=78e86534e8c7ea41ffe2e718b78901f258cce5d5;hb=a7db3afce75346832059d8bfe54a8f81945fb213;hp=2ed4796dd720b663453914d0446f238d4a9c77cb;hpb=c98e8f3932d88f77c7f1acd7551406200795c5aa;p=dpdk.git diff --git a/examples/ethtool/ethtool-app/ethapp.c b/examples/ethtool/ethtool-app/ethapp.c index 2ed4796dd7..78e86534e8 100644 --- a/examples/ethtool/ethtool-app/ethapp.c +++ b/examples/ethtool/ethtool-app/ethapp.c @@ -1,34 +1,5 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2015 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2015 Intel Corporation */ #include @@ -59,7 +30,7 @@ struct pcmd_intstr_params { struct pcmd_intmac_params { cmdline_fixed_string_t cmd; uint16_t port; - struct ether_addr mac; + struct rte_ether_addr mac; }; struct pcmd_str_params { cmdline_fixed_string_t cmd; @@ -99,18 +70,21 @@ cmdline_parse_token_string_t pcmd_rxmode_token_cmd = cmdline_parse_token_string_t pcmd_portstats_token_cmd = TOKEN_STRING_INITIALIZER(struct pcmd_int_params, cmd, "portstats"); cmdline_parse_token_num_t pcmd_int_token_port = - TOKEN_NUM_INITIALIZER(struct pcmd_int_params, port, UINT16); + TOKEN_NUM_INITIALIZER(struct pcmd_int_params, port, RTE_UINT16); /* Commands taking port id and string */ cmdline_parse_token_string_t pcmd_eeprom_token_cmd = TOKEN_STRING_INITIALIZER(struct pcmd_intstr_params, cmd, "eeprom"); +cmdline_parse_token_string_t pcmd_module_eeprom_token_cmd = + TOKEN_STRING_INITIALIZER(struct pcmd_intstr_params, cmd, + "module-eeprom"); cmdline_parse_token_string_t pcmd_mtu_token_cmd = TOKEN_STRING_INITIALIZER(struct pcmd_intstr_params, cmd, "mtu"); cmdline_parse_token_string_t pcmd_regs_token_cmd = TOKEN_STRING_INITIALIZER(struct pcmd_intstr_params, cmd, "regs"); cmdline_parse_token_num_t pcmd_intstr_token_port = - TOKEN_NUM_INITIALIZER(struct pcmd_intstr_params, port, UINT16); + TOKEN_NUM_INITIALIZER(struct pcmd_intstr_params, port, RTE_UINT16); cmdline_parse_token_string_t pcmd_intstr_token_opt = TOKEN_STRING_INITIALIZER(struct pcmd_intstr_params, opt, NULL); @@ -118,7 +92,7 @@ cmdline_parse_token_string_t pcmd_intstr_token_opt = cmdline_parse_token_string_t pcmd_macaddr_token_cmd = TOKEN_STRING_INITIALIZER(struct pcmd_intmac_params, cmd, "macaddr"); cmdline_parse_token_num_t pcmd_intmac_token_port = - TOKEN_NUM_INITIALIZER(struct pcmd_intmac_params, port, UINT16); + TOKEN_NUM_INITIALIZER(struct pcmd_intmac_params, port, RTE_UINT16); cmdline_parse_token_etheraddr_t pcmd_intmac_token_mac = TOKEN_ETHERADDR_INITIALIZER(struct pcmd_intmac_params, mac); @@ -132,18 +106,19 @@ cmdline_parse_token_string_t pcmd_ringparam_token_cmd = TOKEN_STRING_INITIALIZER(struct pcmd_intintint_params, cmd, "ringparam"); cmdline_parse_token_num_t pcmd_intintint_token_port = - TOKEN_NUM_INITIALIZER(struct pcmd_intintint_params, port, UINT16); + TOKEN_NUM_INITIALIZER(struct pcmd_intintint_params, port, + RTE_UINT16); cmdline_parse_token_num_t pcmd_intintint_token_tx = - TOKEN_NUM_INITIALIZER(struct pcmd_intintint_params, tx, UINT16); + TOKEN_NUM_INITIALIZER(struct pcmd_intintint_params, tx, RTE_UINT16); cmdline_parse_token_num_t pcmd_intintint_token_rx = - TOKEN_NUM_INITIALIZER(struct pcmd_intintint_params, rx, UINT16); + TOKEN_NUM_INITIALIZER(struct pcmd_intintint_params, rx, RTE_UINT16); /* Pause commands */ cmdline_parse_token_string_t pcmd_pause_token_cmd = TOKEN_STRING_INITIALIZER(struct pcmd_intstr_params, cmd, "pause"); cmdline_parse_token_num_t pcmd_pause_token_port = - TOKEN_NUM_INITIALIZER(struct pcmd_intstr_params, port, UINT16); + TOKEN_NUM_INITIALIZER(struct pcmd_intstr_params, port, RTE_UINT16); cmdline_parse_token_string_t pcmd_pause_token_opt = TOKEN_STRING_INITIALIZER(struct pcmd_intstr_params, opt, "all#tx#rx#none"); @@ -152,11 +127,11 @@ cmdline_parse_token_string_t pcmd_pause_token_opt = cmdline_parse_token_string_t pcmd_vlan_token_cmd = TOKEN_STRING_INITIALIZER(struct pcmd_vlan_params, cmd, "vlan"); cmdline_parse_token_num_t pcmd_vlan_token_port = - TOKEN_NUM_INITIALIZER(struct pcmd_vlan_params, port, UINT16); + TOKEN_NUM_INITIALIZER(struct pcmd_vlan_params, port, RTE_UINT16); cmdline_parse_token_string_t pcmd_vlan_token_mode = TOKEN_STRING_INITIALIZER(struct pcmd_vlan_params, mode, "add#del"); cmdline_parse_token_num_t pcmd_vlan_token_vid = - TOKEN_NUM_INITIALIZER(struct pcmd_vlan_params, vid, UINT16); + TOKEN_NUM_INITIALIZER(struct pcmd_vlan_params, vid, RTE_UINT16); static void @@ -174,9 +149,10 @@ pcmd_drvinfo_callback(__rte_unused void *ptr_params, __rte_unused void *ptr_data) { struct ethtool_drvinfo info; - int id_port; + uint16_t id_port; - for (id_port = 0; id_port < rte_eth_dev_count(); id_port++) { + RTE_ETH_FOREACH_DEV(id_port) { + memset(&info, 0, sizeof(info)); if (rte_ethtool_get_drvinfo(id_port, &info)) { printf("Error getting info for port %i\n", id_port); return; @@ -184,6 +160,8 @@ pcmd_drvinfo_callback(__rte_unused void *ptr_params, printf("Port %i driver: %s (ver: %s)\n", id_port, info.driver, info.version ); + printf("firmware-version: %s\n", info.fw_version); + printf("bus-info: %s\n", info.bus_info); } } @@ -193,10 +171,10 @@ pcmd_link_callback(__rte_unused void *ptr_params, __rte_unused struct cmdline *ctx, __rte_unused void *ptr_data) { - int num_ports = rte_eth_dev_count(); - int id_port, stat_port; + uint16_t id_port; + int stat_port; - for (id_port = 0; id_port < num_ports; id_port++) { + RTE_ETH_FOREACH_DEV(id_port) { if (!rte_eth_dev_is_valid_port(id_port)) continue; stat_port = rte_ethtool_get_link(id_port); @@ -323,6 +301,54 @@ pcmd_eeprom_callback(void *ptr_params, } +static void +pcmd_module_eeprom_callback(void *ptr_params, + __rte_unused struct cmdline *ctx, + __rte_unused void *ptr_data) +{ + struct pcmd_intstr_params *params = ptr_params; + struct ethtool_eeprom info_eeprom; + uint32_t module_info[2]; + int stat; + unsigned char bytes_eeprom[EEPROM_DUMP_CHUNKSIZE]; + FILE *fp_eeprom; + + if (!rte_eth_dev_is_valid_port(params->port)) { + printf("Error: Invalid port number %i\n", params->port); + return; + } + + stat = rte_ethtool_get_module_info(params->port, module_info); + if (stat != 0) { + printf("Module EEPROM information read error %i\n", stat); + return; + } + + info_eeprom.len = module_info[1]; + info_eeprom.offset = 0; + + stat = rte_ethtool_get_module_eeprom(params->port, + &info_eeprom, bytes_eeprom); + if (stat != 0) { + printf("Module EEPROM read error %i\n", stat); + return; + } + + fp_eeprom = fopen(params->opt, "wb"); + if (fp_eeprom == NULL) { + printf("Error opening '%s' for writing\n", params->opt); + return; + } + printf("Total plugin module EEPROM length: %i bytes\n", + info_eeprom.len); + if (fwrite(bytes_eeprom, 1, info_eeprom.len, + fp_eeprom) != info_eeprom.len) { + printf("Error writing '%s'\n", params->opt); + } + fclose(fp_eeprom); +} + + static void pcmd_pause_callback(void *ptr_params, __rte_unused struct cmdline *ctx, @@ -450,7 +476,7 @@ pcmd_macaddr_callback(void *ptr_params, void *ptr_data) { struct pcmd_intmac_params *params = ptr_params; - struct ether_addr mac_addr; + struct rte_ether_addr mac_addr; int stat; stat = 0; @@ -472,14 +498,8 @@ pcmd_macaddr_callback(void *ptr_params, stat = rte_ethtool_net_get_mac_addr(params->port, &mac_addr); if (stat == 0) { printf( - "Port %i MAC Address: %02x:%02x:%02x:%02x:%02x:%02x\n", - params->port, - mac_addr.addr_bytes[0], - mac_addr.addr_bytes[1], - mac_addr.addr_bytes[2], - mac_addr.addr_bytes[3], - mac_addr.addr_bytes[4], - mac_addr.addr_bytes[5]); + "Port %i MAC Address: " RTE_ETHER_ADDR_PRT_FMT "\n", + params->port, RTE_ETHER_ADDR_BYTES(&mac_addr)); return; } } @@ -502,11 +522,10 @@ pcmd_mtu_callback(void *ptr_params, printf("Error: Invalid port number %i\n", params->port); return; } - new_mtu = atoi(params->opt); new_mtu = strtoul(params->opt, &ptr_parse_end, 10); if (*ptr_parse_end != '\0' || - new_mtu < ETHER_MIN_MTU || - new_mtu > ETHER_MAX_JUMBO_FRAME_LEN) { + new_mtu < RTE_ETHER_MIN_MTU || + new_mtu > RTE_ETHER_MAX_JUMBO_FRAME_LEN) { printf("Port %i: Invalid MTU value\n", params->port); return; } @@ -535,7 +554,6 @@ static void pcmd_portstats_callback(__rte_unused void *ptr_params, } stat = rte_ethtool_net_get_stats64(params->port, &stat_info); if (stat == 0) { - /* Most of rte_eth_stats is deprecated.. */ printf("Port %i stats\n", params->port); printf(" In: %" PRIu64 " (%" PRIu64 " bytes)\n" " Out: %"PRIu64" (%"PRIu64 " bytes)\n" @@ -691,6 +709,18 @@ cmdline_parse_inst_t pcmd_eeprom = { NULL }, }; +cmdline_parse_inst_t pcmd_module_eeprom = { + .f = pcmd_module_eeprom_callback, + .data = NULL, + .help_str = "module-eeprom \n" + " Dump plugin module EEPROM to file", + .tokens = { + (void *)&pcmd_module_eeprom_token_cmd, + (void *)&pcmd_intstr_token_port, + (void *)&pcmd_intstr_token_opt, + NULL + }, +}; cmdline_parse_inst_t pcmd_pause_noopt = { .f = pcmd_pause_callback, .data = (void *)0x01, @@ -843,6 +873,7 @@ cmdline_parse_inst_t pcmd_vlan = { cmdline_parse_ctx_t list_prompt_commands[] = { (cmdline_parse_inst_t *)&pcmd_drvinfo, (cmdline_parse_inst_t *)&pcmd_eeprom, + (cmdline_parse_inst_t *)&pcmd_module_eeprom, (cmdline_parse_inst_t *)&pcmd_link, (cmdline_parse_inst_t *)&pcmd_macaddr_get, (cmdline_parse_inst_t *)&pcmd_macaddr,