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