Skip to content

Commit 08d20ea

Browse files
bastien-curutchetMartin KaFai Lau
authored andcommitted
selftests/bpf: test_tunnel: Move gre tunnel test to test_progs
gre tunnels are tested in the test_tunnel.sh but not in the test_progs framework. Add a new test in test_progs to test gre tunnels. It uses the same network topology and the same BPF programs than the script. Remove test_gre() and test_gre_no_tunnel_key() from the script. Signed-off-by: Bastien Curutchet (eBPF Foundation) <[email protected]> Signed-off-by: Martin KaFai Lau <[email protected]> Acked-by: Stanislav Fomichev <[email protected]> Link: https://patch.msgid.link/[email protected]
1 parent 7289e59 commit 08d20ea

File tree

2 files changed

+97
-79
lines changed

2 files changed

+97
-79
lines changed

tools/testing/selftests/bpf/prog_tests/test_tunnel.c

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@
9898
#define XFRM_SPI_IN_TO_OUT 0x1
9999
#define XFRM_SPI_OUT_TO_IN 0x2
100100

101+
#define GRE_TUNL_DEV0 "gre00"
102+
#define GRE_TUNL_DEV1 "gre11"
103+
101104
#define PING_ARGS "-i 0.01 -c 3 -w 10 -q"
102105

103106
static int config_device(void)
@@ -216,6 +219,18 @@ static int set_ipip_encap(const char *ipproto, const char *type)
216219
return -1;
217220
}
218221

222+
static int set_ipv4_addr(const char *dev0, const char *dev1)
223+
{
224+
SYS(fail, "ip -n at_ns0 link set dev %s up", dev0);
225+
SYS(fail, "ip -n at_ns0 addr add dev %s %s/24", dev0, IP4_ADDR_TUNL_DEV0);
226+
SYS(fail, "ip link set dev %s up", dev1);
227+
SYS(fail, "ip addr add dev %s %s/24", dev1, IP4_ADDR_TUNL_DEV1);
228+
229+
return 0;
230+
fail:
231+
return 1;
232+
}
233+
219234
static int add_ipip_tunnel(enum ipip_encap encap)
220235
{
221236
int err;
@@ -356,6 +371,31 @@ static void delete_xfrm_tunnel(void)
356371
IP4_ADDR1_VETH1, IP4_ADDR_VETH0, XFRM_SPI_OUT_TO_IN);
357372
}
358373

374+
static int add_ipv4_tunnel(const char *dev0, const char *dev1,
375+
const char *type, const char *opt)
376+
{
377+
if (!type || !opt || !dev0 || !dev1)
378+
return -1;
379+
380+
SYS(fail, "ip -n at_ns0 link add dev %s type %s %s local %s remote %s",
381+
dev0, type, opt, IP4_ADDR_VETH0, IP4_ADDR1_VETH1);
382+
383+
SYS(fail, "ip link add dev %s type %s external", dev1, type);
384+
385+
return set_ipv4_addr(dev0, dev1);
386+
fail:
387+
return -1;
388+
}
389+
390+
static void delete_tunnel(const char *dev0, const char *dev1)
391+
{
392+
if (!dev0 || !dev1)
393+
return;
394+
395+
SYS_NOFAIL("ip netns exec at_ns0 ip link delete dev %s", dev0);
396+
SYS_NOFAIL("ip link delete dev %s", dev1);
397+
}
398+
359399
static int test_ping(int family, const char *addr)
360400
{
361401
SYS(fail, "%s %s %s > /dev/null", ping_command(family), PING_ARGS, addr);
@@ -677,6 +717,59 @@ static void test_xfrm_tunnel(void)
677717
test_tunnel_kern__destroy(skel);
678718
}
679719

