tools/testing/selftests/net/ppp/Makefile | 1 + tools/testing/selftests/net/ppp/config | 2 + tools/testing/selftests/net/ppp/pppol2tp.sh | 95 +++++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100755 tools/testing/selftests/net/ppp/pppol2tp.sh
Add ping, iperf3, and recursion tests for PPPoL2TP.
Assisted-by: Gemini:gemini-3-flash
Signed-off-by: Qingfang Deng <qingfang.deng@linux.dev>
---
v2:
- use named veth pair instead of netkit
- reset RET prior to the recursion test
v1: https://lore.kernel.org/netdev/20260508032158.67887-1-qingfang.deng@linux.dev
tools/testing/selftests/net/ppp/Makefile | 1 +
tools/testing/selftests/net/ppp/config | 2 +
tools/testing/selftests/net/ppp/pppol2tp.sh | 95 +++++++++++++++++++++
3 files changed, 98 insertions(+)
create mode 100755 tools/testing/selftests/net/ppp/pppol2tp.sh
diff --git a/tools/testing/selftests/net/ppp/Makefile b/tools/testing/selftests/net/ppp/Makefile
index b39b0abadde6..6036fa134351 100644
--- a/tools/testing/selftests/net/ppp/Makefile
+++ b/tools/testing/selftests/net/ppp/Makefile
@@ -5,6 +5,7 @@ top_srcdir = ../../../../..
TEST_PROGS := \
ppp_async.sh \
pppoe.sh \
+ pppol2tp.sh \
# end of TEST_PROGS
TEST_FILES := \
diff --git a/tools/testing/selftests/net/ppp/config b/tools/testing/selftests/net/ppp/config
index b45d25c5b970..843545df8f03 100644
--- a/tools/testing/selftests/net/ppp/config
+++ b/tools/testing/selftests/net/ppp/config
@@ -1,4 +1,5 @@
CONFIG_IPV6=y
+CONFIG_L2TP=m
CONFIG_PACKET=y
CONFIG_PPP=m
CONFIG_PPP_ASYNC=m
@@ -6,4 +7,5 @@ CONFIG_PPP_BSDCOMP=m
CONFIG_PPP_DEFLATE=m
CONFIG_PPPOE=m
CONFIG_PPPOE_HASH_BITS_4=y
+CONFIG_PPPOL2TP=m
CONFIG_VETH=y
diff --git a/tools/testing/selftests/net/ppp/pppol2tp.sh b/tools/testing/selftests/net/ppp/pppol2tp.sh
new file mode 100755
index 000000000000..5b592785f1f9
--- /dev/null
+++ b/tools/testing/selftests/net/ppp/pppol2tp.sh
@@ -0,0 +1,95 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+
+source ppp_common.sh
+
+VETH_SERVER="veth-server"
+VETH_CLIENT="veth-client"
+OUTER_IP_SERVER="172.16.1.1"
+OUTER_IP_CLIENT="172.16.1.2"
+
+PPPOL2TP_DIR=$(mktemp -d /tmp/pppol2tp.XXXXXX)
+
+# shellcheck disable=SC2329
+cleanup() {
+ cleanup_all_ns
+ rm -rf "$PPPOL2TP_DIR"
+}
+
+trap cleanup EXIT
+
+require_command xl2tpd
+ppp_common_init
+modprobe -q l2tp_ppp
+
+# Create the veth pair
+ip link add "$VETH_SERVER" type veth peer name "$VETH_CLIENT"
+ip link set "$VETH_SERVER" netns "$NS_SERVER"
+ip link set "$VETH_CLIENT" netns "$NS_CLIENT"
+ip -netns "$NS_SERVER" link set "$VETH_SERVER" up
+ip -netns "$NS_CLIENT" link set "$VETH_CLIENT" up
+ip -netns "$NS_SERVER" address add dev "$VETH_SERVER" "$OUTER_IP_SERVER" peer "$OUTER_IP_CLIENT"
+ip -netns "$NS_CLIENT" address add dev "$VETH_CLIENT" "$OUTER_IP_CLIENT" peer "$OUTER_IP_SERVER"
+
+# Generate configuration files
+cat > "$PPPOL2TP_DIR/l2tp-server.conf" <<EOF
+[global]
+listen-addr = $OUTER_IP_SERVER
+access control = no
+
+[lns default]
+ip range = $IP_CLIENT
+local ip = $IP_SERVER
+require authentication = no
+require chap = no
+require pap = no
+ppp debug = yes
+pppoptfile = $(pwd)/pppoe-server-options
+EOF
+
+cat > "$PPPOL2TP_DIR/l2tp-client.conf" <<EOF
+[global]
+listen-addr = $OUTER_IP_CLIENT
+access control = no
+
+[lac server]
+lns = $OUTER_IP_SERVER
+require authentication = no
+require chap = no
+require pap = no
+ppp debug = yes
+pppoptfile = $(pwd)/pppoe-server-options
+EOF
+
+# Start the L2TP Server
+ip netns exec "$NS_SERVER" xl2tpd -D -c "$PPPOL2TP_DIR/l2tp-server.conf" \
+ -p "$PPPOL2TP_DIR/l2tp-server.pid" -C "$PPPOL2TP_DIR/l2tp-server.control" &
+
+# Start the L2TP Client
+ip netns exec "$NS_CLIENT" xl2tpd -D -c "$PPPOL2TP_DIR/l2tp-client.conf" \
+ -p "$PPPOL2TP_DIR/l2tp-client.pid" -C "$PPPOL2TP_DIR/l2tp-client.control" &
+
+# Wait for xl2tpd to start and open their control pipes
+slowwait 2 [ -p "$PPPOL2TP_DIR/l2tp-server.control" ]
+slowwait 2 [ -p "$PPPOL2TP_DIR/l2tp-client.control" ]
+
+# Connect LAC to LNS
+echo "c server" > "$PPPOL2TP_DIR/l2tp-client.control"
+
+ppp_test_connectivity
+
+log_test "PPPoL2TP"
+
+# Recursion test
+RET=0
+# Delete route to LNS IP
+ip -netns "$NS_CLIENT" route del "$OUTER_IP_SERVER"
+# Add default route through ppp0
+ip -netns "$NS_CLIENT" route add default dev ppp0
+# ping (we expect the ping to fail but not deadlock the system)
+ip netns exec "$NS_CLIENT" ping -c 1 "$IP_SERVER" -w 1
+check_fail $?
+
+log_test "PPPoL2TP Recursion"
+
+exit "$EXIT_STATUS"
--
2.43.0
Hi Qingfang, On 14/05/2026 11:57, Qingfang Deng wrote: > Add ping, iperf3, and recursion tests for PPPoL2TP. Thank you for the new test! I recently modified NIPA to be able to execute this test by adding xl2tpd 1.3.20, but it looks like this test is flaky: https://netdev.bots.linux.dev/contest.html?skip=0&test=pppol2tp-sh The results are now ignored. Do you mind fixing that, please? Cheers, Matt -- NIPA assistant.
Hi, On 2026/5/21 10:24, Matthieu Baerts wrote: > Hi Qingfang, > > On 14/05/2026 11:57, Qingfang Deng wrote: >> Add ping, iperf3, and recursion tests for PPPoL2TP. > Thank you for the new test! > > I recently modified NIPA to be able to execute this test by adding > xl2tpd 1.3.20, but it looks like this test is flaky: > > https://netdev.bots.linux.dev/contest.html?skip=0&test=pppol2tp-sh > > The results are now ignored. > > Do you mind fixing that, please? Looks like pppd exited unexpectedly, but I could not locally reproduce this issue. You can start a socat instance to listen on syslog (as done in pppoe.sh test) to see what's going on. Regards, Qingfang
Hi Qingfang, On 21/05/2026 17:18, Qingfang Deng wrote: > Hi, > > On 2026/5/21 10:24, Matthieu Baerts wrote: >> Hi Qingfang, >> >> On 14/05/2026 11:57, Qingfang Deng wrote: >>> Add ping, iperf3, and recursion tests for PPPoL2TP. >> Thank you for the new test! >> >> I recently modified NIPA to be able to execute this test by adding >> xl2tpd 1.3.20, but it looks like this test is flaky: >> >> https://netdev.bots.linux.dev/contest.html?skip=0&test=pppol2tp-sh >> >> The results are now ignored. >> >> Do you mind fixing that, please? > > > Looks like pppd exited unexpectedly, but I could not locally reproduce > this issue. > > You can start a socat instance to listen on syslog (as done in pppoe.sh > test) to see what's going on. If it is already done in another test, and if this is not creating more troubles, it might be more interesting if this debug mode is always enabled. I would then recommend sending a patch doing that, than applying temp modifications only in NIPA, with a risk of causing other troubles. WDYT? Cheers, Matt
On 2026/5/22 9:43, Matthieu Baerts wrote: > Hi Qingfang, > > On 21/05/2026 17:18, Qingfang Deng wrote: >> Looks like pppd exited unexpectedly, but I could not locally reproduce >> this issue. >> >> You can start a socat instance to listen on syslog (as done in pppoe.sh >> test) to see what's going on. > If it is already done in another test, and if this is not creating more > troubles, it might be more interesting if this debug mode is always > enabled. I would then recommend sending a patch doing that, than > applying temp modifications only in NIPA, with a risk of causing other > troubles. WDYT? Sure thing.
© 2016 - 2026 Red Hat, Inc.