#!/bin/bash # # Integration Infiniband test using villas node. # # @author Dennis Potter # @copyright 2014-2021, Institute for Automation of Complex Power Systems, EONERC # @license GNU General Public License (version 3) # # VILLASnode # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ################################################################################## 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