1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4BPFFS=/sys/fs/bpf 5LINK_PIN=$BPFFS/test_cgrp2_sock2 6 7function config_device { 8 ip netns add at_ns0 9 ip link add veth0 type veth peer name veth0b 10 ip link set veth0b up 11 ip link set veth0 netns at_ns0 12 ip netns exec at_ns0 ip addr add 172.16.1.100/24 dev veth0 13 ip netns exec at_ns0 ip addr add 2401:db00::1/64 dev veth0 nodad 14 ip netns exec at_ns0 ip link set dev veth0 up 15 ip addr add 172.16.1.101/24 dev veth0b 16 ip addr add 2401:db00::2/64 dev veth0b nodad 17} 18 19function config_cgroup { 20 rm -rf /tmp/cgroupv2 21 mkdir -p /tmp/cgroupv2 22 mount -t cgroup2 none /tmp/cgroupv2 23 mkdir -p /tmp/cgroupv2/foo 24 echo $$ >> /tmp/cgroupv2/foo/cgroup.procs 25} 26 27function config_bpffs { 28 if mount | grep $BPFFS > /dev/null; then 29 echo "bpffs already mounted" 30 else 31 echo "bpffs not mounted. Mounting..." 32 mount -t bpf none $BPFFS 33 fi 34} 35 36function attach_bpf { 37 ./test_cgrp2_sock2 /tmp/cgroupv2/foo sock_flags_kern.o $1 38 [ $? -ne 0 ] && exit 1 39} 40 41function cleanup { 42 rm -rf $LINK_PIN 43 ip link del veth0b 44 ip netns delete at_ns0 45 umount /tmp/cgroupv2 46 rm -rf /tmp/cgroupv2 47} 48 49cleanup 2>/dev/null 50 51set -e 52config_device 53config_cgroup 54config_bpffs 55set +e 56 57# 58# Test 1 - fail ping6 59# 60attach_bpf 0 61ping -c1 -w1 172.16.1.100 62if [ $? -ne 0 ]; then 63 echo "ping failed when it should succeed" 64 cleanup 65 exit 1 66fi 67 68ping6 -c1 -w1 2401:db00::1 69if [ $? -eq 0 ]; then 70 echo "ping6 succeeded when it should not" 71 cleanup 72 exit 1 73fi 74 75rm -rf $LINK_PIN 76sleep 1 # Wait for link detach 77 78# 79# Test 2 - fail ping 80# 81attach_bpf 1 82ping6 -c1 -w1 2401:db00::1 83if [ $? -ne 0 ]; then 84 echo "ping6 failed when it should succeed" 85 cleanup 86 exit 1 87fi 88 89ping -c1 -w1 172.16.1.100 90if [ $? -eq 0 ]; then 91 echo "ping succeeded when it should not" 92 cleanup 93 exit 1 94fi 95 96cleanup 97echo 98echo "*** PASS ***" 99