On 10/24/22 16:12, Junfeng Guo wrote:
Add Tx offloading support:
  - support TSO

Signed-off-by: Beilei Xing <beilei.x...@intel.com>
Signed-off-by: Xiaoyun Li <xiaoyun...@intel.com>
Signed-off-by: Junfeng Guo <junfeng....@intel.com>

[snip]

diff --git a/drivers/net/idpf/idpf_rxtx.c b/drivers/net/idpf/idpf_rxtx.c
index 143c8b69f3..8f82cf1b59 100644
--- a/drivers/net/idpf/idpf_rxtx.c
+++ b/drivers/net/idpf/idpf_rxtx.c

[snip]

@@ -1968,16 +2070,44 @@ idpf_prep_pkts(__rte_unused void *tx_queue, struct 
rte_mbuf **tx_pkts,
               uint16_t nb_pkts)
  {
        int i, ret;
+       uint64_t ol_flags;
        struct rte_mbuf *m;
for (i = 0; i < nb_pkts; i++) {
                m = tx_pkts[i];
+               ol_flags = m->ol_flags;
+
+               /* Check condition for nb_segs > IDPF_TX_MAX_MTU_SEG. */
+               if ((ol_flags & RTE_MBUF_F_TX_TCP_SEG) == 0) {
+                       if (m->nb_segs > IDPF_TX_MAX_MTU_SEG) {
+                               rte_errno = EINVAL;
+                               return i;
+                       }

It is non-TSO branch and it should be here before the patch.

+               } else if ((m->tso_segsz < IDPF_MIN_TSO_MSS) ||
+                          (m->tso_segsz > IDPF_MAX_TSO_MSS) ||
+                          (m->pkt_len > IDPF_MAX_TSO_FRAME_SIZE)) {
+                       /* MSS outside the range are considered malicious */
+                       rte_errno = EINVAL;
+                       return i;
+               }
+
+               if ((ol_flags & IDPF_TX_OFFLOAD_NOTSUP_MASK) != 0) {
+                       rte_errno = ENOTSUP;
+                       return i;
+               }
if (m->pkt_len < IDPF_MIN_FRAME_SIZE) {
                        rte_errno = EINVAL;
                        return i;
                }
+#ifdef RTE_LIBRTE_ETHDEV_DEBUG
+               ret = rte_validate_tx_offload(m);
+               if (ret != 0) {
+                       rte_errno = -ret;
+                       return i;
+               }
+#endif
                ret = rte_net_intel_cksum_prepare(m);
                if (ret != 0) {
                        rte_errno = -ret;

[snip]

Reply via email to