blob: 4a6a87f724bb2b474a76b77b86be2b520a52ea1a [file] [log] [blame]
#!/bin/sh
# Write a fixed-size string message on the ivshmem shared memory
# Usage write_shared_memory.sh [-s size in bytes] [-l location] [-m message] [-v]
#
# Copyright (c) 2023 Huawei Technologies France SASU
#
# SPDX-License-Identifier: Apache-2.0
# default parameters
SHM_SIZE=4194304
SHM_LOC="/dev/shm/ivshmem"
SHM_MSG="This is a message test for ivshmem shared memory"
SHM_DD_VERBOSE="status=none"
usage()
{
echo "Usage: $0 [-s size in bytes] [-l location] [-m message] [-v]"
exit 1
}
write_message()
{
WM_SIZE=$1
WM_LOC=$2
WM_MSG=$3
WM_DD=$4
WM_MSG_LEN=${#WM_MSG}
if [ "$WM_MSG_LEN" -gt "$WM_SIZE" ]; then
# make sure we only read and write up to WM_SIZE
printf %s "$WM_MSG" | dd of="$WM_LOC" count=1 bs="$WM_SIZE" "$WM_DD" || exit 1
else
# pad to WM_SIZE
printf %s "$WM_MSG" | dd of="$WM_LOC" ibs="$WM_SIZE" conv=sync "$WM_DD" || exit 1
fi
}
while :
do
# make sure we only read $1 if it is defined (no unset)
PARAMS="${1:-0}"
case "$PARAMS" in
-s)
shift
SHM_SIZE="$1"
;;
-l)
shift
SHM_LOC="$1"
;;
-h)
usage
;;
-m)
shift
SHM_MSG="$1"
;;
-v)
SHM_DD_VERBOSE="status=progress"
;;
-*)
usage
;;
*)
break
;;
esac
shift
done
write_message "$SHM_SIZE" "$SHM_LOC" "$SHM_MSG" "$SHM_DD_VERBOSE"