xref: /linux/tools/testing/selftests/net/ppp/pppol2tp.sh (revision b2128290c29902315e632ea59e0504d6bc9e9b42)
17af2a94fSQingfang Deng#!/bin/bash
27af2a94fSQingfang Deng# SPDX-License-Identifier: GPL-2.0
37af2a94fSQingfang Deng
47af2a94fSQingfang Dengsource ppp_common.sh
57af2a94fSQingfang Deng
67af2a94fSQingfang DengVETH_SERVER="veth-server"
77af2a94fSQingfang DengVETH_CLIENT="veth-client"
87af2a94fSQingfang DengOUTER_IP_SERVER="172.16.1.1"
97af2a94fSQingfang DengOUTER_IP_CLIENT="172.16.1.2"
107af2a94fSQingfang Deng
117af2a94fSQingfang DengPPPOL2TP_DIR=$(mktemp -d /tmp/pppol2tp.XXXXXX)
12*ae4ef727SQingfang DengPPPOL2TP_LOG="$PPPOL2TP_DIR/l2tp.log"
137af2a94fSQingfang Deng
147af2a94fSQingfang Deng# shellcheck disable=SC2329
157af2a94fSQingfang Dengcleanup() {
167af2a94fSQingfang Deng	cleanup_all_ns
17*ae4ef727SQingfang Deng	[ -n "$SOCAT_PID" ] && kill_process "$SOCAT_PID"
187af2a94fSQingfang Deng	rm -rf "$PPPOL2TP_DIR"
197af2a94fSQingfang Deng}
207af2a94fSQingfang Deng
217af2a94fSQingfang Dengtrap cleanup EXIT
227af2a94fSQingfang Deng
237af2a94fSQingfang Dengrequire_command xl2tpd
247af2a94fSQingfang Dengppp_common_init
257af2a94fSQingfang Dengmodprobe -q l2tp_ppp
267af2a94fSQingfang Deng
277af2a94fSQingfang Deng# Create the veth pair
287af2a94fSQingfang Dengip link add "$VETH_SERVER" type veth peer name "$VETH_CLIENT"
297af2a94fSQingfang Dengip link set "$VETH_SERVER" netns "$NS_SERVER"
307af2a94fSQingfang Dengip link set "$VETH_CLIENT" netns "$NS_CLIENT"
317af2a94fSQingfang Dengip -netns "$NS_SERVER" link set "$VETH_SERVER" up
327af2a94fSQingfang Dengip -netns "$NS_CLIENT" link set "$VETH_CLIENT" up
337af2a94fSQingfang Dengip -netns "$NS_SERVER" address add dev "$VETH_SERVER" "$OUTER_IP_SERVER" peer "$OUTER_IP_CLIENT"
347af2a94fSQingfang Dengip -netns "$NS_CLIENT" address add dev "$VETH_CLIENT" "$OUTER_IP_CLIENT" peer "$OUTER_IP_SERVER"
357af2a94fSQingfang Deng
36*ae4ef727SQingfang Deng# Start socat as syslog listener
37*ae4ef727SQingfang Dengsocat -v -u UNIX-RECV:/dev/log OPEN:/dev/null > "$PPPOL2TP_LOG" 2>&1 &
38*ae4ef727SQingfang DengSOCAT_PID=$!
39*ae4ef727SQingfang Deng
407af2a94fSQingfang Deng# Generate configuration files
417af2a94fSQingfang Dengcat > "$PPPOL2TP_DIR/l2tp-server.conf" <<EOF
427af2a94fSQingfang Deng[global]
437af2a94fSQingfang Denglisten-addr = $OUTER_IP_SERVER
447af2a94fSQingfang Dengaccess control = no
457af2a94fSQingfang Deng
467af2a94fSQingfang Deng[lns default]
477af2a94fSQingfang Dengip range = $IP_CLIENT
487af2a94fSQingfang Denglocal ip = $IP_SERVER
497af2a94fSQingfang Dengrequire authentication = no
507af2a94fSQingfang Dengrequire chap = no
517af2a94fSQingfang Dengrequire pap = no
527af2a94fSQingfang Dengppp debug = yes
537af2a94fSQingfang Dengpppoptfile = $(pwd)/pppoe-server-options
547af2a94fSQingfang DengEOF
557af2a94fSQingfang Deng
567af2a94fSQingfang Dengcat > "$PPPOL2TP_DIR/l2tp-client.conf" <<EOF
577af2a94fSQingfang Deng[global]
587af2a94fSQingfang Denglisten-addr = $OUTER_IP_CLIENT
597af2a94fSQingfang Dengaccess control = no
607af2a94fSQingfang Deng
617af2a94fSQingfang Deng[lac server]
627af2a94fSQingfang Denglns = $OUTER_IP_SERVER
637af2a94fSQingfang Dengrequire authentication = no
647af2a94fSQingfang Dengrequire chap = no
657af2a94fSQingfang Dengrequire pap = no
667af2a94fSQingfang Dengppp debug = yes
677af2a94fSQingfang Dengpppoptfile = $(pwd)/pppoe-server-options
687af2a94fSQingfang DengEOF
697af2a94fSQingfang Deng
707af2a94fSQingfang Deng# Start the L2TP Server
717af2a94fSQingfang Dengip netns exec "$NS_SERVER" xl2tpd -D -c "$PPPOL2TP_DIR/l2tp-server.conf" \
727af2a94fSQingfang Deng	-p "$PPPOL2TP_DIR/l2tp-server.pid" -C "$PPPOL2TP_DIR/l2tp-server.control" &
737af2a94fSQingfang Deng
747af2a94fSQingfang Deng# Start the L2TP Client
757af2a94fSQingfang Dengip netns exec "$NS_CLIENT" xl2tpd -D -c "$PPPOL2TP_DIR/l2tp-client.conf" \
767af2a94fSQingfang Deng	-p "$PPPOL2TP_DIR/l2tp-client.pid" -C "$PPPOL2TP_DIR/l2tp-client.control" &
777af2a94fSQingfang Deng
787af2a94fSQingfang Deng# Wait for xl2tpd to start and open their control pipes
797af2a94fSQingfang Dengslowwait 2 [ -p "$PPPOL2TP_DIR/l2tp-server.control" ]
807af2a94fSQingfang Dengslowwait 2 [ -p "$PPPOL2TP_DIR/l2tp-client.control" ]
817af2a94fSQingfang Deng
827af2a94fSQingfang Deng# Connect LAC to LNS
837af2a94fSQingfang Dengecho "c server" > "$PPPOL2TP_DIR/l2tp-client.control"
847af2a94fSQingfang Deng
857af2a94fSQingfang Dengppp_test_connectivity
867af2a94fSQingfang Deng
877af2a94fSQingfang Denglog_test "PPPoL2TP"
887af2a94fSQingfang Deng
897af2a94fSQingfang Deng# Recursion test
907af2a94fSQingfang DengRET=0
917af2a94fSQingfang Deng# Delete route to LNS IP
927af2a94fSQingfang Dengip -netns "$NS_CLIENT" route del "$OUTER_IP_SERVER"
937af2a94fSQingfang Deng# Add default route through ppp0
947af2a94fSQingfang Dengip -netns "$NS_CLIENT" route add default dev ppp0
957af2a94fSQingfang Deng# ping (we expect the ping to fail but not deadlock the system)
967af2a94fSQingfang Dengip netns exec "$NS_CLIENT" ping -c 1 "$IP_SERVER" -w 1
977af2a94fSQingfang Dengcheck_fail $?
987af2a94fSQingfang Deng
997af2a94fSQingfang Denglog_test "PPPoL2TP Recursion"
1007af2a94fSQingfang Deng
101*ae4ef727SQingfang Deng# Dump syslog messages if the test failed
102*ae4ef727SQingfang Dengif [ "$EXIT_STATUS" -ne 0 ]; then
103*ae4ef727SQingfang Deng	while read -r _sign _date _time len _from _to
104*ae4ef727SQingfang Deng	do      len=${len##*=}
105*ae4ef727SQingfang Deng		read -n "$len" -r LINE
106*ae4ef727SQingfang Deng		echo "$LINE"
107*ae4ef727SQingfang Deng	done < "$PPPOL2TP_LOG"
108*ae4ef727SQingfang Dengfi
109*ae4ef727SQingfang Deng
1107af2a94fSQingfang Dengexit "$EXIT_STATUS"
111