* [PATCH net-next] selftests: net: add tests for PPPoL2TP
@ 2026-05-08 3:21 Qingfang Deng
2026-05-08 17:26 ` Felix Maurer
2026-05-12 8:00 ` Paolo Abeni
0 siblings, 2 replies; 5+ messages in thread
From: Qingfang Deng @ 2026-05-08 3:21 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Simon Horman, Shuah Khan, Felix Maurer, Qingfang Deng,
Sebastian Andrzej Siewior, Petr Machata, linux-kernel, linux-ppp,
netdev, linux-kselftest
Add ping, iperf3, and recursion tests for PPPoL2TP.
Assisted-by: Gemini:gemini-3-flash
Signed-off-by: Qingfang Deng <qingfang.deng@linux.dev>
---
tools/testing/selftests/net/ppp/Makefile | 1 +
tools/testing/selftests/net/ppp/config | 3 +
tools/testing/selftests/net/ppp/pppol2tp.sh | 93 +++++++++++++++++++++
3 files changed, 97 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..8bc3b7c33d5c 100644
--- a/tools/testing/selftests/net/ppp/config
+++ b/tools/testing/selftests/net/ppp/config
@@ -1,4 +1,6 @@
CONFIG_IPV6=y
+CONFIG_L2TP=m
+CONFIG_NETKIT=y
CONFIG_PACKET=y
CONFIG_PPP=m
CONFIG_PPP_ASYNC=m
@@ -6,4 +8,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..5ddcc6c41c33
--- /dev/null
+++ b/tools/testing/selftests/net/ppp/pppol2tp.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+
+source ppp_common.sh
+
+NK_SERVER="nk0"
+NK_CLIENT="nk1"
+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 netkit pair
+ip -netns "$NS_CLIENT" link add "$NK_CLIENT" type netkit
+ip -netns "$NS_CLIENT" link set "$NK_SERVER" netns "$NS_SERVER"
+ip -netns "$NS_SERVER" link set "$NK_SERVER" up
+ip -netns "$NS_CLIENT" link set "$NK_CLIENT" up
+ip -netns "$NS_SERVER" address add dev "$NK_SERVER" "$OUTER_IP_SERVER" peer "$OUTER_IP_CLIENT"
+ip -netns "$NS_CLIENT" address add dev "$NK_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
+# 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
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net-next] selftests: net: add tests for PPPoL2TP
2026-05-08 3:21 [PATCH net-next] selftests: net: add tests for PPPoL2TP Qingfang Deng
@ 2026-05-08 17:26 ` Felix Maurer
2026-05-09 1:13 ` Qingfang Deng
2026-05-12 8:00 ` Paolo Abeni
1 sibling, 1 reply; 5+ messages in thread
From: Felix Maurer @ 2026-05-08 17:26 UTC (permalink / raw)
To: Qingfang Deng
Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Simon Horman, Shuah Khan, Sebastian Andrzej Siewior, Petr Machata,
linux-kernel, linux-ppp, netdev, linux-kselftest
On Fri, May 08, 2026 at 11:21:49AM +0800, Qingfang Deng wrote:
> Add ping, iperf3, and recursion tests for PPPoL2TP.
>
> Assisted-by: Gemini:gemini-3-flash
> Signed-off-by: Qingfang Deng <qingfang.deng@linux.dev>
> ---
> tools/testing/selftests/net/ppp/Makefile | 1 +
> tools/testing/selftests/net/ppp/config | 3 +
> tools/testing/selftests/net/ppp/pppol2tp.sh | 93 +++++++++++++++++++++
> 3 files changed, 97 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..8bc3b7c33d5c 100644
> --- a/tools/testing/selftests/net/ppp/config
> +++ b/tools/testing/selftests/net/ppp/config
> @@ -1,4 +1,6 @@
> CONFIG_IPV6=y
> +CONFIG_L2TP=m
> +CONFIG_NETKIT=y
> CONFIG_PACKET=y
> CONFIG_PPP=m
> CONFIG_PPP_ASYNC=m
> @@ -6,4 +8,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..5ddcc6c41c33
> --- /dev/null
> +++ b/tools/testing/selftests/net/ppp/pppol2tp.sh
> @@ -0,0 +1,93 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +
> +source ppp_common.sh
> +
> +NK_SERVER="nk0"
> +NK_CLIENT="nk1"
> +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 netkit pair
> +ip -netns "$NS_CLIENT" link add "$NK_CLIENT" type netkit
> +ip -netns "$NS_CLIENT" link set "$NK_SERVER" netns "$NS_SERVER"
> +ip -netns "$NS_SERVER" link set "$NK_SERVER" up
> +ip -netns "$NS_CLIENT" link set "$NK_CLIENT" up
> +ip -netns "$NS_SERVER" address add dev "$NK_SERVER" "$OUTER_IP_SERVER" peer "$OUTER_IP_CLIENT"
> +ip -netns "$NS_CLIENT" address add dev "$NK_CLIENT" "$OUTER_IP_CLIENT" peer "$OUTER_IP_SERVER"
Is there a particular reason to create the test setup with a netkit pair
instead of the more standard veth pairs?
Thanks,
Felix
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next] selftests: net: add tests for PPPoL2TP
2026-05-08 17:26 ` Felix Maurer
@ 2026-05-09 1:13 ` Qingfang Deng
2026-05-13 15:55 ` Felix Maurer
0 siblings, 1 reply; 5+ messages in thread
From: Qingfang Deng @ 2026-05-09 1:13 UTC (permalink / raw)
To: Felix Maurer
Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Simon Horman, Shuah Khan, Sebastian Andrzej Siewior, Petr Machata,
linux-kernel, linux-ppp, netdev, linux-kselftest
On 2026/5/9 1:26, Felix Maurer wrote:
> Is there a particular reason to create the test setup with a netkit pair
> instead of the more standard veth pairs?
L2TP does not need an outer ethernet header so I choose netkit instead
of veth.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next] selftests: net: add tests for PPPoL2TP
2026-05-08 3:21 [PATCH net-next] selftests: net: add tests for PPPoL2TP Qingfang Deng
2026-05-08 17:26 ` Felix Maurer
@ 2026-05-12 8:00 ` Paolo Abeni
1 sibling, 0 replies; 5+ messages in thread
From: Paolo Abeni @ 2026-05-12 8:00 UTC (permalink / raw)
To: Qingfang Deng, David S. Miller, Eric Dumazet, Jakub Kicinski,
Simon Horman, Shuah Khan, Felix Maurer, Sebastian Andrzej Siewior,
Petr Machata, linux-kernel, linux-ppp, netdev, linux-kselftest
On 5/8/26 5:21 AM, Qingfang Deng wrote:
> diff --git a/tools/testing/selftests/net/ppp/pppol2tp.sh b/tools/testing/selftests/net/ppp/pppol2tp.sh
> new file mode 100755
> index 000000000000..5ddcc6c41c33
> --- /dev/null
> +++ b/tools/testing/selftests/net/ppp/pppol2tp.sh
> @@ -0,0 +1,93 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +
> +source ppp_common.sh
> +
> +NK_SERVER="nk0"
> +NK_CLIENT="nk1"
> +OUTER_IP_SERVER="172.16.1.1"
> +OUTER_IP_CLIENT="172.16.1.2"
> +
> +PPPOL2TP_DIR=$(mktemp -d /tmp/pppol2tp.XXXXXX)
Sashiko (gemini) reports an unhandled error condition here. AFAICS that
is irrelevant as it could happen only on a broken system.
> +
> +# 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 netkit pair
> +ip -netns "$NS_CLIENT" link add "$NK_CLIENT" type netkit
> +ip -netns "$NS_CLIENT" link set "$NK_SERVER" netns "$NS_SERVER"
> +ip -netns "$NS_SERVER" link set "$NK_SERVER" up
> +ip -netns "$NS_CLIENT" link set "$NK_CLIENT" up
> +ip -netns "$NS_SERVER" address add dev "$NK_SERVER" "$OUTER_IP_SERVER" peer "$OUTER_IP_CLIENT"
> +ip -netns "$NS_CLIENT" address add dev "$NK_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
> +# 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 $?
Sashiko notes you should clear the RET global variable before any direct
or indirect invocation of check_err
/P
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next] selftests: net: add tests for PPPoL2TP
2026-05-09 1:13 ` Qingfang Deng
@ 2026-05-13 15:55 ` Felix Maurer
0 siblings, 0 replies; 5+ messages in thread
From: Felix Maurer @ 2026-05-13 15:55 UTC (permalink / raw)
To: Qingfang Deng
Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Simon Horman, Shuah Khan, Sebastian Andrzej Siewior, Petr Machata,
linux-kernel, linux-ppp, netdev, linux-kselftest
On Sat, May 09, 2026 at 09:13:58AM +0800, Qingfang Deng wrote:
> On 2026/5/9 1:26, Felix Maurer wrote:
> > Is there a particular reason to create the test setup with a netkit pair
> > instead of the more standard veth pairs?
>
> L2TP does not need an outer ethernet header so I choose netkit instead of
> veth.
I see, thanks. In my opinion, sticking to the same environment setup for
as many selftests as possible, i.e., using veth pairs everywhere, has
more benefits in terms of maintenance of the test than leaving out the
ethernet header has. Also, while I understand that selftests are only
supported on systems that run with the respective selftest kernel
config, I still think it's good to stick to veth as it is probably
available in more kernel builds (think resource constrained
envrionments, older kernel versions, etc.).
But in the end, it's up to you and the maintainers. However, if you
stick with netkit, please name the interfaces explicitly and don't rely
on the current auto-assigned name of the peer interface.
Thanks,
Felix
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-05-13 15:56 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-08 3:21 [PATCH net-next] selftests: net: add tests for PPPoL2TP Qingfang Deng
2026-05-08 17:26 ` Felix Maurer
2026-05-09 1:13 ` Qingfang Deng
2026-05-13 15:55 ` Felix Maurer
2026-05-12 8:00 ` Paolo Abeni
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox