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

Function cpu_inb_pkt_prepare

dpdk/lib/ipsec/esp_inb.c:754–811  ·  view source on GitHub ↗

* Prepare (plus actual crypto/auth) routine for inbound CPU-CRYPTO * (synchronous mode). */

Source from the content-addressed store, hash-verified

752 * (synchronous mode).
753 */
754uint16_t
755cpu_inb_pkt_prepare(const struct rte_ipsec_session *ss,
756 struct rte_mbuf *mb[], uint16_t num)
757{
758 int32_t rc;
759 uint32_t i, k;
760 struct rte_ipsec_sa *sa;
761 struct replay_sqn *rsn;
762 union sym_op_data icv;
763 struct rte_crypto_va_iova_ptr iv[num];
764 struct rte_crypto_va_iova_ptr aad[num];
765 struct rte_crypto_va_iova_ptr dgst[num];
766 uint32_t dr[num];
767 uint32_t l4ofs[num];
768 uint32_t clen[num];
769 uint64_t ivbuf[num][IPSEC_MAX_IV_QWORD];
770
771 sa = ss->sa;
772
773 /* grab rsn lock */
774 rsn = rsn_acquire(sa);
775
776 /* do preparation for all packets */
777 for (i = 0, k = 0; i != num; i++) {
778
779 /* calculate ESP header offset */
780 l4ofs[k] = mb[i]->l2_len + mb[i]->l3_len;
781
782 /* prepare ESP packet for processing */
783 rc = inb_pkt_prepare(sa, rsn, mb[i], l4ofs[k], &icv);
784 if (rc >= 0) {
785 /* get encrypted data offset and length */
786 clen[k] = inb_cpu_crypto_prepare(sa, mb[i],
787 l4ofs + k, rc, ivbuf[k]);
788
789 /* fill iv, digest and aad */
790 iv[k].va = ivbuf[k];
791 aad[k].va = icv.va + sa->icv_len;
792 dgst[k++].va = icv.va;
793 } else {
794 dr[i - k] = i;
795 rte_errno = -rc;
796 }
797 }
798
799 /* release rsn lock */
800 rsn_release(sa, rsn);
801
802 /* copy not prepared mbufs beyond good ones */
803 if (k != num && k != 0)
804 move_bad_mbufs(mb, dr, num, num - k);
805
806 /* convert mbufs to iovecs and do actual crypto/auth processing */
807 if (k != 0)
808 cpu_crypto_bulk(ss, sa->cofs, mb, iv, aad, dgst,
809 l4ofs, clen, k);
810 return k;
811}

Callers

nothing calls this directly

Calls 6

rsn_acquireFunction · 0.85
inb_pkt_prepareFunction · 0.85
inb_cpu_crypto_prepareFunction · 0.85
rsn_releaseFunction · 0.85
move_bad_mbufsFunction · 0.85
cpu_crypto_bulkFunction · 0.85

Tested by

no test coverage detected