Spdk/test/iscsi_tgt/common.sh
paul luse eb53c23236 add (c) and SPDX header to bash files as needed
per Intel policy to include file commit date using git cmd
below.  The policy does not apply to non-Intel (C) notices.

git log --follow -C90% --format=%ad --date default <file> | tail -1

and then pull just the year from the result.

Intel copyrights were not added to files where Intel either had
no contribution ot the contribution lacked substance (ie license
header updates, formatting changes, etc)

For intel copyrights added, --follow and -C95% were used.

Signed-off-by: paul luse <paul.e.luse@intel.com>
Change-Id: I2ef86976095b88a9bf5b1003e59f3943cd6bbe4c
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15209
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2022-11-29 08:27:51 +00:00

162 lines
4.6 KiB
Bash

# SPDX-License-Identifier: BSD-3-Clause
# Copyright (C) 2017 Intel Corporation
# All rights reserved.
#
# Network configuration
# There is one initiator interface and it is accessed directly.
# There are two target interfaces and they are accessed through an namespace.
ISCSI_BRIDGE="iscsi_br"
INITIATOR_INTERFACE="spdk_init_int"
INITIATOR_BRIDGE="init_br"
TARGET_NAMESPACE="spdk_iscsi_ns"
TARGET_NS_CMD=(ip netns exec "$TARGET_NAMESPACE")
TARGET_INTERFACE="spdk_tgt_int"
TARGET_INTERFACE2="spdk_tgt_int2"
TARGET_BRIDGE="tgt_br"
TARGET_BRIDGE2="tgt_br2"
# iSCSI target configuration
TARGET_IP=10.0.0.1
TARGET_IP2=10.0.0.3
INITIATOR_IP=10.0.0.2
ISCSI_PORT=3260
NETMASK=$INITIATOR_IP/32
INITIATOR_TAG=2
INITIATOR_NAME=ANY
PORTAL_TAG=1
ISCSI_APP=("${TARGET_NS_CMD[@]}" "${ISCSI_APP[@]}")
ISCSI_TEST_CORE_MASK=0xFF
function create_veth_interfaces() {
ip link set $INITIATOR_BRIDGE nomaster || true
ip link set $TARGET_BRIDGE nomaster || true
ip link set $TARGET_BRIDGE2 nomaster || true
ip link set $INITIATOR_BRIDGE down || true
ip link set $TARGET_BRIDGE down || true
ip link set $TARGET_BRIDGE2 down || true
ip link delete $ISCSI_BRIDGE type bridge || true
ip link delete $INITIATOR_INTERFACE || true
"${TARGET_NS_CMD[@]}" ip link delete $TARGET_INTERFACE || true
"${TARGET_NS_CMD[@]}" ip link delete $TARGET_INTERFACE2 || true
ip netns del $TARGET_NAMESPACE || true
trap 'cleanup_veth_interfaces; exit 1' SIGINT SIGTERM EXIT
# Create network namespace
ip netns add $TARGET_NAMESPACE
# Create veth (Virtual ethernet) interface pairs
ip link add $INITIATOR_INTERFACE type veth peer name $INITIATOR_BRIDGE
ip link add $TARGET_INTERFACE type veth peer name $TARGET_BRIDGE
ip link add $TARGET_INTERFACE2 type veth peer name $TARGET_BRIDGE2
# Associate veth interface pairs with network namespace
ip link set $TARGET_INTERFACE netns $TARGET_NAMESPACE
ip link set $TARGET_INTERFACE2 netns $TARGET_NAMESPACE
# Allocate IP addresses
ip addr add $INITIATOR_IP/24 dev $INITIATOR_INTERFACE
"${TARGET_NS_CMD[@]}" ip addr add $TARGET_IP/24 dev $TARGET_INTERFACE
"${TARGET_NS_CMD[@]}" ip addr add $TARGET_IP2/24 dev $TARGET_INTERFACE2
# Link up veth interfaces
ip link set $INITIATOR_INTERFACE up
ip link set $INITIATOR_BRIDGE up
ip link set $TARGET_BRIDGE up
ip link set $TARGET_BRIDGE2 up
"${TARGET_NS_CMD[@]}" ip link set $TARGET_INTERFACE up
"${TARGET_NS_CMD[@]}" ip link set $TARGET_INTERFACE2 up
"${TARGET_NS_CMD[@]}" ip link set lo up
# Create a bridge
ip link add $ISCSI_BRIDGE type bridge
ip link set $ISCSI_BRIDGE up
# Add veth interfaces to the bridge
ip link set $INITIATOR_BRIDGE master $ISCSI_BRIDGE
ip link set $TARGET_BRIDGE master $ISCSI_BRIDGE
ip link set $TARGET_BRIDGE2 master $ISCSI_BRIDGE
# Accept connections from veth interface
iptables -I INPUT 1 -i $INITIATOR_INTERFACE -p tcp --dport $ISCSI_PORT -j ACCEPT
iptables -A FORWARD -i $ISCSI_BRIDGE -o $ISCSI_BRIDGE -j ACCEPT
# Verify connectivity
ping -c 1 $TARGET_IP
ping -c 1 $TARGET_IP2
"${TARGET_NS_CMD[@]}" ping -c 1 $INITIATOR_IP
"${TARGET_NS_CMD[@]}" ping -c 1 $INITIATOR_IP
}
function cleanup_veth_interfaces() {
# Cleanup bridge, veth interfaces, and network namespace
# Note: removing one veth, removes the pair
ip link set $INITIATOR_BRIDGE nomaster
ip link set $TARGET_BRIDGE nomaster
ip link set $TARGET_BRIDGE2 nomaster
ip link set $INITIATOR_BRIDGE down
ip link set $TARGET_BRIDGE down
ip link set $TARGET_BRIDGE2 down
ip link delete $ISCSI_BRIDGE type bridge
ip link delete $INITIATOR_INTERFACE
"${TARGET_NS_CMD[@]}" ip link delete $TARGET_INTERFACE
"${TARGET_NS_CMD[@]}" ip link delete $TARGET_INTERFACE2
ip netns del $TARGET_NAMESPACE
}
function iscsitestinit() {
if [ "$TEST_MODE" == "iso" ]; then
$rootdir/scripts/setup.sh
create_veth_interfaces
fi
}
function waitforiscsidevices() {
local num=$1
for ((i = 1; i <= 20; i++)); do
n=$(iscsiadm -m session -P 3 | grep -c "Attached scsi disk sd[a-z]*" || true)
if [ $n -ne $num ]; then
sleep 0.1
else
return 0
fi
done
return 1
}
function iscsitestfini() {
if [ "$TEST_MODE" == "iso" ]; then
cleanup_veth_interfaces
$rootdir/scripts/setup.sh reset
fi
}
function initiator_json_config() {
# Prepare config file for iSCSI initiator
jq . <<- JSON
{
"subsystems": [
{
"subsystem": "bdev",
"config": [
{
"method": "bdev_iscsi_create",
"params": {
"name": "iSCSI0",
"url": "iscsi://$TARGET_IP/iqn.2016-06.io.spdk:disk1/0",
"initiator_iqn": "iqn.2016-06.io.spdk:disk1/0"
}
},
{
"method": "bdev_wait_for_examine"
}
]
}
]
}
JSON
}