doc: rename compress feature flag
[dpdk.git] / app / test-pmd / config.c
index bcaf429..97020fb 100644 (file)
@@ -121,15 +121,11 @@ nic_stats_display(portid_t port_id)
        struct rte_eth_stats stats;
        struct rte_port *port = &ports[port_id];
        uint8_t i;
-       portid_t pid;
 
        static const char *nic_stats_border = "########################";
 
        if (port_id_is_invalid(port_id, ENABLED_WARN)) {
-               printf("Valid port range is [0");
-               RTE_ETH_FOREACH_DEV(pid)
-                       printf(", %d", pid);
-               printf("]\n");
+               print_valid_ports();
                return;
        }
        rte_eth_stats_get(port_id, &stats);
@@ -203,13 +199,8 @@ nic_stats_display(portid_t port_id)
 void
 nic_stats_clear(portid_t port_id)
 {
-       portid_t pid;
-
        if (port_id_is_invalid(port_id, ENABLED_WARN)) {
-               printf("Valid port range is [0");
-               RTE_ETH_FOREACH_DEV(pid)
-                       printf(", %d", pid);
-               printf("]\n");
+               print_valid_ports();
                return;
        }
        rte_eth_stats_reset(port_id);
@@ -286,15 +277,11 @@ nic_stats_mapping_display(portid_t port_id)
 {
        struct rte_port *port = &ports[port_id];
        uint16_t i;
-       portid_t pid;
 
        static const char *nic_stats_mapping_border = "########################";
 
        if (port_id_is_invalid(port_id, ENABLED_WARN)) {
-               printf("Valid port range is [0");
-               RTE_ETH_FOREACH_DEV(pid)
-                       printf(", %d", pid);
-               printf("]\n");
+               print_valid_ports();
                return;
        }
 
@@ -405,15 +392,11 @@ port_infos_display(portid_t port_id)
        int vlan_offload;
        struct rte_mempool * mp;
        static const char *info_border = "*********************";
-       portid_t pid;
        uint16_t mtu;
        char name[RTE_ETH_NAME_MAX_LEN];
 
        if (port_id_is_invalid(port_id, ENABLED_WARN)) {
-               printf("Valid port range is [0");
-               RTE_ETH_FOREACH_DEV(pid)
-                       printf(", %d", pid);
-               printf("]\n");
+               print_valid_ports();
                return;
        }
        port = &ports[port_id];
@@ -774,6 +757,17 @@ port_id_is_invalid(portid_t port_id, enum print_warning warning)
        return 1;
 }
 
+void print_valid_ports(void)
+{
+       portid_t pid;
+
+       printf("The valid ports array is [");
+       RTE_ETH_FOREACH_DEV(pid) {
+               printf(" %d", pid);
+       }
+       printf(" ]\n");
+}
+
 static int
 vlan_id_is_invalid(uint16_t vlan_id)
 {
@@ -1055,15 +1049,24 @@ flow_item_spec_copy(void *buf, const struct rte_flow_item *item,
                    enum item_spec_type type)
 {
        size_t size = 0;
-       const void *item_spec =
+       const void *data =
                type == ITEM_SPEC ? item->spec :
                type == ITEM_LAST ? item->last :
                type == ITEM_MASK ? item->mask :
                NULL;
 
-       if (!item_spec)
+       if (!item->spec || !data)
                goto empty;
        switch (item->type) {
+               union {
+                       const struct rte_flow_item_raw *raw;
+               } spec;
+               union {
+                       const struct rte_flow_item_raw *raw;
+               } last;
+               union {
+                       const struct rte_flow_item_raw *raw;
+               } mask;
                union {
                        const struct rte_flow_item_raw *raw;
                } src;
@@ -1073,12 +1076,21 @@ flow_item_spec_copy(void *buf, const struct rte_flow_item *item,
                size_t off;
 
        case RTE_FLOW_ITEM_TYPE_RAW:
-               src.raw = item_spec;
+               spec.raw = item->spec;
+               last.raw = item->last ? item->last : item->spec;
+               mask.raw = item->mask ? item->mask : &rte_flow_item_raw_mask;
+               src.raw = data;
                dst.raw = buf;
                off = RTE_ALIGN_CEIL(sizeof(struct rte_flow_item_raw),
                                     sizeof(*src.raw->pattern));
-               size = off + ((const struct rte_flow_item_raw *)item->spec)->
-                       length * sizeof(*src.raw->pattern);
+               if (type == ITEM_SPEC ||
+                   (type == ITEM_MASK &&
+                    ((spec.raw->length & mask.raw->length) >=
+                     (last.raw->length & mask.raw->length))))
+                       size = spec.raw->length & mask.raw->length;
+               else
+                       size = last.raw->length & mask.raw->length;
+               size = off + size * sizeof(*src.raw->pattern);
                if (dst.raw) {
                        memcpy(dst.raw, src.raw, sizeof(*src.raw));
                        dst.raw->pattern = memcpy((uint8_t *)dst.raw + off,
@@ -1089,7 +1101,7 @@ flow_item_spec_copy(void *buf, const struct rte_flow_item *item,
        default:
                size = flow_item[item->type].size;
                if (buf)
-                       memcpy(buf, item_spec, size);
+                       memcpy(buf, data, size);
                break;
        }
 empty:
@@ -1827,6 +1839,11 @@ rxtx_config_display(void)
                struct rte_eth_txconf *tx_conf = &ports[pid].tx_conf[0];
                uint16_t *nb_rx_desc = &ports[pid].nb_rx_desc[0];
                uint16_t *nb_tx_desc = &ports[pid].nb_tx_desc[0];
+               uint16_t nb_rx_desc_tmp;
+               uint16_t nb_tx_desc_tmp;
+               struct rte_eth_rxq_info rx_qinfo;
+               struct rte_eth_txq_info tx_qinfo;
+               int32_t rc;
 
                /* per port config */
                printf("  port %d: RX queue number: %d Tx queue number: %d\n",
@@ -1838,9 +1855,15 @@ rxtx_config_display(void)
 
                /* per rx queue config only for first queue to be less verbose */
                for (qid = 0; qid < 1; qid++) {
+                       rc = rte_eth_rx_queue_info_get(pid, qid, &rx_qinfo);
+                       if (rc)
+                               nb_rx_desc_tmp = nb_rx_desc[qid];
+                       else
+                               nb_rx_desc_tmp = rx_qinfo.nb_desc;
+
                        printf("    RX queue: %d\n", qid);
                        printf("      RX desc=%d - RX free threshold=%d\n",
-                               nb_rx_desc[qid], rx_conf[qid].rx_free_thresh);
+                               nb_rx_desc_tmp, rx_conf[qid].rx_free_thresh);
                        printf("      RX threshold registers: pthresh=%d hthresh=%d "
                                " wthresh=%d\n",
                                rx_conf[qid].rx_thresh.pthresh,
@@ -1852,9 +1875,15 @@ rxtx_config_display(void)
 
                /* per tx queue config only for first queue to be less verbose */
                for (qid = 0; qid < 1; qid++) {
+                       rc = rte_eth_tx_queue_info_get(pid, qid, &tx_qinfo);
+                       if (rc)
+                               nb_tx_desc_tmp = nb_tx_desc[qid];
+                       else
+                               nb_tx_desc_tmp = tx_qinfo.nb_desc;
+
                        printf("    TX queue: %d\n", qid);
                        printf("      TX desc=%d - TX free threshold=%d\n",
-                               nb_tx_desc[qid], tx_conf[qid].tx_free_thresh);
+                               nb_tx_desc_tmp, tx_conf[qid].tx_free_thresh);
                        printf("      TX threshold registers: pthresh=%d hthresh=%d "
                                " wthresh=%d\n",
                                tx_conf[qid].tx_thresh.pthresh,