ethdev: remove redundant device info cleanup before get
[dpdk.git] / app / test-pmd / config.c
index f9cb129..523b3d3 100644 (file)
@@ -49,7 +49,6 @@
 #include <rte_pmd_bnxt.h>
 #endif
 #include <rte_gro.h>
-#include <cmdline_parse_etheraddr.h>
 #include <rte_config.h>
 
 #include "testpmd.h"
@@ -108,10 +107,10 @@ const struct rss_type_info rss_type_table[] = {
 };
 
 static void
-print_ethaddr(const char *name, struct ether_addr *eth_addr)
+print_ethaddr(const char *name, struct rte_ether_addr *eth_addr)
 {
-       char buf[ETHER_ADDR_FMT_SIZE];
-       ether_format_addr(buf, ETHER_ADDR_FMT_SIZE, eth_addr);
+       char buf[RTE_ETHER_ADDR_FMT_SIZE];
+       rte_ether_format_addr(buf, RTE_ETHER_ADDR_FMT_SIZE, eth_addr);
        printf("%s%s", name, buf);
 }
 
@@ -387,11 +386,84 @@ tx_queue_infos_display(portid_t port_id, uint16_t queue_id)
        printf("\n");
 }
 
+static int bus_match_all(const struct rte_bus *bus, const void *data)
+{
+       RTE_SET_USED(bus);
+       RTE_SET_USED(data);
+       return 0;
+}
+
+void
+device_infos_display(const char *identifier)
+{
+       static const char *info_border = "*********************";
+       struct rte_bus *start = NULL, *next;
+       struct rte_dev_iterator dev_iter;
+       char name[RTE_ETH_NAME_MAX_LEN];
+       struct rte_ether_addr mac_addr;
+       struct rte_device *dev;
+       struct rte_devargs da;
+       portid_t port_id;
+       char devstr[128];
+
+       memset(&da, 0, sizeof(da));
+       if (!identifier)
+               goto skip_parse;
+
+       if (rte_devargs_parsef(&da, "%s", identifier)) {
+               printf("cannot parse identifier\n");
+               if (da.args)
+                       free(da.args);
+               return;
+       }
+
+skip_parse:
+       while ((next = rte_bus_find(start, bus_match_all, NULL)) != NULL) {
+
+               start = next;
+               if (identifier && da.bus != next)
+                       continue;
+
+               /* Skip buses that don't have iterate method */
+               if (!next->dev_iterate)
+                       continue;
+
+               snprintf(devstr, sizeof(devstr), "bus=%s", next->name);
+               RTE_DEV_FOREACH(dev, devstr, &dev_iter) {
+
+                       if (!dev->driver)
+                               continue;
+                       /* Check for matching device if identifier is present */
+                       if (identifier &&
+                           strncmp(da.name, dev->name, strlen(dev->name)))
+                               continue;
+                       printf("\n%s Infos for device %s %s\n",
+                              info_border, dev->name, info_border);
+                       printf("Bus name: %s", dev->bus->name);
+                       printf("\nDriver name: %s", dev->driver->name);
+                       printf("\nDevargs: %s",
+                              dev->devargs ? dev->devargs->args : "");
+                       printf("\nConnect to socket: %d", dev->numa_node);
+                       printf("\n");
+
+                       /* List ports with matching device name */
+                       RTE_ETH_FOREACH_DEV_OF(port_id, dev) {
+                               rte_eth_macaddr_get(port_id, &mac_addr);
+                               printf("\n\tPort id: %-2d", port_id);
+                               print_ethaddr("\n\tMAC address: ", &mac_addr);
+                               rte_eth_dev_get_name_by_port(port_id, name);
+                               printf("\n\tDevice name: %s", name);
+                               printf("\n");
+                       }
+               }
+       };
+}
+
 void
 port_infos_display(portid_t port_id)
 {
        struct rte_port *port;
-       struct ether_addr mac_addr;
+       struct rte_ether_addr mac_addr;
        struct rte_eth_link link;
        struct rte_eth_dev_info dev_info;
        int vlan_offload;
@@ -406,7 +478,6 @@ port_infos_display(portid_t port_id)
        }
        port = &ports[port_id];
        rte_eth_link_get_nowait(port_id, &link);
