]> git.proxmox.com Git - ceph.git/blob - ceph/src/spdk/test/iscsi_tgt/digests/digests.sh
import 15.2.0 Octopus source
[ceph.git] / ceph / src / spdk / test / iscsi_tgt / digests / digests.sh
1 #!/usr/bin/env bash
2
3 testdir=$(readlink -f $(dirname $0))
4 rootdir=$(readlink -f $testdir/../../..)
5 source $rootdir/test/common/autotest_common.sh
6 source $rootdir/test/iscsi_tgt/common.sh
7
8 # $1 = "iso" - triggers isolation mode (setting up required environment).
9 # $2 = test type posix or vpp. defaults to posix.
10 iscsitestinit $1 $2
11
12 function node_login_fio_logout() {
13 for arg in "$@"; do
14 iscsiadm -m node -p $TARGET_IP:$ISCSI_PORT -o update -n node.conn[0].iscsi.$arg
15 done
16 iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT
17 $fio_py -p iscsi -i 512 -d 1 -t write -r 2
18 $fio_py -p iscsi -i 512 -d 1 -t read -r 2
19 iscsiadm -m node --logout -p $TARGET_IP:$ISCSI_PORT
20 sleep 1
21 }
22
23 function iscsi_header_digest_test() {
24 # Enable HeaderDigest to CRC32C
25 timing_enter HeaderDigest_enabled
26 node_login_fio_logout "HeaderDigest -v CRC32C"
27 timing_exit HeaderDigest_enabled
28
29 # Let iscsi target to decide its preference on
30 # HeaderDigest based on its capability.
31 timing_enter preferred
32 node_login_fio_logout "HeaderDigest -v CRC32C,None"
33 timing_exit preferred
34 }
35
36 function iscsi_header_data_digest_test() {
37 # Only enable HeaderDigest to CRC32C
38 timing_enter HeaderDigest_enabled
39 node_login_fio_logout "HeaderDigest -v CRC32C" "DataDigest -v None"
40 timing_exit HeaderDigest_enabled
41
42 # Only enable DataDigest to CRC32C
43 timing_enter DataDigest_enabled
44 node_login_fio_logout "HeaderDigest -v None" "DataDigest -v CRC32C"
45 timing_exit DataDigest_enabled
46
47 # Let iscsi target to decide its preference on both
48 # HeaderDigest and DataDigest based on its capability.
49 timing_enter both_preferred
50 node_login_fio_logout "HeaderDigest -v CRC32C,None" "DataDigest -v CRC32C,None"
51 timing_exit both_preferred
52
53 # Enable HeaderDigest and DataDigest both.
54 timing_enter both_enabled
55 node_login_fio_logout "HeaderDigest -v CRC32C" "DataDigest -v CRC32C"
56 timing_exit both_enabled
57 }
58
59 timing_enter digests
60
61 MALLOC_BDEV_SIZE=64
62 MALLOC_BLOCK_SIZE=512
63
64 rpc_py="$rootdir/scripts/rpc.py"
65 fio_py="$rootdir/scripts/fio.py"
66
67 timing_enter start_iscsi_tgt
68
69 $ISCSI_APP -m $ISCSI_TEST_CORE_MASK --wait-for-rpc &
70 pid=$!
71 echo "Process pid: $pid"
72
73 trap "killprocess $pid; iscsitestfini $1 $2; exit 1" SIGINT SIGTERM EXIT
74
75 waitforlisten $pid
76 $rpc_py set_iscsi_options -o 30 -a 16
77 $rpc_py start_subsystem_init
78 echo "iscsi_tgt is listening. Running tests..."
79
80 timing_exit start_iscsi_tgt
81
82 $rpc_py add_portal_group $PORTAL_TAG $TARGET_IP:$ISCSI_PORT
83 $rpc_py add_initiator_group $INITIATOR_TAG $INITIATOR_NAME $NETMASK
84 $rpc_py construct_malloc_bdev $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE
85 # "Malloc0:0" ==> use Malloc0 blockdev for LUN0
86 # "1:2" ==> map PortalGroup1 to InitiatorGroup2
87 # "64" ==> iSCSI queue depth 64
88 # "-d" ==> disable CHAP authentication
89 $rpc_py construct_target_node Target3 Target3_alias 'Malloc0:0' $PORTAL_TAG:$INITIATOR_TAG 64 -d
90 sleep 1
91
92 iscsiadm -m discovery -t sendtargets -p $TARGET_IP:$ISCSI_PORT
93
94 # iscsiadm installed by some Fedora releases loses DataDigest parameter.
95 # Check and avoid setting DataDigest.
96 DataDigestAbility=$(iscsiadm -m node -p $TARGET_IP:$ISCSI_PORT | grep DataDigest || true)
97 if [ "$DataDigestAbility"x = x ]; then
98 iscsi_header_digest_test
99 else
100 iscsi_header_data_digest_test
101 fi
102
103 trap - SIGINT SIGTERM EXIT
104
105 iscsicleanup
106 killprocess $pid
107 iscsitestfini $1 $2
108 timing_exit digests