Arm port of ipsec_mb library [1] has different header file name than the Intel ipsec_mb library. Proper header name is picked according to the architecture to get the code compile when ipsec_mb is installed on Arm platform.
And the Arm port currently supports ZUC and SNOW3g. Call to other algorithms will be blocked. [1] https://gitlab.arm.com/arm-reference-solutions/ipsec-mb/-/tree/main Signed-off-by: Ruifeng Wang <ruifeng.w...@arm.com> --- app/test/test_cryptodev_hash_test_vectors.h | 4 ++++ doc/guides/cryptodevs/snow3g.rst | 14 ++++++++++---- doc/guides/cryptodevs/zuc.rst | 14 ++++++++++---- drivers/common/qat/meson.build | 6 +++++- drivers/crypto/ipsec_mb/ipsec_mb_private.c | 6 ++++++ drivers/crypto/ipsec_mb/ipsec_mb_private.h | 4 ++++ drivers/crypto/ipsec_mb/meson.build | 6 +++++- drivers/crypto/qat/qat_sym_session.c | 4 ++++ 8 files changed, 48 insertions(+), 10 deletions(-) diff --git a/app/test/test_cryptodev_hash_test_vectors.h b/app/test/test_cryptodev_hash_test_vectors.h index f7a0981636..5bd7858de4 100644 --- a/app/test/test_cryptodev_hash_test_vectors.h +++ b/app/test/test_cryptodev_hash_test_vectors.h @@ -6,8 +6,12 @@ #define TEST_CRYPTODEV_HASH_TEST_VECTORS_H_ #ifdef RTE_CRYPTO_AESNI_MB +#if defined(RTE_ARCH_ARM) +#include <ipsec-mb.h> +#else #include <intel-ipsec-mb.h> #endif +#endif static const uint8_t plaintext_hash[] = { "What a lousy earth! He wondered how many people " diff --git a/doc/guides/cryptodevs/snow3g.rst b/doc/guides/cryptodevs/snow3g.rst index ad97f7d913..02e857c0d2 100644 --- a/doc/guides/cryptodevs/snow3g.rst +++ b/doc/guides/cryptodevs/snow3g.rst @@ -33,11 +33,17 @@ Installation ------------ To build DPDK with the SNOW3G_PMD the user is required to download the multi-buffer -library from `here <https://github.com/01org/intel-ipsec-mb>`_ -and compile it on their user system before building DPDK. +library and compile it on their user system before building DPDK. + +For x86 system, the multi-buffer library is available +`here <https://github.com/01org/intel-ipsec-mb>`_. The latest version of the library supported by this PMD is v1.2, which can be downloaded from `<https://github.com/01org/intel-ipsec-mb/archive/v1.2.zip>`_. +For Arm system, ARM64 port of the multi-buffer library can be downloaded from +`<https://gitlab.arm.com/arm-reference-solutions/ipsec-mb/-/tree/main/>`_. The +latest version of the library supported by this PMD is tagged as SECLIB-IPSEC-2022.05.25. + After downloading the library, the user needs to unpack and compile it on their system before building DPDK: @@ -46,8 +52,8 @@ on their system before building DPDK: make make install -The library requires NASM to be built. Depending on the library version, it might -require a minimum NASM version (e.g. v0.54 requires at least NASM 2.14). +The library requires NASM to be built on x86. Depending on the library version, +it might require a minimum NASM version (e.g. v0.54 requires at least NASM 2.14). NASM is packaged for different OS. However, on some OS the version is too old, so a manual installation is required. In that case, NASM can be downloaded from diff --git a/doc/guides/cryptodevs/zuc.rst b/doc/guides/cryptodevs/zuc.rst index ea930ae152..10d44b7393 100644 --- a/doc/guides/cryptodevs/zuc.rst +++ b/doc/guides/cryptodevs/zuc.rst @@ -33,11 +33,17 @@ Installation ------------ To build DPDK with the ZUC_PMD the user is required to download the multi-buffer -library from `here <https://github.com/01org/intel-ipsec-mb>`_ -and compile it on their user system before building DPDK. +library and compile it on their user system before building DPDK. + +For x86 system, the multi-buffer library is available +`here <https://github.com/01org/intel-ipsec-mb>`_. The latest version of the library supported by this PMD is v1.2, which can be downloaded from `<https://github.com/01org/intel-ipsec-mb/archive/v1.2.zip>`_. +For Arm system, ARM64 port of the multi-buffer library can be downloaded from +`<https://gitlab.arm.com/arm-reference-solutions/ipsec-mb/-/tree/main/>`_. The +latest version of the library supported by this PMD is tagged as SECLIB-IPSEC-2022.05.25. + After downloading the library, the user needs to unpack and compile it on their system before building DPDK: @@ -46,8 +52,8 @@ on their system before building DPDK: make make install -The library requires NASM to be built. Depending on the library version, it might -require a minimum NASM version (e.g. v0.54 requires at least NASM 2.14). +The library requires NASM to be built on x86. Depending on the library version, +it might require a minimum NASM version (e.g. v0.54 requires at least NASM 2.14). NASM is packaged for different OS. However, on some OS the version is too old, so a manual installation is required. In that case, NASM can be downloaded from diff --git a/drivers/common/qat/meson.build b/drivers/common/qat/meson.build index 245c0fbe61..8e5116acb5 100644 --- a/drivers/common/qat/meson.build +++ b/drivers/common/qat/meson.build @@ -36,11 +36,15 @@ if qat_crypto and not libcrypto.found() endif IMB_required_ver = '1.2.0' +IMB_header = '#include<intel-ipsec-mb.h>' +if arch_subdir == 'arm' + IMB_header = '#include<ipsec-mb.h>' +endif libipsecmb = cc.find_library('IPSec_MB', required: false) if libipsecmb.found() # version comes with quotes, so we split based on " and take the middle imb_ver = cc.get_define('IMB_VERSION_STR', - prefix : '#include<intel-ipsec-mb.h>').split('"')[1] + prefix : IMB_header).split('"')[1] if (imb_ver.version_compare('>=' + IMB_required_ver)) ext_deps += libipsecmb diff --git a/drivers/crypto/ipsec_mb/ipsec_mb_private.c b/drivers/crypto/ipsec_mb/ipsec_mb_private.c index b555a28a0b..1bc9744f09 100644 --- a/drivers/crypto/ipsec_mb/ipsec_mb_private.c +++ b/drivers/crypto/ipsec_mb/ipsec_mb_private.c @@ -53,6 +53,12 @@ ipsec_mb_create(struct rte_vdev_device *vdev, const char *name, *args; int retval; +#if defined(RTE_ARCH_ARM) + if ((pmd_type != IPSEC_MB_PMD_TYPE_SNOW3G) && + (pmd_type != IPSEC_MB_PMD_TYPE_ZUC)) + return -ENOTSUP; +#endif + #if defined(RTE_ARCH_ARM64) vector_mode = IPSEC_MB_ARM64; #elif defined(RTE_ARCH_X86_64) diff --git a/drivers/crypto/ipsec_mb/ipsec_mb_private.h b/drivers/crypto/ipsec_mb/ipsec_mb_private.h index d0a1bcc360..d074b33133 100644 --- a/drivers/crypto/ipsec_mb/ipsec_mb_private.h +++ b/drivers/crypto/ipsec_mb/ipsec_mb_private.h @@ -5,7 +5,11 @@ #ifndef _IPSEC_MB_PRIVATE_H_ #define _IPSEC_MB_PRIVATE_H_ +#if defined(RTE_ARCH_ARM) +#include <ipsec-mb.h> +#else #include <intel-ipsec-mb.h> +#endif #include <cryptodev_pmd.h> #include <rte_bus_vdev.h> diff --git a/drivers/crypto/ipsec_mb/meson.build b/drivers/crypto/ipsec_mb/meson.build index a89b29d6c3..64fc22611d 100644 --- a/drivers/crypto/ipsec_mb/meson.build +++ b/drivers/crypto/ipsec_mb/meson.build @@ -8,6 +8,10 @@ if is_windows endif IMB_required_ver = '1.0.0' +IMB_header = '#include<intel-ipsec-mb.h>' +if arch_subdir == 'arm' + IMB_header = '#include<ipsec-mb.h>' +endif lib = cc.find_library('IPSec_MB', required: false) if not lib.found() build = false @@ -17,7 +21,7 @@ else # version comes with quotes, so we split based on " and take the middle imb_ver = cc.get_define('IMB_VERSION_STR', - prefix : '#include<intel-ipsec-mb.h>').split('"')[1] + prefix : IMB_header).split('"')[1] if (imb_ver == '') or (imb_ver.version_compare('<' + IMB_required_ver)) reason = 'IPSec_MB version >= @0@ is required, found version @1@'.format( diff --git a/drivers/crypto/qat/qat_sym_session.c b/drivers/crypto/qat/qat_sym_session.c index b30396487e..59922cb824 100644 --- a/drivers/crypto/qat/qat_sym_session.c +++ b/drivers/crypto/qat/qat_sym_session.c @@ -10,8 +10,12 @@ #include <openssl/evp.h> /* Needed for bpi runt block processing */ #ifdef RTE_QAT_LIBIPSECMB +#if defined(RTE_ARCH_ARM) +#include <ipsec-mb.h> +#else #include <intel-ipsec-mb.h> #endif +#endif #include <rte_memcpy.h> #include <rte_common.h> -- 2.25.1