#!/bin/bash -eu
# SPDX-License-Identifier: GPL-3.0-or-later

[ -d "$SYSFS_PATH$1"/md ] ||
	exit 0

. guess-functions

level=
readline level "$SYSFS_PATH$1"/md/level

mod_names=("md-$level")

metadata_ver=
readline metadata_ver "$SYSFS_PATH$1"/md/metadata_version

if [ "${metadata_ver:0:9}" = 'external:' ]; then
	guess_variable MDADM_EXTRA_PROGS mdmon

	container_ver="${metadata_ver:9}"
	readline container_ver "${SYSFS_PATH}/class/block${container_ver%/*}/md/metadata_version"
	[ "$container_ver" = 'external:imsm' ] && mod_names+=(efivarfs)
fi

#
# As component devices are added to an md array, they appear in the ``md``
# directory as new directories named::
#
#      dev-XXX
#
# where ``XXX`` is a name that the kernel knows for the device, e.g. hdb1.
#
# https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/admin-guide/md.rst:470
#
for d in "$SYSFS_PATH$1"/md/dev-*; do
	[ ! -e "$d/block" ] ||
		guess_device "${d#$SYSFS_PATH}/block"
done

if [ -n "${RESOLVE_MODALIAS-}" ]; then
	depinfo \
			--set-version="$KERNEL" \
			--no-builtin \
			--no-prefix \
			--no-firmware \
			"${mod_names[@]}" 2>/dev/null |
		sort -u |
	while read -r mod; do
		guess_module "$mod"
	done
else
	for mod in "${mod_names[@]}"; do
		guess_modalias "$mod"
	done
fi

guess_feature mdadm

majmin=
readline majmin "$SYSFS_PATH$1/dev"

[ -z "$majmin" ] ||
	guess_variable GENERATE_UDEV_RULES_FOR_MD_DEVICE "$majmin"
