MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ipsec_enqueue

Function ipsec_enqueue

dpdk/examples/ipsec-secgw/ipsec.c:809–925  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

807}
808
809static inline void
810ipsec_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;

Callers 2

ipsec_inboundFunction · 0.85
ipsec_outboundFunction · 0.85

Calls 10

get_privFunction · 0.85
ipsec_mask_saptrFunction · 0.85
get_sym_copFunction · 0.85
enqueue_copFunction · 0.85
free_pktsFunction · 0.70
rte_prefetch0Function · 0.50

Tested by

no test coverage detected