| 807 | } |
| 808 | |
| 809 | static inline void |
| 810 | ipsec_enqueue(ipsec_xform_fn xform_func, struct ipsec_ctx *ipsec_ctx, |
| 811 | struct rte_mbuf *pkts[], void *sas[], |
| 812 | uint16_t nb_pkts) |
| 813 | { |
| 814 | int32_t ret = 0, i; |
| 815 | struct ipsec_mbuf_metadata *priv; |
| 816 | struct rte_crypto_sym_op *sym_cop; |
| 817 | struct ipsec_sa *sa; |
| 818 | struct rte_ipsec_session *ips; |
| 819 | |
| 820 | for (i = 0; i < nb_pkts; i++) { |
| 821 | if (unlikely(sas[i] == NULL)) { |
| 822 | free_pkts(&pkts[i], 1); |
| 823 | continue; |
| 824 | } |
| 825 | |
| 826 | rte_prefetch0(sas[i]); |
| 827 | rte_prefetch0(pkts[i]); |
| 828 | |
| 829 | priv = get_priv(pkts[i]); |
| 830 | sa = ipsec_mask_saptr(sas[i]); |
| 831 | priv->sa = sa; |
| 832 | ips = ipsec_get_primary_session(sa); |
| 833 | |
| 834 | switch (ips->type) { |
| 835 | case RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL: |
| 836 | priv->cop.type = RTE_CRYPTO_OP_TYPE_SYMMETRIC; |
| 837 | priv->cop.status = RTE_CRYPTO_OP_STATUS_NOT_PROCESSED; |
| 838 | |
| 839 | rte_prefetch0(&priv->sym_cop); |
| 840 | |
| 841 | if (unlikely(ips->security.ses == NULL)) { |
| 842 | free_pkts(&pkts[i], 1); |
| 843 | continue; |
| 844 | } |
| 845 | |
| 846 | if (unlikely((pkts[i]->packet_type & |
| 847 | (RTE_PTYPE_TUNNEL_MASK | |
| 848 | RTE_PTYPE_L4_MASK)) == |
| 849 | MBUF_PTYPE_TUNNEL_ESP_IN_UDP && |
| 850 | sa->udp_encap != 1)) { |
| 851 | free_pkts(&pkts[i], 1); |
| 852 | continue; |
| 853 | } |
| 854 | |
| 855 | sym_cop = get_sym_cop(&priv->cop); |
| 856 | sym_cop->m_src = pkts[i]; |
| 857 | |
| 858 | rte_security_attach_session(&priv->cop, |
| 859 | ips->security.ses); |
| 860 | break; |
| 861 | |
| 862 | case RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO: |
| 863 | RTE_LOG(ERR, IPSEC, "CPU crypto is not supported by the" |
| 864 | " legacy mode."); |
| 865 | free_pkts(&pkts[i], 1); |
| 866 | continue; |
no test coverage detected