* Prepare (plus actual crypto/auth) routine for inbound CPU-CRYPTO * (synchronous mode). */
| 752 | * (synchronous mode). |
| 753 | */ |
| 754 | uint16_t |
| 755 | cpu_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 | } |
nothing calls this directly
no test coverage detected