720+
enum gre_test {
721+
GRE,
722+
GRE_NOKEY,
723+
GRETAP,
724+
GRETAP_NOKEY,
725+
};
726+
727+
static void test_gre_tunnel(enum gre_test test)
728+
{
729+
struct test_tunnel_kern *skel;
730+
int set_fd, get_fd;
731+
int err;
732+
733+
skel = test_tunnel_kern__open_and_load();
734+
if (!ASSERT_OK_PTR(skel, "test_tunnel_kern__open_and_load"))
735+
return;
736+
737+
switch (test) {
738+
case GRE:
739+
err = add_ipv4_tunnel(GRE_TUNL_DEV0, GRE_TUNL_DEV1, "gre", "seq");
740+
set_fd = bpf_program__fd(skel->progs.gre_set_tunnel_no_key);
741+
get_fd = bpf_program__fd(skel->progs.gre_get_tunnel);
742+
break;
743+
case GRE_NOKEY:
744+
err = add_ipv4_tunnel(GRE_TUNL_DEV0, GRE_TUNL_DEV1, "gre", "seq key 2");
745+
set_fd = bpf_program__fd(skel->progs.gre_set_tunnel);
746+
get_fd = bpf_program__fd(skel->progs.gre_get_tunnel);
747+
break;
748+
case GRETAP:
749+
err = add_ipv4_tunnel(GRE_TUNL_DEV0, GRE_TUNL_DEV1, "gretap", "seq");
750+
set_fd = bpf_program__fd(skel->progs.gre_set_tunnel_no_key);
751+
get_fd = bpf_program__fd(skel->progs.gre_get_tunnel);
752+
break;
753+
case GRETAP_NOKEY:
754+
err = add_ipv4_tunnel(GRE_TUNL_DEV0, GRE_TUNL_DEV1, "gretap", "seq key 2");
755+
set_fd = bpf_program__fd(skel->progs.gre_set_tunnel);
756+
get_fd = bpf_program__fd(skel->progs.gre_get_tunnel);
757+
break;
758+
}
759+
if (!ASSERT_OK(err, "add tunnel"))
760+
goto done;
761+
762+
if (generic_attach(GRE_TUNL_DEV1, get_fd, set_fd))
763+
goto done;
764+
765+
ping_dev0();
766+
ping_dev1();
767+
768+
done:
769+
delete_tunnel(GRE_TUNL_DEV0, GRE_TUNL_DEV1);
770+
test_tunnel_kern__destroy(skel);
771+
}
772+
680773
#define RUN_TEST(name, ...) \
681774
({ \
682775
if (test__start_subtest(#name)) { \
@@ -694,6 +787,10 @@ static void *test_tunnel_run_tests(void *arg)
694787
RUN_TEST(ipip_tunnel, FOU);
695788
RUN_TEST(ipip_tunnel, GUE);
696789
RUN_TEST(xfrm_tunnel);
790+
RUN_TEST(gre_tunnel, GRE);
791+
RUN_TEST(gre_tunnel, GRE_NOKEY);
792+
RUN_TEST(gre_tunnel, GRETAP);
793+
RUN_TEST(gre_tunnel, GRETAP_NOKEY);
697794

698795
return NULL;
699796
}

tools/testing/selftests/bpf/test_tunnel.sh

Lines changed: 0 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -64,26 +64,6 @@ config_device()
6464
ip addr add dev veth1 172.16.1.200/24
6565
}
6666

67-
add_gre_tunnel()
68-
{
69-
tun_key=
70-
if [ -n "$1" ]; then
71-
tun_key="key $1"
72-
fi
73-
74-
# at_ns0 namespace
75-
ip netns exec at_ns0 \
76-
ip link add dev $DEV_NS type $TYPE seq $tun_key \
77-
local 172.16.1.100 remote 172.16.1.200
78-
ip netns exec at_ns0 ip link set dev $DEV_NS up
79-
ip netns exec at_ns0 ip addr add dev $DEV_NS 10.1.1.100/24
80-
81-
# root namespace
82-
ip link add dev $DEV type $TYPE $tun_key external
83-
ip link set dev $DEV up
84-
ip addr add dev $DEV 10.1.1.200/24
85-
}
86-
8767
add_ip6gretap_tunnel()
8868
{
8969

@@ -234,54 +214,6 @@ add_ip6tnl_tunnel()
234214
ip link set dev $DEV up
235215
}
236216

237-
test_gre()
238-
{
239-
TYPE=gretap
240-
DEV_NS=gretap00
241-
DEV=gretap11
242-
ret=0
243-
244-
check $TYPE
245-
config_device
246-
add_gre_tunnel 2
247-
attach_bpf $DEV gre_set_tunnel gre_get_tunnel
248-
ping $PING_ARG 10.1.1.100
249-
check_err $?
250-
ip netns exec at_ns0 ping $PING_ARG 10.1.1.200
251-
check_err $?
252-
cleanup
253-
254-
if [ $ret -ne 0 ]; then
255-
echo -e ${RED}"FAIL: $TYPE"${NC}
256-
return 1
257-
fi
258-
echo -e ${GREEN}"PASS: $TYPE"${NC}
259-
}
260-
261-
test_gre_no_tunnel_key()
262-
{
263-
TYPE=gre
264-
DEV_NS=gre00
265-
DEV=gre11
266-
ret=0
267-
268-
check $TYPE
269-
config_device
270-
add_gre_tunnel
271-
attach_bpf $DEV gre_set_tunnel_no_key gre_get_tunnel
272-
ping $PING_ARG 10.1.1.100
273-
check_err $?
274-
ip netns exec at_ns0 ping $PING_ARG 10.1.1.200
275-
check_err $?
276-
cleanup
277-
278-
if [ $ret -ne 0 ]; then
279-
echo -e ${RED}"FAIL: $TYPE"${NC}
280-
return 1
281-
fi
282-
echo -e ${GREEN}"PASS: $TYPE"${NC}
283-
}
284-
285217
test_ip6gre()
286218
{
287219
TYPE=ip6gre
@@ -538,8 +470,6 @@ cleanup()
538470
ip link del ipip11 2> /dev/null
539471
ip link del ipip6tnl11 2> /dev/null
540472
ip link del ip6ip6tnl11 2> /dev/null
541-
ip link del gretap11 2> /dev/null
542-
ip link del gre11 2> /dev/null
543473
ip link del ip6gre11 2> /dev/null
544474
ip link del ip6gretap11 2> /dev/null
545475
ip link del geneve11 2> /dev/null
@@ -567,7 +497,6 @@ check()
567497

568498
enable_debug()
569499
{
570-
echo 'file ip_gre.c +p' > /sys/kernel/debug/dynamic_debug/control
571500
echo 'file ip6_gre.c +p' > /sys/kernel/debug/dynamic_debug/control
572501
echo 'file geneve.c +p' > /sys/kernel/debug/dynamic_debug/control
573502
echo 'file ipip.c +p' > /sys/kernel/debug/dynamic_debug/control
@@ -584,14 +513,6 @@ bpf_tunnel_test()
584513
{
585514
local errors=0
586515

587-
echo "Testing GRE tunnel..."
588-
test_gre
589-
errors=$(( $errors + $? ))
590-
591-
echo "Testing GRE tunnel (without tunnel keys)..."
592-
test_gre_no_tunnel_key
593-
errors=$(( $errors + $? ))
594-
595516
echo "Testing IP6GRE tunnel..."
596517
test_ip6gre
597518
errors=$(( $errors + $? ))

0 commit comments

Comments
 (0)