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