diff --git a/common/rc b/common/rc index bfe3c514..8654a3dc 100644 --- a/common/rc +++ b/common/rc @@ -68,6 +68,30 @@ _have_driver() return 0 } +# Check that the specified crypto algorithm is present, regardless of +# whether it's build-in, a module, or provided by the kernel. +# The module will be loaded if it is loadable, and unloaded at test case end. +_have_crypto() +{ + local modname="${1//-/_}" + + if [ -d "/sys/module/${modname}" ]; then + return 0 + fi + + if ! modprobe -q "${modname}"; then + if ! grep -q "${modname}" /proc/crypto; then + SKIP_REASONS+=("driver ${modname} is not available") + return 1 + fi + return 0 + fi + + MODULES_TO_UNLOAD+=("${modname}") + + return 0 +} + # Check that the specified module is available as a loadable module and not # built-in the kernel. _have_module() { diff --git a/tests/nvme/043 b/tests/nvme/043 index 7f9e67ef..b78a1b22 100755 --- a/tests/nvme/043 +++ b/tests/nvme/043 @@ -17,7 +17,7 @@ requires() { _require_kernel_nvme_fabrics_feature dhchap_ctrl_secret _require_nvme_trtype_is_fabrics _require_nvme_cli_auth - _have_driver dh_generic + _have_crypto dh_generic } set_conditions() { diff --git a/tests/nvme/044 b/tests/nvme/044 index 7c08328a..0d54d48e 100755 --- a/tests/nvme/044 +++ b/tests/nvme/044 @@ -17,7 +17,7 @@ requires() { _require_kernel_nvme_fabrics_feature dhchap_ctrl_secret _require_nvme_trtype_is_fabrics _require_nvme_cli_auth - _have_driver dh_generic + _have_crypto dh_generic } set_conditions() { diff --git a/tests/nvme/045 b/tests/nvme/045 index 4dd0f94b..ffdd4788 100755 --- a/tests/nvme/045 +++ b/tests/nvme/045 @@ -18,7 +18,7 @@ requires() { _require_kernel_nvme_fabrics_feature dhchap_ctrl_secret _require_nvme_trtype_is_fabrics _require_nvme_cli_auth - _have_driver dh_generic + _have_crypto dh_generic } set_conditions() {