| #!/bin/sh |
| # SPDX-License-Identifier: GPL-2.0 |
| |
| # Kselftest framework requirement - SKIP code is 4. |
| ksft_skip=4 |
| |
| BPF_FILE_USED="metadata_used.bpf.o" |
| BPF_FILE_UNUSED="metadata_unused.bpf.o" |
| |
| TESTNAME=bpftool_metadata |
| BPF_FS=$(awk '$3 == "bpf" {print $2; exit}' /proc/mounts) |
| BPF_DIR=$BPF_FS/test_$TESTNAME |
| |
| _cleanup() |
| { |
| set +e |
| rm -rf $BPF_DIR 2> /dev/null |
| } |
| |
| cleanup_skip() |
| { |
| echo "selftests: $TESTNAME [SKIP]" |
| _cleanup |
| |
| exit $ksft_skip |
| } |
| |
| cleanup() |
| { |
| if [ "$?" = 0 ]; then |
| echo "selftests: $TESTNAME [PASS]" |
| else |
| echo "selftests: $TESTNAME [FAILED]" |
| fi |
| _cleanup |
| } |
| |
| if [ $(id -u) -ne 0 ]; then |
| echo "selftests: $TESTNAME [SKIP] Need root privileges" |
| exit $ksft_skip |
| fi |
| |
| if [ -z "$BPF_FS" ]; then |
| echo "selftests: $TESTNAME [SKIP] Could not run test without bpffs mounted" |
| exit $ksft_skip |
| fi |
| |
| if ! bpftool version > /dev/null 2>&1; then |
| echo "selftests: $TESTNAME [SKIP] Could not run test without bpftool" |
| exit $ksft_skip |
| fi |
| |
| set -e |
| |
| trap cleanup_skip EXIT |
| |
| mkdir $BPF_DIR |
| |
| trap cleanup EXIT |
| |
| bpftool prog load $BPF_FILE_UNUSED $BPF_DIR/unused |
| |
| METADATA_PLAIN="$(bpftool prog)" |
| echo "$METADATA_PLAIN" | grep 'a = "foo"' > /dev/null |
| echo "$METADATA_PLAIN" | grep 'b = 1' > /dev/null |
| |
| bpftool prog --json | grep '"metadata":{"a":"foo","b":1}' > /dev/null |
| |
| bpftool map | grep 'metadata.rodata' > /dev/null |
| |
| rm $BPF_DIR/unused |
| |
| bpftool prog load $BPF_FILE_USED $BPF_DIR/used |
| |
| METADATA_PLAIN="$(bpftool prog)" |
| echo "$METADATA_PLAIN" | grep 'a = "bar"' > /dev/null |
| echo "$METADATA_PLAIN" | grep 'b = 2' > /dev/null |
| |
| bpftool prog --json | grep '"metadata":{"a":"bar","b":2}' > /dev/null |
| |
| bpftool map | grep 'metadata.rodata' > /dev/null |
| |
| rm $BPF_DIR/used |
| |
| exit 0 |