examples/ipsec-secgw: move global array from header
[dpdk.git] / examples / ipsec-secgw / ipsec_process.c
index 6d3a3c9..9d888d4 100644 (file)
 #include <rte_mbuf.h>
 
 #include "ipsec.h"
+#include "ipsec-secgw.h"
 
 #define SATP_OUT_IPV4(t)       \
        ((((t) & RTE_IPSEC_SATP_MODE_MASK) == RTE_IPSEC_SATP_MODE_TRANS && \
        (((t) & RTE_IPSEC_SATP_IPV_MASK) == RTE_IPSEC_SATP_IPV4)) || \
        ((t) & RTE_IPSEC_SATP_MODE_MASK) == RTE_IPSEC_SATP_MODE_TUNLV4)
 
-/* helper routine to free bulk of packets */
-static inline void
-free_pkts(struct rte_mbuf *mb[], uint32_t n)
-{
-       uint32_t i;
-
-       for (i = 0; i != n; i++)
-               rte_pktmbuf_free(mb[i]);
-}
-
 /* helper routine to free bulk of crypto-ops and related packets */
 static inline void
 free_cops(struct rte_crypto_op *cop[], uint32_t n)
@@ -231,6 +222,29 @@ prep_process_group(void *sa, struct rte_mbuf *mb[], uint32_t cnt)
        for (j = 0; j != cnt; j++) {
                priv = get_priv(mb[j]);
                priv->sa = sa;
+               /* setup TSO related fields if TSO enabled*/
+               if (priv->sa->mss) {
+                       uint32_t ptype = mb[j]->packet_type;
+                       /* only TCP is supported */
+                       if ((ptype & RTE_PTYPE_L4_MASK) == RTE_PTYPE_L4_TCP) {
+                               mb[j]->tso_segsz = priv->sa->mss;
+                               if ((IS_TUNNEL(priv->sa->flags))) {
+                                       mb[j]->outer_l3_len = mb[j]->l3_len;
+                                       mb[j]->outer_l2_len = mb[j]->l2_len;
+                                       mb[j]->ol_flags |=
+                                       (RTE_MBUF_F_TX_OUTER_IP_CKSUM |
+                                               RTE_MBUF_F_TX_TUNNEL_ESP);
+                               }
+                               mb[j]->ol_flags |= (RTE_MBUF_F_TX_TCP_SEG |
+                                               RTE_MBUF_F_TX_TCP_CKSUM);
+                               if (RTE_ETH_IS_IPV4_HDR(ptype))
+                                       mb[j]->ol_flags |=
+                                               RTE_MBUF_F_TX_OUTER_IPV4;
+                               else
+                                       mb[j]->ol_flags |=
+                                               RTE_MBUF_F_TX_OUTER_IPV6;
+                       }
+               }
        }
 }