-       memset(&dev_info, 0, sizeof(dev_info));
        rte_eth_dev_info_get(port_id, &dev_info);
        printf("\n%s Infos for port %-2d %s\n",
               info_border, port_id, info_border);
@@ -510,6 +581,10 @@ port_infos_display(portid_t port_id)
        printf("Min possible number of TXDs per queue: %hu\n",
                dev_info.tx_desc_lim.nb_min);
        printf("TXDs number alignment: %hu\n", dev_info.tx_desc_lim.nb_align);
+       printf("Max segment number per packet: %hu\n",
+               dev_info.tx_desc_lim.nb_seg_max);
+       printf("Max segment number per MTU/TSO: %hu\n",
+               dev_info.tx_desc_lim.nb_mtu_seg_max);
 
        /* Show switch info only if valid switch domain and port id is set */
        if (dev_info.switch_info.domain_id !=
@@ -538,7 +613,7 @@ port_summary_header_display(void)
 void
 port_summary_display(portid_t port_id)
 {
-       struct ether_addr mac_addr;
+       struct rte_ether_addr mac_addr;
        struct rte_eth_link link;
        struct rte_eth_dev_info dev_info;
        char name[RTE_ETH_NAME_MAX_LEN];
@@ -1547,7 +1622,6 @@ ring_rx_descriptor_display(const struct rte_memzone *ring_mz,
 #ifndef RTE_LIBRTE_I40E_16BYTE_RX_DESC
        struct rte_eth_dev_info dev_info;
 
-       memset(&dev_info, 0, sizeof(dev_info));
        rte_eth_dev_info_get(port_id, &dev_info);
        if (strstr(dev_info.driver_name, "i40e") != NULL) {
                /* 32 bytes RX descriptor, i40e only */
@@ -2278,19 +2352,16 @@ pkt_fwd_config_display(struct fwd_config *cfg)
 void
 set_fwd_eth_peer(portid_t port_id, char *peer_addr)
 {
-       uint8_t c, new_peer_addr[6];
+       struct rte_ether_addr new_peer_addr;
        if (!rte_eth_dev_is_valid_port(port_id)) {
                printf("Error: Invalid port number %i\n", port_id);
                return;
        }
-       if (cmdline_parse_etheraddr(NULL, peer_addr, &new_peer_addr,
-                                       sizeof(new_peer_addr)) < 0) {
+       if (rte_ether_unformat_addr(peer_addr, &new_peer_addr) < 0) {
                printf("Error: Invalid ethernet address: %s\n", peer_addr);
                return;
        }
-       for (c = 0; c < 6; c++)
-               peer_eth_addrs[port_id].addr_bytes[c] =
-                       new_peer_addr[c];
+       peer_eth_addrs[port_id] = new_peer_addr;
 }
 
 int
@@ -2519,7 +2590,8 @@ set_tx_pkt_segments(unsigned *seg_lengths, unsigned nb_segs)
         * Check that each segment length is greater or equal than
         * the mbuf data sise.
         * Check also that the total packet length is greater or equal than the
-        * size of an empty UDP/IP packet (sizeof(struct ether_hdr) + 20 + 8).
+        * size of an empty UDP/IP packet (sizeof(struct rte_ether_hdr) +
+        * 20 + 8).
         */
        tx_pkt_len = 0;
        for (i = 0; i < nb_segs; i++) {
@@ -2530,10 +2602,10 @@ set_tx_pkt_segments(unsigned *seg_lengths, unsigned nb_segs)
                }
                tx_pkt_len = (uint16_t)(tx_pkt_len + seg_lengths[i]);
        }
-       if (tx_pkt_len < (sizeof(struct ether_hdr) + 20 + 8)) {
+       if (tx_pkt_len < (sizeof(struct rte_ether_hdr) + 20 + 8)) {
                printf("total packet length=%u < %d - give up\n",
                                (unsigned) tx_pkt_len,
-                               (int)(sizeof(struct ether_hdr) + 20 + 8));
+                               (int)(sizeof(struct rte_ether_hdr) + 20 + 8));
                return;
        }
 
@@ -3453,7 +3525,7 @@ set_vf_rate_limit(portid_t port_id, uint16_t vf, uint16_t rate, uint64_t q_msk)
 static int
 mcast_addr_pool_extend(struct rte_port *port)
 {
-       struct ether_addr *mc_pool;
+       struct rte_ether_addr *mc_pool;
        size_t mc_pool_size;
 
        /*
@@ -3470,9 +3542,9 @@ mcast_addr_pool_extend(struct rte_port *port)
         * The previous test guarantees that port->mc_addr_nb is a multiple
         * of MCAST_POOL_INC.
         */
-       mc_pool_size = sizeof(struct ether_addr) * (port->mc_addr_nb +
+       mc_pool_size = sizeof(struct rte_ether_addr) * (port->mc_addr_nb +
                                                    MCAST_POOL_INC);
-       mc_pool = (struct ether_addr *) realloc(port->mc_addr_pool,
+       mc_pool = (struct rte_ether_addr *) realloc(port->mc_addr_pool,
                                                mc_pool_size);
        if (mc_pool == NULL) {
                printf("allocation of pool of %u multicast addresses failed\n",
@@ -3501,7 +3573,7 @@ mcast_addr_pool_remove(struct rte_port *port, uint32_t addr_idx)
        }
        memmove(&port->mc_addr_pool[addr_idx],
                &port->mc_addr_pool[addr_idx + 1],
-               sizeof(struct ether_addr) * (port->mc_addr_nb - addr_idx));
+               sizeof(struct rte_ether_addr) * (port->mc_addr_nb - addr_idx));
 }
 
 static void
@@ -3520,7 +3592,7 @@ eth_port_multicast_addr_list_set(portid_t port_id)
 }
 
 void
-mcast_addr_add(portid_t port_id, struct ether_addr *mc_addr)
+mcast_addr_add(portid_t port_id, struct rte_ether_addr *mc_addr)
 {
        struct rte_port *port;
        uint32_t i;
@@ -3535,7 +3607,7 @@ mcast_addr_add(portid_t port_id, struct ether_addr *mc_addr)
         * in the pool of multicast addresses.
         */
        for (i = 0; i < port->mc_addr_nb; i++) {
-               if (is_same_ether_addr(mc_addr, &port->mc_addr_pool[i])) {
+               if (rte_is_same_ether_addr(mc_addr, &port->mc_addr_pool[i])) {
                        printf("multicast address already filtered by port\n");
                        return;
                }
@@ -3543,12 +3615,12 @@ mcast_addr_add(portid_t port_id, struct ether_addr *mc_addr)
 
        if (mcast_addr_pool_extend(port) != 0)
                return;
-       ether_addr_copy(mc_addr, &port->mc_addr_pool[i]);
+       rte_ether_addr_copy(mc_addr, &port->mc_addr_pool[i]);
        eth_port_multicast_addr_list_set(port_id);
 }
 
 void
-mcast_addr_remove(portid_t port_id, struct ether_addr *mc_addr)
+mcast_addr_remove(portid_t port_id, struct rte_ether_addr *mc_addr)
 {
        struct rte_port *port;
        uint32_t i;
@@ -3562,7 +3634,7 @@ mcast_addr_remove(portid_t port_id, struct ether_addr *mc_addr)
         * Search the pool of multicast MAC addresses for the removed address.
         */
        for (i = 0; i < port->mc_addr_nb; i++) {
-               if (is_same_ether_addr(mc_addr, &port->mc_addr_pool[i]))
+               if (rte_is_same_ether_addr(mc_addr, &port->mc_addr_pool[i]))
                        break;
        }
        if (i == port->mc_addr_nb) {