| #!/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" |