Ethdev Rx/Tx offloads API has changed since:

commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API")
commit cba7f53b717d ("ethdev: introduce Tx queue offloads API")

Convert the application to use the new API.

Signed-off-by: Shahaf Shuler <shah...@mellanox.com>
---
 app/test-pmd/cmdline.c    | 148 +++++++++++++++++++++++++++++++++--------
 app/test-pmd/config.c     |  97 +++++++++++++++++++--------
 app/test-pmd/parameters.c |  35 +++++-----
 app/test-pmd/testpmd.c    |  24 +++----
 4 files changed, 219 insertions(+), 85 deletions(-)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index f71d96301..b0f2325c8 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -1577,6 +1577,7 @@ cmd_config_max_pkt_len_parsed(void *parsed_result,
                                __attribute__((unused)) void *data)
 {
        struct cmd_config_max_pkt_len_result *res = parsed_result;
+       uint64_t rx_offloads = rx_mode.offloads;
 
        if (!all_ports_stopped()) {
                printf("Please stop all ports first\n");
@@ -1594,14 +1595,16 @@ cmd_config_max_pkt_len_parsed(void *parsed_result,
 
                rx_mode.max_rx_pkt_len = res->value;
                if (res->value > ETHER_MAX_LEN)
-                       rx_mode.jumbo_frame = 1;
+                       rx_offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
                else
-                       rx_mode.jumbo_frame = 0;
+                       rx_offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
        } else {
                printf("Unknown parameter\n");
                return;
        }
 
+       rx_mode.offloads = rx_offloads;
+
        init_port_config();
 
        cmd_reconfig_device_queue(RTE_PORT_ALL, 1, 1);
@@ -1703,6 +1706,7 @@ cmd_config_rx_mode_flag_parsed(void *parsed_result,
                                __attribute__((unused)) void *data)
 {
        struct cmd_config_rx_mode_flag *res = parsed_result;
+       uint64_t rx_offloads = rx_mode.offloads;
 
        if (!all_ports_stopped()) {
                printf("Please stop all ports first\n");
@@ -1711,48 +1715,48 @@ cmd_config_rx_mode_flag_parsed(void *parsed_result,
 
        if (!strcmp(res->name, "crc-strip")) {
                if (!strcmp(res->value, "on"))
-                       rx_mode.hw_strip_crc = 1;
+                       rx_offloads |= DEV_RX_OFFLOAD_CRC_STRIP;
                else if (!strcmp(res->value, "off"))
-                       rx_mode.hw_strip_crc = 0;
+                       rx_offloads &= ~DEV_RX_OFFLOAD_CRC_STRIP;
                else {
                        printf("Unknown parameter\n");
                        return;
                }
        } else if (!strcmp(res->name, "scatter")) {
-               if (!strcmp(res->value, "on"))
-                       rx_mode.enable_scatter = 1;
-               else if (!strcmp(res->value, "off"))
-                       rx_mode.enable_scatter = 0;
-               else {
+               if (!strcmp(res->value, "on")) {
+                       rx_offloads |= DEV_RX_OFFLOAD_SCATTER;
+               } else if (!strcmp(res->value, "off")) {
+                       rx_offloads &= ~DEV_RX_OFFLOAD_SCATTER;
+               } else {
                        printf("Unknown parameter\n");
                        return;
                }
        } else if (!strcmp(res->name, "rx-cksum")) {
                if (!strcmp(res->value, "on"))
-                       rx_mode.hw_ip_checksum = 1;
+                       rx_offloads |= DEV_RX_OFFLOAD_CHECKSUM;
                else if (!strcmp(res->value, "off"))
-                       rx_mode.hw_ip_checksum = 0;
+                       rx_offloads &= ~DEV_RX_OFFLOAD_CHECKSUM;
                else {
                        printf("Unknown parameter\n");
                        return;
                }
        } else if (!strcmp(res->name, "rx-timestamp")) {
                if (!strcmp(res->value, "on"))
-                       rx_mode.hw_timestamp = 1;
+                       rx_offloads |= DEV_RX_OFFLOAD_TIMESTAMP;
                else if (!strcmp(res->value, "off"))
-                       rx_mode.hw_timestamp = 0;
+                       rx_offloads &= ~DEV_RX_OFFLOAD_TIMESTAMP;
                else {
                        printf("Unknown parameter\n");
                        return;
                }
        } else if (!strcmp(res->name, "hw-vlan")) {
                if (!strcmp(res->value, "on")) {
-                       rx_mode.hw_vlan_filter = 1;
-                       rx_mode.hw_vlan_strip  = 1;
+                       rx_offloads |= (DEV_RX_OFFLOAD_VLAN_FILTER |
+                                       DEV_RX_OFFLOAD_VLAN_STRIP);
                }
                else if (!strcmp(res->value, "off")) {
-                       rx_mode.hw_vlan_filter = 0;
-                       rx_mode.hw_vlan_strip  = 0;
+                       rx_offloads &= ~(DEV_RX_OFFLOAD_VLAN_FILTER |
+                                       DEV_RX_OFFLOAD_VLAN_STRIP);
                }
                else {
                        printf("Unknown parameter\n");
@@ -1760,27 +1764,27 @@ cmd_config_rx_mode_flag_parsed(void *parsed_result,
                }
        } else if (!strcmp(res->name, "hw-vlan-filter")) {
                if (!strcmp(res->value, "on"))
-                       rx_mode.hw_vlan_filter = 1;
+                       rx_offloads |= DEV_RX_OFFLOAD_VLAN_FILTER;
                else if (!strcmp(res->value, "off"))
-                       rx_mode.hw_vlan_filter = 0;
+                       rx_offloads &= ~DEV_RX_OFFLOAD_VLAN_FILTER;
                else {
                        printf("Unknown parameter\n");
                        return;
                }
        } else if (!strcmp(res->name, "hw-vlan-strip")) {
                if (!strcmp(res->value, "on"))
-                       rx_mode.hw_vlan_strip  = 1;
+                       rx_offloads |= DEV_RX_OFFLOAD_VLAN_STRIP;
                else if (!strcmp(res->value, "off"))
-                       rx_mode.hw_vlan_strip  = 0;
+                       rx_offloads &= ~DEV_RX_OFFLOAD_VLAN_STRIP;
                else {
                        printf("Unknown parameter\n");
                        return;
                }
        } else if (!strcmp(res->name, "hw-vlan-extend")) {
                if (!strcmp(res->value, "on"))
-                       rx_mode.hw_vlan_extend = 1;
+                       rx_offloads |= DEV_RX_OFFLOAD_VLAN_EXTEND;
                else if (!strcmp(res->value, "off"))
-                       rx_mode.hw_vlan_extend = 0;
+                       rx_offloads &= ~DEV_RX_OFFLOAD_VLAN_EXTEND;
                else {
                        printf("Unknown parameter\n");
                        return;
@@ -1798,6 +1802,7 @@ cmd_config_rx_mode_flag_parsed(void *parsed_result,
                printf("Unknown parameter\n");
                return;
        }
+       rx_mode.offloads = rx_offloads;
 
        init_port_config();
 
@@ -3434,7 +3439,14 @@ cmd_tx_vlan_set_parsed(void *parsed_result,
 {
        struct cmd_tx_vlan_set_result *res = parsed_result;
 
+       if (!all_ports_stopped()) {
+               printf("Please stop all ports first\n");
+               return;
+       }
+
        tx_vlan_set(res->port_id, res->vlan_id);
+
+       cmd_reconfig_device_queue(RTE_PORT_ALL, 1, 1);
 }
 
 cmdline_parse_token_string_t cmd_tx_vlan_set_tx_vlan =
@@ -3481,7 +3493,14 @@ cmd_tx_vlan_set_qinq_parsed(void *parsed_result,
 {
        struct cmd_tx_vlan_set_qinq_result *res = parsed_result;
 
+       if (!all_ports_stopped()) {
+               printf("Please stop all ports first\n");
+               return;
+       }
+
        tx_qinq_set(res->port_id, res->vlan_id, res->vlan_id_outer);
+
+       cmd_reconfig_device_queue(RTE_PORT_ALL, 1, 1);
 }
 
 cmdline_parse_token_string_t cmd_tx_vlan_set_qinq_tx_vlan =
@@ -3587,7 +3606,14 @@ cmd_tx_vlan_reset_parsed(void *parsed_result,
 {
        struct cmd_tx_vlan_reset_result *res = parsed_result;
 
+       if (!all_ports_stopped()) {
+               printf("Please stop all ports first\n");
+               return;
+       }
+
        tx_vlan_reset(res->port_id);
+
+       cmd_reconfig_device_queue(RTE_PORT_ALL, 1, 1);
 }
 
 cmdline_parse_token_string_t cmd_tx_vlan_reset_tx_vlan =
@@ -3680,11 +3706,16 @@ cmd_csum_parsed(void *parsed_result,
        struct cmd_csum_result *res = parsed_result;
        int hw = 0;
        uint16_t mask = 0;
+       uint64_t csum_offloads = 0;
 
        if (port_id_is_invalid(res->port_id, ENABLED_WARN)) {
                printf("invalid port %d\n", res->port_id);
                return;
        }
+       if (!all_ports_stopped()) {
+               printf("Please stop all ports first\n");
+               return;
+       }
 
        if (!strcmp(res->mode, "set")) {
 
@@ -3693,22 +3724,34 @@ cmd_csum_parsed(void *parsed_result,
 
                if (!strcmp(res->proto, "ip")) {
                        mask = TESTPMD_TX_OFFLOAD_IP_CKSUM;
+                       csum_offloads |= DEV_TX_OFFLOAD_IPV4_CKSUM;
                } else if (!strcmp(res->proto, "udp")) {
                        mask = TESTPMD_TX_OFFLOAD_UDP_CKSUM;
+                       csum_offloads |= DEV_TX_OFFLOAD_UDP_CKSUM;
                } else if (!strcmp(res->proto, "tcp")) {
                        mask = TESTPMD_TX_OFFLOAD_TCP_CKSUM;
+                       csum_offloads |= DEV_TX_OFFLOAD_TCP_CKSUM;
                } else if (!strcmp(res->proto, "sctp")) {
                        mask = TESTPMD_TX_OFFLOAD_SCTP_CKSUM;
+                       csum_offloads |= DEV_TX_OFFLOAD_SCTP_CKSUM;
                } else if (!strcmp(res->proto, "outer-ip")) {
                        mask = TESTPMD_TX_OFFLOAD_OUTER_IP_CKSUM;
+                       csum_offloads |= DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM;
                }
 
-               if (hw)
+               if (hw) {
                        ports[res->port_id].tx_ol_flags |= mask;
-               else
+                       ports[res->port_id].dev_conf.txmode.offloads |=
+                                                       csum_offloads;
+               } else {
                        ports[res->port_id].tx_ol_flags &= (~mask);
+                       ports[res->port_id].dev_conf.txmode.offloads &=
+                                                       (~csum_offloads);
+               }
        }
        csum_show(res->port_id);
+
+       cmd_reconfig_device_queue(RTE_PORT_ALL, 1, 1);
 }
 
 cmdline_parse_token_string_t cmd_csum_csum =
@@ -3832,15 +3875,24 @@ cmd_tso_set_parsed(void *parsed_result,
 
        if (port_id_is_invalid(res->port_id, ENABLED_WARN))
                return;
+       if (!all_ports_stopped()) {
+               printf("Please stop all ports first\n");
+               return;
+       }
 
        if (!strcmp(res->mode, "set"))
                ports[res->port_id].tso_segsz = res->tso_segsz;
 
-       if (ports[res->port_id].tso_segsz == 0)
+       if (ports[res->port_id].tso_segsz == 0) {
+               ports[res->port_id].dev_conf.txmode.offloads &=
+                                               ~DEV_TX_OFFLOAD_TCP_TSO;
                printf("TSO for non-tunneled packets is disabled\n");
-       else
+       } else {
+               ports[res->port_id].dev_conf.txmode.offloads |=
+                                               DEV_TX_OFFLOAD_TCP_TSO;
                printf("TSO segment size for non-tunneled packets is %d\n",
                        ports[res->port_id].tso_segsz);
+       }
 
        /* display warnings if configuration is not supported by the NIC */
        rte_eth_dev_info_get(res->port_id, &dev_info);
@@ -3849,6 +3901,8 @@ cmd_tso_set_parsed(void *parsed_result,
                printf("Warning: TSO enabled but not "
                        "supported by port %d\n", res->port_id);
        }
+
+       cmd_reconfig_device_queue(RTE_PORT_ALL, 1, 1);
 }
 
 cmdline_parse_token_string_t cmd_tso_set_tso =
@@ -3934,13 +3988,27 @@ cmd_tunnel_tso_set_parsed(void *parsed_result,
 
        if (port_id_is_invalid(res->port_id, ENABLED_WARN))
                return;
+       if (!all_ports_stopped()) {
+               printf("Please stop all ports first\n");
+               return;
+       }
 
        if (!strcmp(res->mode, "set"))
                ports[res->port_id].tunnel_tso_segsz = res->tso_segsz;
 
-       if (ports[res->port_id].tunnel_tso_segsz == 0)
+       if (ports[res->port_id].tunnel_tso_segsz == 0) {
+               ports[res->port_id].dev_conf.txmode.offloads &=
+                       ~(DEV_TX_OFFLOAD_VXLAN_TNL_TSO |
+                         DEV_TX_OFFLOAD_GRE_TNL_TSO |
+                         DEV_TX_OFFLOAD_IPIP_TNL_TSO |
+                         DEV_TX_OFFLOAD_GENEVE_TNL_TSO);
                printf("TSO for tunneled packets is disabled\n");
-       else {
+       } else {
+               ports[res->port_id].dev_conf.txmode.offloads |=
+                       (DEV_TX_OFFLOAD_VXLAN_TNL_TSO |
+                        DEV_TX_OFFLOAD_GRE_TNL_TSO |
+                        DEV_TX_OFFLOAD_IPIP_TNL_TSO |
+                        DEV_TX_OFFLOAD_GENEVE_TNL_TSO);
                printf("TSO segment size for tunneled packets is %d\n",
                        ports[res->port_id].tunnel_tso_segsz);
 
@@ -3966,6 +4034,8 @@ cmd_tunnel_tso_set_parsed(void *parsed_result,
                        printf("Warning: csum set outer-ip must be set to hw "
                                "if outer L3 is IPv4; not necessary for 
IPv6\n");
        }
+
+       cmd_reconfig_device_queue(RTE_PORT_ALL, 1, 1);
 }
 
 cmdline_parse_token_string_t cmd_tunnel_tso_set_tso =
@@ -13004,11 +13074,17 @@ cmd_set_macsec_offload_on_parsed(
        portid_t port_id = res->port_id;
        int en = (strcmp(res->en_on_off, "on") == 0) ? 1 : 0;
        int rp = (strcmp(res->rp_on_off, "on") == 0) ? 1 : 0;
+       struct rte_eth_dev_info dev_info;
 
        if (port_id_is_invalid(port_id, ENABLED_WARN))
                return;
+       if (!all_ports_stopped()) {
+               printf("Please stop all ports first\n");
+               return;
+       }
 
        ports[port_id].tx_ol_flags |= TESTPMD_TX_OFFLOAD_MACSEC;
+       ports[port_id].dev_conf.txmode.offloads |= DEV_TX_OFFLOAD_MACSEC_INSERT;
 #ifdef RTE_LIBRTE_IXGBE_PMD
        ret = rte_pmd_ixgbe_macsec_enable(port_id, en, rp);
 #endif
@@ -13017,6 +13093,13 @@ cmd_set_macsec_offload_on_parsed(
 
        switch (ret) {
        case 0:
+               rte_eth_dev_info_get(port_id, &dev_info);
+               if ((dev_info.tx_offload_capa &
+                    DEV_TX_OFFLOAD_MACSEC_INSERT) == 0) {
+                       printf("Warning: macsec insert enabled but not "
+                               "supported by port %d\n", port_id);
+               }
+               cmd_reconfig_device_queue(RTE_PORT_ALL, 1, 1);
                break;
        case -ENODEV:
                printf("invalid port_id %d\n", port_id);
@@ -13091,14 +13174,21 @@ cmd_set_macsec_offload_off_parsed(
 
        if (port_id_is_invalid(port_id, ENABLED_WARN))
                return;
+       if (!all_ports_stopped()) {
+               printf("Please stop all ports first\n");
+               return;
+       }
 
        ports[port_id].tx_ol_flags &= ~TESTPMD_TX_OFFLOAD_MACSEC;
+       ports[port_id].dev_conf.txmode.offloads &=
+                                       ~DEV_TX_OFFLOAD_MACSEC_INSERT;
 #ifdef RTE_LIBRTE_IXGBE_PMD
        ret = rte_pmd_ixgbe_macsec_disable(port_id);
 #endif
 
        switch (ret) {
        case 0:
+               cmd_reconfig_device_queue(RTE_PORT_ALL, 1, 1);
                break;
        case -ENODEV:
                printf("invalid port_id %d\n", port_id);
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index cd2ac1164..9b6ffeca9 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -540,14 +540,12 @@ port_infos_display(portid_t port_id)
 void
 port_offload_cap_display(portid_t port_id)
 {
-       struct rte_eth_dev *dev;
        struct rte_eth_dev_info dev_info;
        static const char *info_border = "************";
 
        if (port_id_is_invalid(port_id, ENABLED_WARN))
                return;
 
-       dev = &rte_eth_devices[port_id];
        rte_eth_dev_info_get(port_id, &dev_info);
 
        printf("\n%s Port %d supported offload features: %s\n",
@@ -555,7 +553,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_VLAN_STRIP) {
                printf("VLAN stripped:                 ");
-               if (dev->data->dev_conf.rxmode.hw_vlan_strip)
+               if (ports[port_id].dev_conf.rxmode.offloads &
+                   DEV_RX_OFFLOAD_VLAN_STRIP)
                        printf("on\n");
                else
                        printf("off\n");
@@ -563,7 +562,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_QINQ_STRIP) {
                printf("Double VLANs stripped:         ");
-               if (dev->data->dev_conf.rxmode.hw_vlan_extend)
+               if (ports[port_id].dev_conf.rxmode.offloads &
+                   DEV_RX_OFFLOAD_VLAN_EXTEND)
                        printf("on\n");
                else
                        printf("off\n");
@@ -571,7 +571,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_IPV4_CKSUM) {
                printf("RX IPv4 checksum:              ");
-               if (dev->data->dev_conf.rxmode.hw_ip_checksum)
+               if (ports[port_id].dev_conf.rxmode.offloads &
+                   DEV_RX_OFFLOAD_IPV4_CKSUM)
                        printf("on\n");
                else
                        printf("off\n");
@@ -579,7 +580,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_UDP_CKSUM) {
                printf("RX UDP checksum:               ");
-               if (dev->data->dev_conf.rxmode.hw_ip_checksum)
+               if (ports[port_id].dev_conf.rxmode.offloads &
+                   DEV_RX_OFFLOAD_UDP_CKSUM)
                        printf("on\n");
                else
                        printf("off\n");
@@ -587,18 +589,26 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_TCP_CKSUM) {
                printf("RX TCP checksum:               ");
-               if (dev->data->dev_conf.rxmode.hw_ip_checksum)
+               if (ports[port_id].dev_conf.rxmode.offloads &
+                   DEV_RX_OFFLOAD_TCP_CKSUM)
                        printf("on\n");
                else
                        printf("off\n");
        }
 
-       if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM)
-               printf("RX Outer IPv4 checksum:        on");
+       if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM) {
+               printf("RX Outer IPv4 checksum:               ");
+               if (ports[port_id].dev_conf.rxmode.offloads &
+                   DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM)
+                       printf("on\n");
+               else
+                       printf("off\n");
+       }
 
        if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_TCP_LRO) {
                printf("Large receive offload:         ");
-               if (dev->data->dev_conf.rxmode.enable_lro)
+               if (ports[port_id].dev_conf.rxmode.offloads &
+                   DEV_RX_OFFLOAD_TCP_LRO)
                        printf("on\n");
                else
                        printf("off\n");
@@ -606,8 +616,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_VLAN_INSERT) {
                printf("VLAN insert:                   ");
-               if (ports[port_id].tx_ol_flags &
-                   TESTPMD_TX_OFFLOAD_INSERT_VLAN)
+               if (ports[port_id].dev_conf.txmode.offloads &
+                   DEV_TX_OFFLOAD_VLAN_INSERT)
                        printf("on\n");
                else
                        printf("off\n");
@@ -615,7 +625,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_TIMESTAMP) {
                printf("HW timestamp:                  ");
-               if (dev->data->dev_conf.rxmode.hw_timestamp)
+               if (ports[port_id].dev_conf.rxmode.offloads &
+                   DEV_RX_OFFLOAD_TIMESTAMP)
                        printf("on\n");
                else
                        printf("off\n");
@@ -623,8 +634,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_QINQ_INSERT) {
                printf("Double VLANs insert:           ");
-               if (ports[port_id].tx_ol_flags &
-                   TESTPMD_TX_OFFLOAD_INSERT_QINQ)
+               if (ports[port_id].dev_conf.txmode.offloads &
+                   DEV_TX_OFFLOAD_QINQ_INSERT)
                        printf("on\n");
                else
                        printf("off\n");
@@ -632,7 +643,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_IPV4_CKSUM) {
                printf("TX IPv4 checksum:              ");
-               if (ports[port_id].tx_ol_flags & TESTPMD_TX_OFFLOAD_IP_CKSUM)
+               if (ports[port_id].dev_conf.txmode.offloads &
+                   DEV_TX_OFFLOAD_IPV4_CKSUM)
                        printf("on\n");
                else
                        printf("off\n");
@@ -640,7 +652,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_UDP_CKSUM) {
                printf("TX UDP checksum:               ");
-               if (ports[port_id].tx_ol_flags & TESTPMD_TX_OFFLOAD_UDP_CKSUM)
+               if (ports[port_id].dev_conf.txmode.offloads &
+                   DEV_TX_OFFLOAD_UDP_CKSUM)
                        printf("on\n");
                else
                        printf("off\n");
@@ -648,7 +661,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_TCP_CKSUM) {
                printf("TX TCP checksum:               ");
-               if (ports[port_id].tx_ol_flags & TESTPMD_TX_OFFLOAD_TCP_CKSUM)
+               if (ports[port_id].dev_conf.txmode.offloads &
+                   DEV_TX_OFFLOAD_TCP_CKSUM)
                        printf("on\n");
                else
                        printf("off\n");
@@ -656,7 +670,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_SCTP_CKSUM) {
                printf("TX SCTP checksum:              ");
-               if (ports[port_id].tx_ol_flags & TESTPMD_TX_OFFLOAD_SCTP_CKSUM)
+               if (ports[port_id].dev_conf.txmode.offloads &
+                   DEV_TX_OFFLOAD_SCTP_CKSUM)
                        printf("on\n");
                else
                        printf("off\n");
@@ -664,8 +679,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM) {
                printf("TX Outer IPv4 checksum:        ");
-               if (ports[port_id].tx_ol_flags &
-                   TESTPMD_TX_OFFLOAD_OUTER_IP_CKSUM)
+               if (ports[port_id].dev_conf.txmode.offloads &
+                   DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM)
                        printf("on\n");
                else
                        printf("off\n");
@@ -673,7 +688,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_TCP_TSO) {
                printf("TX TCP segmentation:           ");
-               if (ports[port_id].tso_segsz != 0)
+               if (ports[port_id].dev_conf.txmode.offloads &
+                   DEV_TX_OFFLOAD_TCP_TSO)
                        printf("on\n");
                else
                        printf("off\n");
@@ -681,7 +697,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_UDP_TSO) {
                printf("TX UDP segmentation:           ");
-               if (ports[port_id].tso_segsz != 0)
+               if (ports[port_id].dev_conf.txmode.offloads &
+                   DEV_TX_OFFLOAD_UDP_TSO)
                        printf("on\n");
                else
                        printf("off\n");
@@ -689,7 +706,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_VXLAN_TNL_TSO) {
                printf("TSO for VXLAN tunnel packet:   ");
-               if (ports[port_id].tunnel_tso_segsz)
+               if (ports[port_id].dev_conf.txmode.offloads &
+                   DEV_TX_OFFLOAD_VXLAN_TNL_TSO)
                        printf("on\n");
                else
                        printf("off\n");
@@ -697,7 +715,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_GRE_TNL_TSO) {
                printf("TSO for GRE tunnel packet:     ");
-               if (ports[port_id].tunnel_tso_segsz)
+               if (ports[port_id].dev_conf.txmode.offloads &
+                   DEV_TX_OFFLOAD_GRE_TNL_TSO)
                        printf("on\n");
                else
                        printf("off\n");
@@ -705,7 +724,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_IPIP_TNL_TSO) {
                printf("TSO for IPIP tunnel packet:    ");
-               if (ports[port_id].tunnel_tso_segsz)
+               if (ports[port_id].dev_conf.txmode.offloads &
+                   DEV_TX_OFFLOAD_IPIP_TNL_TSO)
                        printf("on\n");
                else
                        printf("off\n");
@@ -713,7 +733,8 @@ port_offload_cap_display(portid_t port_id)
 
        if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_GENEVE_TNL_TSO) {
                printf("TSO for GENEVE tunnel packet:  ");
-               if (ports[port_id].tunnel_tso_segsz)
+               if (ports[port_id].dev_conf.txmode.offloads &
+                   DEV_TX_OFFLOAD_GENEVE_TNL_TSO)
                        printf("on\n");
                else
                        printf("off\n");
@@ -1658,7 +1679,8 @@ rxtx_config_display(void)
        printf("  %s packet forwarding%s - CRC stripping %s - "
               "packets/burst=%d\n", cur_fwd_eng->fwd_mode_name,
               retry_enabled == 0 ? "" : " with retry",
-              rx_mode.hw_strip_crc ? "enabled" : "disabled",
+              (ports[0].dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_CRC_STRIP) ?
+              "enabled" : "disabled",
               nb_pkt_per_burst);
 
        if (cur_fwd_eng == &tx_only_engine || cur_fwd_eng == &flow_gen_engine)
@@ -2758,6 +2780,8 @@ void
 tx_vlan_set(portid_t port_id, uint16_t vlan_id)
 {
        int vlan_offload;
+       struct rte_eth_dev_info dev_info;
+
        if (port_id_is_invalid(port_id, ENABLED_WARN))
                return;
        if (vlan_id_is_invalid(vlan_id))
@@ -2771,13 +2795,21 @@ tx_vlan_set(portid_t port_id, uint16_t vlan_id)
 
        tx_vlan_reset(port_id);
        ports[port_id].tx_ol_flags |= TESTPMD_TX_OFFLOAD_INSERT_VLAN;
+       ports[port_id].dev_conf.txmode.offloads |= DEV_TX_OFFLOAD_VLAN_INSERT;
        ports[port_id].tx_vlan_id = vlan_id;
+       rte_eth_dev_info_get(port_id, &dev_info);
+       if ((dev_info.tx_offload_capa & DEV_TX_OFFLOAD_VLAN_INSERT) == 0) {
+               printf("Warning: vlan insert enabled but not "
+                      "supported by port %d\n", port_id);
+       }
 }
 
 void
 tx_qinq_set(portid_t port_id, uint16_t vlan_id, uint16_t vlan_id_outer)
 {
        int vlan_offload;
+       struct rte_eth_dev_info dev_info;
+
        if (port_id_is_invalid(port_id, ENABLED_WARN))
                return;
        if (vlan_id_is_invalid(vlan_id))
@@ -2793,8 +2825,14 @@ tx_qinq_set(portid_t port_id, uint16_t vlan_id, uint16_t 
vlan_id_outer)
 
        tx_vlan_reset(port_id);
        ports[port_id].tx_ol_flags |= TESTPMD_TX_OFFLOAD_INSERT_QINQ;
+       ports[port_id].dev_conf.txmode.offloads |= DEV_TX_OFFLOAD_QINQ_INSERT;
        ports[port_id].tx_vlan_id = vlan_id;
        ports[port_id].tx_vlan_id_outer = vlan_id_outer;
+       rte_eth_dev_info_get(port_id, &dev_info);
+       if ((dev_info.tx_offload_capa & DEV_TX_OFFLOAD_QINQ_INSERT) == 0) {
+               printf("Warning: qinq insert enabled but not "
+                      "supported by port %d\n", port_id);
+       }
 }
 
 void
@@ -2804,6 +2842,9 @@ tx_vlan_reset(portid_t port_id)
                return;
        ports[port_id].tx_ol_flags &= ~(TESTPMD_TX_OFFLOAD_INSERT_VLAN |
                                TESTPMD_TX_OFFLOAD_INSERT_QINQ);
+       ports[port_id].dev_conf.txmode.offloads &=
+                               ~(DEV_TX_OFFLOAD_VLAN_INSERT |
+                                 DEV_TX_OFFLOAD_QINQ_INSERT);
        ports[port_id].tx_vlan_id = 0;
        ports[port_id].tx_vlan_id_outer = 0;
 }
diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index 84e7a63ef..0ba73cad5 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -566,6 +566,8 @@ launch_args_parse(int argc, char** argv)
        char **argvopt;
        int opt_idx;
        enum { TX, RX };
+       /* Default Rx offloads for all ports. */
+       uint64_t rx_offloads = rx_mode.offloads;
 
        static struct option lgopts[] = {
                { "help",                       0, 0, 0 },
@@ -804,7 +806,8 @@ launch_args_parse(int argc, char** argv)
                                if (n >= ETHER_MIN_LEN) {
                                        rx_mode.max_rx_pkt_len = (uint32_t) n;
                                        if (n > ETHER_MAX_LEN)
-                                           rx_mode.jumbo_frame = 1;
+                                               rx_offloads |=
+                                                       
DEV_RX_OFFLOAD_JUMBO_FRAME;
                                } else
                                        rte_exit(EXIT_FAILURE,
                                                 "Invalid max-pkt-len=%d - 
should be > %d\n",
@@ -897,34 +900,31 @@ launch_args_parse(int argc, char** argv)
                        }
 #endif
                        if (!strcmp(lgopts[opt_idx].name, "disable-crc-strip"))
-                               rx_mode.hw_strip_crc = 0;
+                               rx_offloads &= ~DEV_RX_OFFLOAD_CRC_STRIP;
                        if (!strcmp(lgopts[opt_idx].name, "enable-lro"))
-                               rx_mode.enable_lro = 1;
-                       if (!strcmp(lgopts[opt_idx].name, "enable-scatter"))
-                               rx_mode.enable_scatter = 1;
+                               rx_offloads |= DEV_RX_OFFLOAD_TCP_LRO;
+                       if (!strcmp(lgopts[opt_idx].name, "enable-scatter")) {
+                               rx_offloads |= DEV_RX_OFFLOAD_SCATTER;
+                       }
                        if (!strcmp(lgopts[opt_idx].name, "enable-rx-cksum"))
-                               rx_mode.hw_ip_checksum = 1;
+                               rx_offloads |= DEV_RX_OFFLOAD_CHECKSUM;
                        if (!strcmp(lgopts[opt_idx].name,
                                        "enable-rx-timestamp"))
-                               rx_mode.hw_timestamp = 1;
-
-                       if (!strcmp(lgopts[opt_idx].name, "disable-hw-vlan")) {
-                               rx_mode.hw_vlan_filter = 0;
-                               rx_mode.hw_vlan_strip  = 0;
-                               rx_mode.hw_vlan_extend = 0;
-                       }
+                               rx_offloads |= DEV_RX_OFFLOAD_TIMESTAMP;
+                       if (!strcmp(lgopts[opt_idx].name, "disable-hw-vlan"))
+                               rx_offloads &= ~DEV_RX_OFFLOAD_VLAN;
 
                        if (!strcmp(lgopts[opt_idx].name,
                                        "disable-hw-vlan-filter"))
-                               rx_mode.hw_vlan_filter = 0;
+                               rx_offloads &= ~DEV_RX_OFFLOAD_VLAN_FILTER;
 
                        if (!strcmp(lgopts[opt_idx].name,
                                        "disable-hw-vlan-strip"))
-                               rx_mode.hw_vlan_strip  = 0;
+                               rx_offloads &= ~DEV_RX_OFFLOAD_VLAN_STRIP;
 
                        if (!strcmp(lgopts[opt_idx].name,
                                        "disable-hw-vlan-extend"))
-                               rx_mode.hw_vlan_extend = 0;
+                               rx_offloads &= ~DEV_RX_OFFLOAD_VLAN_EXTEND;
 
                        if (!strcmp(lgopts[opt_idx].name, "enable-drop-en"))
                                rx_drop_en = 1;
@@ -1140,4 +1140,7 @@ launch_args_parse(int argc, char** argv)
                        break;
                }
        }
+
+       /* Set offload configuration from command line parameters. */
+       rx_mode.offloads = rx_offloads;
 }
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index c3ab44849..e3a7c26b8 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -338,15 +338,10 @@ lcoreid_t latencystats_lcore_id = -1;
  */
 struct rte_eth_rxmode rx_mode = {
        .max_rx_pkt_len = ETHER_MAX_LEN, /**< Default maximum frame length. */
-       .split_hdr_size = 0,
-       .header_split   = 0, /**< Header Split disabled. */
-       .hw_ip_checksum = 0, /**< IP checksum offload disabled. */
-       .hw_vlan_filter = 1, /**< VLAN filtering enabled. */
-       .hw_vlan_strip  = 1, /**< VLAN strip enabled. */
-       .hw_vlan_extend = 0, /**< Extended VLAN disabled. */
-       .jumbo_frame    = 0, /**< Jumbo Frame Support disabled. */
-       .hw_strip_crc   = 1, /**< CRC stripping by hardware enabled. */
-       .hw_timestamp   = 0, /**< HW timestamp enabled. */
+       .offloads = (DEV_RX_OFFLOAD_VLAN_FILTER |
+                    DEV_RX_OFFLOAD_VLAN_STRIP |
+                    DEV_RX_OFFLOAD_CRC_STRIP),
+       .ignore_offload_bitfield = 1, /**< Use rte_eth_rxq_conf offloads API */
 };
 
 struct rte_fdir_conf fdir_conf = {
@@ -1495,6 +1490,10 @@ start_port(portid_t pid)
                }
                if (port->need_reconfig_queues > 0) {
                        port->need_reconfig_queues = 0;
+                       /* Use rte_eth_txq_conf offloads API */
+                       port->tx_conf.txq_flags = ETH_TXQ_FLAGS_IGNORE;
+                       /* Apply Tx offloads configuration */
+                       port->tx_conf.offloads = port->dev_conf.txmode.offloads;
                        /* setup tx queues */
                        for (qi = 0; qi < nb_txq; qi++) {
                                if ((numa_support) &&
@@ -1521,6 +1520,8 @@ start_port(portid_t pid)
                                port->need_reconfig_queues = 1;
                                return -1;
                        }
+                       /* Apply Rx offloads configuration */
+                       port->rx_conf.offloads = port->dev_conf.rxmode.offloads;
                        /* setup rx queues */
                        for (qi = 0; qi < nb_rxq; qi++) {
                                if ((numa_support) &&
@@ -1534,7 +1535,6 @@ start_port(portid_t pid)
                                                        rxring_numa[pi]);
                                                return -1;
                                        }
-
                                        diag = rte_eth_rx_queue_setup(pi, qi,
                                             nb_rxd,rxring_numa[pi],
                                             &(port->rx_conf),mp);
@@ -2252,7 +2252,7 @@ init_port_dcb_config(portid_t pid,
        retval = get_eth_dcb_conf(&port_conf, dcb_mode, num_tcs, pfc_en);
        if (retval < 0)
                return retval;
-       port_conf.rxmode.hw_vlan_filter = 1;
+       port_conf.rxmode.offloads |= DEV_RX_OFFLOAD_VLAN_FILTER;
 
        /**
         * Write the configuration into the device.
@@ -2301,7 +2301,7 @@ init_port_dcb_config(portid_t pid,
 
        rxtx_port_config(rte_port);
        /* VLAN filter */
-       rte_port->dev_conf.rxmode.hw_vlan_filter = 1;
+       rte_port->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_VLAN_FILTER;
        for (i = 0; i < RTE_DIM(vlan_tags); i++)
                rx_vft_set(pid, vlan_tags[i], 1);
 
-- 
2.12.0

Reply via email to