#!/bin/bash # # Integration Infiniband test using villas node. # # @author Dennis Potter # @copyright 2014-2022, Institute for Automation of Complex Power Systems, EONERC # @license Apache 2.0 ################################################################################## set -e # Check if tools are present if ! command -v lspci > /dev/null; then echo "lspci tool is missing" exit 99 fi # Check if user is superuser. SU is used for namespace if [[ "${EUID}" -ne 0 ]]; then echo "Please run as root" exit 99 fi # Check if Infiniband card is present if [[ ! $(lspci | grep Infiniband) ]]; then echo "Did not find any Infiniband cards in system" exit 99 fi DIR=$(mktemp -d) pushd ${DIR} function finish { popd rm -rf ${DIR} } trap finish EXIT NUM_SAMPLES=${NUM_SAMPLES:-10} # Set config file with a MODE flag cat > config.json < target.json < input.dat # Declare modes MODES=("RC" "UC" "UD") # Run through modes for MODE in "${MODES[@]}"; do echo "#############################" echo "#############################" echo "## START ${MODE} ##" echo "#############################" echo "#############################" sed -i -e 's/MODE/'${MODE}'/g' config.json # Start receiving node villas node target.json & PID_PROC=$! # Wait for node to complete init sleep 1 # Preprare fifo FIFO=$(mktemp -p ${DIR} -t) if [[ ! -p ${FIFO} ]]; then mkfifo ${FIFO} fi # Start sending pipe ip netns exec namespace0 \ villas pipe -l ${NUM_SAMPLES} config.json ib_node_source >output.dat <${FIFO} & PID_PIPE=$! # Keep pipe alive sleep 5 >${FIFO} & # Wait for pipe to connect to node sleep 3 # Write data to pipe cat input.dat >${FIFO} & # Wait for node to handle samples sleep 2 # Stop node kill ${PID_PIPE} kill ${PID_PROC} villas compare input.dat output.dat sed -i -e 's/'${MODE}'/MODE/g' config.json done