X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fethtool%2Flib%2Frte_ethtool.c;h=db8150efd554ec21e58fbd80ff758c96e3beeaf2;hb=383fb5a9c7f86931720a389335268b32fb9373a5;hp=d519a50db953a6c799736c47e8f198c3734c550d;hpb=cd8c7c7ce241d2ea7c059a9df07caa9411ef19ed;p=dpdk.git diff --git a/examples/ethtool/lib/rte_ethtool.c b/examples/ethtool/lib/rte_ethtool.c index d519a50db9..db8150efd5 100644 --- a/examples/ethtool/lib/rte_ethtool.c +++ b/examples/ethtool/lib/rte_ethtool.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -40,13 +41,17 @@ rte_ethtool_get_drvinfo(uint16_t port_id, struct ethtool_drvinfo *drvinfo) printf("Insufficient fw version buffer size, " "the minimum size should be %d\n", ret); - memset(&dev_info, 0, sizeof(dev_info)); - rte_eth_dev_info_get(port_id, &dev_info); + ret = rte_eth_dev_info_get(port_id, &dev_info); + if (ret != 0) { + printf("Error during getting device (port %u) info: %s\n", + port_id, strerror(-ret)); - snprintf(drvinfo->driver, sizeof(drvinfo->driver), "%s", - dev_info.driver_name); - snprintf(drvinfo->version, sizeof(drvinfo->version), "%s", - rte_version()); + return ret; + } + + strlcpy(drvinfo->driver, dev_info.driver_name, + sizeof(drvinfo->driver)); + strlcpy(drvinfo->version, rte_version(), sizeof(drvinfo->version)); /* TODO: replace bus_info by rte_devargs.name */ if (dev_info.device) bus = rte_bus_find_by_device(dev_info.device); @@ -119,9 +124,13 @@ int rte_ethtool_get_link(uint16_t port_id) { struct rte_eth_link link; + int ret; RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); - rte_eth_link_get(port_id, &link); + ret = rte_eth_link_get(port_id, &link); + if (ret < 0) + return ret; + return link.link_status; } @@ -177,6 +186,36 @@ rte_ethtool_set_eeprom(uint16_t port_id, struct ethtool_eeprom *eeprom, return 0; } +int +rte_ethtool_get_module_info(uint16_t port_id, uint32_t *modinfo) +{ + struct rte_eth_dev_module_info *info; + + info = (struct rte_eth_dev_module_info *)modinfo; + return rte_eth_dev_get_module_info(port_id, info); +} + +int +rte_ethtool_get_module_eeprom(uint16_t port_id, struct ethtool_eeprom *eeprom, + void *words) +{ + struct rte_dev_eeprom_info eeprom_info; + int status; + + if (eeprom == NULL || words == NULL) + return -EINVAL; + + eeprom_info.offset = eeprom->offset; + eeprom_info.length = eeprom->len; + eeprom_info.data = words; + + status = rte_eth_dev_get_module_eeprom(port_id, &eeprom_info); + if (status) + return status; + + return 0; +} + int rte_ethtool_get_pauseparam(uint16_t port_id, struct ethtool_pauseparam *pause_param) @@ -273,18 +312,23 @@ rte_ethtool_net_stop(uint16_t port_id) } int -rte_ethtool_net_get_mac_addr(uint16_t port_id, struct ether_addr *addr) +rte_ethtool_net_get_mac_addr(uint16_t port_id, struct rte_ether_addr *addr) { + int ret; + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); if (addr == NULL) return -EINVAL; - rte_eth_macaddr_get(port_id, addr); + + ret = rte_eth_macaddr_get(port_id, addr); + if (ret != 0) + return ret; return 0; } int -rte_ethtool_net_set_mac_addr(uint16_t port_id, struct ether_addr *addr) +rte_ethtool_net_set_mac_addr(uint16_t port_id, struct rte_ether_addr *addr) { if (addr == NULL) return -EINVAL; @@ -293,11 +337,11 @@ rte_ethtool_net_set_mac_addr(uint16_t port_id, struct ether_addr *addr) int rte_ethtool_net_validate_addr(uint16_t port_id __rte_unused, - struct ether_addr *addr) + struct rte_ether_addr *addr) { if (addr == NULL) return -EINVAL; - return is_valid_assigned_ether_addr(addr); + return rte_is_valid_assigned_ether_addr(addr); } int @@ -341,9 +385,12 @@ rte_ethtool_net_set_rx_mode(uint16_t port_id) uint16_t num_vfs; struct rte_eth_dev_info dev_info; uint16_t vf; + int ret; + + ret = rte_eth_dev_info_get(port_id, &dev_info); + if (ret != 0) + return ret; - memset(&dev_info, 0, sizeof(dev_info)); - rte_eth_dev_info_get(port_id, &dev_info); num_vfs = dev_info.max_vfs; /* Set VF vf_rx_mode, VF unsupport status is discard */ @@ -355,7 +402,9 @@ rte_ethtool_net_set_rx_mode(uint16_t port_id) } /* Enable Rx vlan filter, VF unspport status is discard */ - rte_eth_dev_set_vlan_offload(port_id, ETH_VLAN_FILTER_MASK); + ret = rte_eth_dev_set_vlan_offload(port_id, ETH_VLAN_FILTER_MASK); + if (ret != 0) + return ret; return 0; } @@ -369,11 +418,14 @@ rte_ethtool_get_ringparam(uint16_t port_id, struct rte_eth_rxq_info rx_qinfo; struct rte_eth_txq_info tx_qinfo; int stat; + int ret; if (ring_param == NULL) return -EINVAL; - rte_eth_dev_info_get(port_id, &dev_info); + ret = rte_eth_dev_info_get(port_id, &dev_info); + if (ret != 0) + return ret; stat = rte_eth_rx_queue_info_get(port_id, 0, &rx_qinfo); if (stat != 0)