net/mlx5: zero LRO mbuf headroom
[dpdk.git] / app / test-pmd / config.c
index 010e26d..1a5a5c1 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;
@@ -510,6 +582,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 +614,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];
@@ -2278,19 +2354,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 +2592,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 +2604,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;
        }
 
@@ -3006,7 +3080,8 @@ tx_qinq_set(portid_t port_id, uint16_t vlan_id, uint16_t vlan_id_outer)
        }
 
        tx_vlan_reset(port_id);
-       ports[port_id].dev_conf.txmode.offloads |= DEV_TX_OFFLOAD_QINQ_INSERT;
+       ports[port_id].dev_conf.txmode.offloads |= (DEV_TX_OFFLOAD_VLAN_INSERT |
+                                                   DEV_TX_OFFLOAD_QINQ_INSERT);
        ports[port_id].tx_vlan_id = vlan_id;
        ports[port_id].tx_vlan_id_outer = vlan_id_outer;
 }
@@ -3452,7 +3527,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;
 
        /*
@@ -3469,9 +3544,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",
@@ -3500,7 +3575,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
@@ -3519,7 +3594,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;
@@ -3534,7 +3609,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;
                }
@@ -3542,12 +3617,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;
@@ -3561,7 +3636,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) {