xref: /dflybsd-src/contrib/cryptsetup/tests/align-test (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
186d7f5d3SJohn Marino#!/bin/bash
286d7f5d3SJohn Marino
386d7f5d3SJohn MarinoCRYPTSETUP="../src/cryptsetup"
486d7f5d3SJohn MarinoDEV=""
586d7f5d3SJohn Marino
686d7f5d3SJohn Marinocleanup() {
786d7f5d3SJohn Marino	udevadm settle 2>/dev/null 2>&1
886d7f5d3SJohn Marino	rmmod scsi_debug 2>/dev/null
986d7f5d3SJohn Marino	sleep 2
1086d7f5d3SJohn Marino}
1186d7f5d3SJohn Marino
1286d7f5d3SJohn Marinofail()
1386d7f5d3SJohn Marino{
1486d7f5d3SJohn Marino	[ -n "$1" ] && echo "$1"
1586d7f5d3SJohn Marino	cleanup
1686d7f5d3SJohn Marino	exit 100
1786d7f5d3SJohn Marino}
1886d7f5d3SJohn Marino
1986d7f5d3SJohn Marinoadd_device() {
2086d7f5d3SJohn Marino	modprobe scsi_debug $@
2186d7f5d3SJohn Marino	if [ $? -ne 0 ] ; then
2286d7f5d3SJohn Marino		echo "This kernel seems to not support proper scsi_debug module, test skipped."
2386d7f5d3SJohn Marino		exit 0
2486d7f5d3SJohn Marino	fi
2586d7f5d3SJohn Marino
2686d7f5d3SJohn Marino	sleep 2
2786d7f5d3SJohn Marino	DEV=$(grep scsi_debug /sys/block/*/device/model | cut -f4 -d /)
2886d7f5d3SJohn Marino
2986d7f5d3SJohn Marino	if [ ! -e /sys/block/$DEV/alignment_offset ] ; then
3086d7f5d3SJohn Marino		echo "This kernel seems to not support topology info, test skipped."
3186d7f5d3SJohn Marino		cleanup
3286d7f5d3SJohn Marino		exit 0
3386d7f5d3SJohn Marino	fi
3486d7f5d3SJohn Marino
3586d7f5d3SJohn Marino	DEV="/dev/$DEV"
3686d7f5d3SJohn Marino	[ -b $DEV ] || fail "Cannot find $DEV."
3786d7f5d3SJohn Marino}
3886d7f5d3SJohn Marino
3986d7f5d3SJohn Marino
4086d7f5d3SJohn Marinoformat() # key_bits expected [forced]
4186d7f5d3SJohn Marino{
4286d7f5d3SJohn Marino	if [ -z "$3" ] ; then
4386d7f5d3SJohn Marino		echo -n "Formatting using topology info ($1 bits key)...."
4486d7f5d3SJohn Marino		echo xxx| $CRYPTSETUP luksFormat $DEV -q -s $1
4586d7f5d3SJohn Marino	else
4686d7f5d3SJohn Marino		echo -n "Formatting using forced offset $3 ($1 bits key)..."
4786d7f5d3SJohn Marino		echo xxx| $CRYPTSETUP luksFormat $DEV -q -s $1 --align-payload=$2
4886d7f5d3SJohn Marino	fi
4986d7f5d3SJohn Marino
5086d7f5d3SJohn Marino	ALIGN=$($CRYPTSETUP luksDump $DEV |grep "Payload offset" | sed -e s/.*\\t//)
5186d7f5d3SJohn Marino	#echo "ALIGN = $ALIGN"
5286d7f5d3SJohn Marino
5386d7f5d3SJohn Marino	if [ $ALIGN -ne $2 ] ; then
5486d7f5d3SJohn Marino		echo "FAIL"
5586d7f5d3SJohn Marino		echo "Expected alignment differs: expected $2 != detected $ALIGN"
5686d7f5d3SJohn Marino		fail
5786d7f5d3SJohn Marino	fi
5886d7f5d3SJohn Marino	echo "PASSED"
5986d7f5d3SJohn Marino}
6086d7f5d3SJohn Marino
6186d7f5d3SJohn Marinoif [ $(id -u) != 0 ]; then
6286d7f5d3SJohn Marino	echo "WARNING: You must be root to run this test, test skipped."
6386d7f5d3SJohn Marino	exit 0
6486d7f5d3SJohn Marinofi
6586d7f5d3SJohn Marino
6686d7f5d3SJohn Marinomodprobe --dry-run scsi_debug || exit 0
6786d7f5d3SJohn Marinocleanup
6886d7f5d3SJohn Marino
6986d7f5d3SJohn Marinoecho "# Create desktop-class 4K drive"
7086d7f5d3SJohn Marinoecho "# (logical_block_size=512, physical_block_size=4096, alignment_offset=0)"
7186d7f5d3SJohn Marinoadd_device dev_size_mb=16 sector_size=512 physblk_exp=3 num_tgts=1
7286d7f5d3SJohn Marinoformat 256 2112
7386d7f5d3SJohn Marinoformat 128 1088
7486d7f5d3SJohn Marinoformat 256 8192 8192
7586d7f5d3SJohn Marinoformat 128 8192 8192
7686d7f5d3SJohn Marinocleanup
7786d7f5d3SJohn Marino
7886d7f5d3SJohn Marinoecho "# Create desktop-class 4K drive w/ 63-sector DOS partition compensation"
7986d7f5d3SJohn Marinoecho "# (logical_block_size=512, physical_block_size=4096, alignment_offset=3584)"
8086d7f5d3SJohn Marinoadd_device dev_size_mb=16 sector_size=512 physblk_exp=3 lowest_aligned=7 num_tgts=1
8186d7f5d3SJohn Marinoformat 256 2119
8286d7f5d3SJohn Marinoformat 128 1095
8386d7f5d3SJohn Marinocleanup
8486d7f5d3SJohn Marino
8586d7f5d3SJohn Marinoecho "# Create enterprise-class 4K drive"
8686d7f5d3SJohn Marinoecho "# (logical_block_size=4096, physical_block_size=4096, alignment_offset=0)"
8786d7f5d3SJohn Marinoadd_device dev_size_mb=16 sector_size=4096 num_tgts=1
8886d7f5d3SJohn Marinoformat 256 2560
8986d7f5d3SJohn Marinoformat 128 1536
9086d7f5d3SJohn Marinocleanup
9186d7f5d3SJohn Marino
9286d7f5d3SJohn Marinoecho "# Create classic 512b drive and stack dm-linear"
9386d7f5d3SJohn Marinoecho "# (logical_block_size=512, physical_block_size=512, alignment_offset=0)"
9486d7f5d3SJohn Marinoadd_device dev_size_mb=16 sector_size=512 num_tgts=1
9586d7f5d3SJohn MarinoDEV2=$DEV
9686d7f5d3SJohn MarinoDEV=/dev/mapper/luks0xbabe
9786d7f5d3SJohn Marinodmsetup create luks0xbabe --table "0 32768 linear $DEV2 0"
9886d7f5d3SJohn Marinoformat 256 2112
9986d7f5d3SJohn Marinoformat 128 1088
10086d7f5d3SJohn Marinoformat 128 8192 8192
10186d7f5d3SJohn Marinodmsetup remove luks0xbabe
10286d7f5d3SJohn Marinocleanup
103