1554ae6e7SDavid Ahern#!/bin/bash 2b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0 3554ae6e7SDavid Ahern 4d89af13cSDaniel T. LeeBPFFS=/sys/fs/bpf 5f20f064eSDaniel T. LeeMY_DIR=$(dirname $0) 6f20f064eSDaniel T. LeeTEST=$MY_DIR/test_cgrp2_sock2 7d89af13cSDaniel T. LeeLINK_PIN=$BPFFS/test_cgrp2_sock2 8*e04946f5SDaniel T. LeeBPF_PROG=$MY_DIR/sock_flags.bpf.o 9d89af13cSDaniel T. Lee 10554ae6e7SDavid Ahernfunction config_device { 11554ae6e7SDavid Ahern ip netns add at_ns0 12554ae6e7SDavid Ahern ip link add veth0 type veth peer name veth0b 13554ae6e7SDavid Ahern ip link set veth0 netns at_ns0 14d982a2e3SDaniel T. Lee ip netns exec at_ns0 sysctl -q net.ipv6.conf.veth0.disable_ipv6=0 15554ae6e7SDavid Ahern ip netns exec at_ns0 ip addr add 172.16.1.100/24 dev veth0 16554ae6e7SDavid Ahern ip netns exec at_ns0 ip addr add 2401:db00::1/64 dev veth0 nodad 17554ae6e7SDavid Ahern ip netns exec at_ns0 ip link set dev veth0 up 18d982a2e3SDaniel T. Lee sysctl -q net.ipv6.conf.veth0b.disable_ipv6=0 19554ae6e7SDavid Ahern ip addr add 172.16.1.101/24 dev veth0b 20554ae6e7SDavid Ahern ip addr add 2401:db00::2/64 dev veth0b nodad 21d982a2e3SDaniel T. Lee ip link set veth0b up 22554ae6e7SDavid Ahern} 23554ae6e7SDavid Ahern 24554ae6e7SDavid Ahernfunction config_cgroup { 25554ae6e7SDavid Ahern rm -rf /tmp/cgroupv2 26554ae6e7SDavid Ahern mkdir -p /tmp/cgroupv2 27554ae6e7SDavid Ahern mount -t cgroup2 none /tmp/cgroupv2 28554ae6e7SDavid Ahern mkdir -p /tmp/cgroupv2/foo 29554ae6e7SDavid Ahern echo $$ >> /tmp/cgroupv2/foo/cgroup.procs 30554ae6e7SDavid Ahern} 31554ae6e7SDavid Ahern 32d89af13cSDaniel T. Leefunction config_bpffs { 33d89af13cSDaniel T. Lee if mount | grep $BPFFS > /dev/null; then 34d89af13cSDaniel T. Lee echo "bpffs already mounted" 35d89af13cSDaniel T. Lee else 36d89af13cSDaniel T. Lee echo "bpffs not mounted. Mounting..." 37d89af13cSDaniel T. Lee mount -t bpf none $BPFFS 38d89af13cSDaniel T. Lee fi 39d89af13cSDaniel T. Lee} 40554ae6e7SDavid Ahern 41554ae6e7SDavid Ahernfunction attach_bpf { 42f20f064eSDaniel T. Lee $TEST /tmp/cgroupv2/foo $BPF_PROG $1 43554ae6e7SDavid Ahern [ $? -ne 0 ] && exit 1 44554ae6e7SDavid Ahern} 45554ae6e7SDavid Ahern 46554ae6e7SDavid Ahernfunction cleanup { 47d89af13cSDaniel T. Lee rm -rf $LINK_PIN 48554ae6e7SDavid Ahern ip link del veth0b 49554ae6e7SDavid Ahern ip netns delete at_ns0 50554ae6e7SDavid Ahern umount /tmp/cgroupv2 51554ae6e7SDavid Ahern rm -rf /tmp/cgroupv2 52554ae6e7SDavid Ahern} 53554ae6e7SDavid Ahern 54554ae6e7SDavid Aherncleanup 2>/dev/null 55554ae6e7SDavid Ahern 56554ae6e7SDavid Ahernset -e 57554ae6e7SDavid Ahernconfig_device 58554ae6e7SDavid Ahernconfig_cgroup 59d89af13cSDaniel T. Leeconfig_bpffs 60554ae6e7SDavid Ahernset +e 61554ae6e7SDavid Ahern 62554ae6e7SDavid Ahern# 63554ae6e7SDavid Ahern# Test 1 - fail ping6 64554ae6e7SDavid Ahern# 65554ae6e7SDavid Ahernattach_bpf 0 66554ae6e7SDavid Ahernping -c1 -w1 172.16.1.100 67554ae6e7SDavid Ahernif [ $? -ne 0 ]; then 68554ae6e7SDavid Ahern echo "ping failed when it should succeed" 69554ae6e7SDavid Ahern cleanup 70554ae6e7SDavid Ahern exit 1 71554ae6e7SDavid Ahernfi 72554ae6e7SDavid Ahern 73554ae6e7SDavid Ahernping6 -c1 -w1 2401:db00::1 74554ae6e7SDavid Ahernif [ $? -eq 0 ]; then 75554ae6e7SDavid Ahern echo "ping6 succeeded when it should not" 76554ae6e7SDavid Ahern cleanup 77554ae6e7SDavid Ahern exit 1 78554ae6e7SDavid Ahernfi 79554ae6e7SDavid Ahern 80d89af13cSDaniel T. Leerm -rf $LINK_PIN 81d89af13cSDaniel T. Leesleep 1 # Wait for link detach 82d89af13cSDaniel T. Lee 83554ae6e7SDavid Ahern# 84554ae6e7SDavid Ahern# Test 2 - fail ping 85554ae6e7SDavid Ahern# 86554ae6e7SDavid Ahernattach_bpf 1 87554ae6e7SDavid Ahernping6 -c1 -w1 2401:db00::1 88554ae6e7SDavid Ahernif [ $? -ne 0 ]; then 89554ae6e7SDavid Ahern echo "ping6 failed when it should succeed" 90554ae6e7SDavid Ahern cleanup 91554ae6e7SDavid Ahern exit 1 92554ae6e7SDavid Ahernfi 93554ae6e7SDavid Ahern 94554ae6e7SDavid Ahernping -c1 -w1 172.16.1.100 95554ae6e7SDavid Ahernif [ $? -eq 0 ]; then 96554ae6e7SDavid Ahern echo "ping succeeded when it should not" 97554ae6e7SDavid Ahern cleanup 98554ae6e7SDavid Ahern exit 1 99554ae6e7SDavid Ahernfi 100554ae6e7SDavid Ahern 101554ae6e7SDavid Aherncleanup 102554ae6e7SDavid Ahernecho 103554ae6e7SDavid Ahernecho "*** PASS ***" 104