From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 35EC7532D for ; Sat, 3 Oct 2015 00:54:13 +0200 (CEST) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP; 02 Oct 2015 15:54:12 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,625,1437462000"; d="scan'208";a="783185968" Received: from unknown (HELO dwdohert-dpdk-fedora-20.ir.intel.com) ([163.33.213.96]) by orsmga001.jf.intel.com with ESMTP; 02 Oct 2015 15:54:11 -0700 From: Declan Doherty To: dev@dpdk.org Date: Sat, 3 Oct 2015 00:01:01 +0100 Message-Id: <1443826867-21004-1-git-send-email-declan.doherty@intel.com> X-Mailer: git-send-email 2.4.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH 0/6] Crypto API and device framework X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Oct 2015 22:54:13 -0000 Co-authored-by: Des O Dea Co-authored-by: John Griffin Co-authored-by: Fiona Trahe This series of patches defines a set of application burst oriented APIs for asynchronous symmetric cryptographic functions within DPDK. It also contains a poll mode driver cryptographic device framework for the implementation of crypto devices within DPDK. In the patch set we also have included 2 reference implementations of crypto PMDs. Currently both implementations support AES128-CBC with HMAC_SHA1/SHA256/SHA512 authentication operations. The first device is a purely software PMD based on Intel's multi-buffer library, which utilises both AES-NI instructions and vector operations to accelerate crypto operations and the second PMD utilises Intel's Quick Assist Technology (on DH895xxC) to provide hardware accelerated crypto operations. The API set supports two functional modes of operation: 1, A session oriented mode. In this mode the user creates a crypto session which defines all the immutable data required to perform a particular crypto operation in advance, including cipher/hash algorithms and operations to be performed as well as the keys to used etc. The session is then referenced by the crypto operation data structure which is a data structure specific to each mbuf. It is contains all mutable data about the cryto operation to be performed, such as data offsets and lengths into the mbuf's data payload for cipher and hash operations to be performed. 2, A session-less mode. In this mode the user is able to provision crypto operations on an mbuf without the need to have a cached session created in advance, but at the cost of entailing the overhead of calculating authentication pre-computes and preforming key expansions in-line with the crypto operation. The crypto xform chain is directly attached to the op struct in this mode, so the op struct now contains all of the immutable crypto operation parameters that would be normally set within a session. Once all mutable and immutable parameters are set the crypto operation data structure can be attached to the specified mbuf and enqueued on a specified crypto device for processing. The patch set contains the following features: - Crypto device APIs and device framework - Implementation of a software crypto PMD based on multi-buffer library - Implementation of a hardware crypto PMD baed on Intel QAT(DH895xxC) - Unit and performance test's which give and example of utilising the crypto API's. - Sample application which performs crypto operations on the IP payload of the packets being forwarded Current Status: There is no support for chained mbuf's and as mentioned above the PMD's have currently implemented support for AES128-CBC/AES256-CBC/AES512-CBC and HMAC_SHA1/SHA256/SHA512. Declan Doherty (5): cryptodev: Initial DPDK Crypto APIs and device framework release aesni_mb_pmd: Initial implementation of multi buffer based crypto device docs: add getting started guides for multi-buffer pmd and qat pmd app/test: add cryptodev unit and performance tests l2fwd-crypto: crypto John Griffin (1): qat_crypto_pmd: Addition of a new QAT DPDK PMD. app/test/Makefile | 3 + app/test/test.c | 92 +- app/test/test.h | 34 +- app/test/test_cryptodev.c | 1993 ++++++++++++++++++++ app/test/test_cryptodev.h | 68 + app/test/test_cryptodev_perf.c | 1415 ++++++++++++++ app/test/test_link_bonding.c | 6 +- app/test/test_link_bonding_mode4.c | 7 +- config/common_bsdapp | 23 +- config/common_linuxapp | 30 +- doc/api/doxy-api-index.md | 1 + doc/api/doxy-api.conf | 1 + doc/guides/cryptodevs/aesni_mb.rst | 76 + doc/guides/cryptodevs/index.rst | 43 + doc/guides/cryptodevs/qat.rst | 155 ++ doc/guides/index.rst | 1 + drivers/Makefile | 1 + drivers/crypto/Makefile | 38 + drivers/crypto/aesni_mb/Makefile | 67 + drivers/crypto/aesni_mb/aesni_mb_ops.h | 206 ++ drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c | 632 +++++++ drivers/crypto/aesni_mb/rte_aesni_mb_pmd_ops.c | 295 +++ drivers/crypto/aesni_mb/rte_aesni_mb_pmd_private.h | 210 +++ drivers/crypto/aesni_mb/rte_pmd_aesni_version.map | 5 + drivers/crypto/qat/Makefile | 63 + .../qat/qat_adf/adf_transport_access_macros.h | 173 ++ drivers/crypto/qat/qat_adf/icp_qat_fw.h | 316 ++++ drivers/crypto/qat/qat_adf/icp_qat_fw_la.h | 404 ++++ drivers/crypto/qat/qat_adf/icp_qat_hw.h | 306 +++ drivers/crypto/qat/qat_adf/qat_algs.h | 125 ++ drivers/crypto/qat/qat_adf/qat_algs_build_desc.c | 576 ++++++ drivers/crypto/qat/qat_crypto.c | 505 +++++ drivers/crypto/qat/qat_crypto.h | 111 ++ drivers/crypto/qat/qat_logs.h | 78 + drivers/crypto/qat/qat_qp.c | 372 ++++ drivers/crypto/qat/rte_pmd_qat_version.map | 5 + drivers/crypto/qat/rte_qat_cryptodev.c | 130 ++ examples/l2fwd-crypto/Makefile | 50 + examples/l2fwd-crypto/main.c | 1475 +++++++++++++++ lib/Makefile | 1 + lib/librte_cryptodev/Makefile | 60 + lib/librte_cryptodev/rte_crypto.h | 720 +++++++ lib/librte_cryptodev/rte_crypto_version.map | 40 + lib/librte_cryptodev/rte_cryptodev.c | 1126 +++++++++++ lib/librte_cryptodev/rte_cryptodev.h | 592 ++++++ lib/librte_cryptodev/rte_cryptodev_pmd.h | 577 ++++++ lib/librte_eal/common/include/rte_common.h | 15 + lib/librte_eal/common/include/rte_eal.h | 14 + lib/librte_eal/common/include/rte_log.h | 1 + lib/librte_eal/common/include/rte_memory.h | 14 +- lib/librte_ether/rte_ethdev.c | 30 - lib/librte_mbuf/rte_mbuf.c | 1 + lib/librte_mbuf/rte_mbuf.h | 53 +- mk/rte.app.mk | 8 + 54 files changed, 13263 insertions(+), 80 deletions(-) create mode 100644 app/test/test_cryptodev.c create mode 100644 app/test/test_cryptodev.h create mode 100644 app/test/test_cryptodev_perf.c create mode 100644 doc/guides/cryptodevs/aesni_mb.rst create mode 100644 doc/guides/cryptodevs/index.rst create mode 100644 doc/guides/cryptodevs/qat.rst create mode 100644 drivers/crypto/Makefile create mode 100644 drivers/crypto/aesni_mb/Makefile create mode 100644 drivers/crypto/aesni_mb/aesni_mb_ops.h create mode 100644 drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c create mode 100644 drivers/crypto/aesni_mb/rte_aesni_mb_pmd_ops.c create mode 100644 drivers/crypto/aesni_mb/rte_aesni_mb_pmd_private.h create mode 100644 drivers/crypto/aesni_mb/rte_pmd_aesni_version.map create mode 100644 drivers/crypto/qat/Makefile create mode 100644 drivers/crypto/qat/qat_adf/adf_transport_access_macros.h create mode 100644 drivers/crypto/qat/qat_adf/icp_qat_fw.h create mode 100644 drivers/crypto/qat/qat_adf/icp_qat_fw_la.h create mode 100644 drivers/crypto/qat/qat_adf/icp_qat_hw.h create mode 100644 drivers/crypto/qat/qat_adf/qat_algs.h create mode 100644 drivers/crypto/qat/qat_adf/qat_algs_build_desc.c create mode 100644 drivers/crypto/qat/qat_crypto.c create mode 100644 drivers/crypto/qat/qat_crypto.h create mode 100644 drivers/crypto/qat/qat_logs.h create mode 100644 drivers/crypto/qat/qat_qp.c create mode 100644 drivers/crypto/qat/rte_pmd_qat_version.map create mode 100644 drivers/crypto/qat/rte_qat_cryptodev.c create mode 100644 examples/l2fwd-crypto/Makefile create mode 100644 examples/l2fwd-crypto/main.c create mode 100644 lib/librte_cryptodev/Makefile create mode 100644 lib/librte_cryptodev/rte_crypto.h create mode 100644 lib/librte_cryptodev/rte_crypto_version.map create mode 100644 lib/librte_cryptodev/rte_cryptodev.c create mode 100644 lib/librte_cryptodev/rte_cryptodev.h create mode 100644 lib/librte_cryptodev/rte_cryptodev_pmd.h -- 2.4.3