1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4source ppp_common.sh 5 6VETH_SERVER="veth-server" 7VETH_CLIENT="veth-client" 8OUTER_IP_SERVER="172.16.1.1" 9OUTER_IP_CLIENT="172.16.1.2" 10 11PPPOL2TP_DIR=$(mktemp -d /tmp/pppol2tp.XXXXXX) 12PPPOL2TP_LOG="$PPPOL2TP_DIR/l2tp.log" 13 14# shellcheck disable=SC2329 15cleanup() { 16 cleanup_all_ns 17 [ -n "$SOCAT_PID" ] && kill_process "$SOCAT_PID" 18 rm -rf "$PPPOL2TP_DIR" 19} 20 21trap cleanup EXIT 22 23require_command xl2tpd 24ppp_common_init 25modprobe -q l2tp_ppp 26 27# Create the veth pair 28ip link add "$VETH_SERVER" type veth peer name "$VETH_CLIENT" 29ip link set "$VETH_SERVER" netns "$NS_SERVER" 30ip link set "$VETH_CLIENT" netns "$NS_CLIENT" 31ip -netns "$NS_SERVER" link set "$VETH_SERVER" up 32ip -netns "$NS_CLIENT" link set "$VETH_CLIENT" up 33ip -netns "$NS_SERVER" address add dev "$VETH_SERVER" "$OUTER_IP_SERVER" peer "$OUTER_IP_CLIENT" 34ip -netns "$NS_CLIENT" address add dev "$VETH_CLIENT" "$OUTER_IP_CLIENT" peer "$OUTER_IP_SERVER" 35 36# Start socat as syslog listener 37socat -v -u UNIX-RECV:/dev/log OPEN:/dev/null > "$PPPOL2TP_LOG" 2>&1 & 38SOCAT_PID=$! 39 40# Generate configuration files 41cat > "$PPPOL2TP_DIR/l2tp-server.conf" <<EOF 42[global] 43listen-addr = $OUTER_IP_SERVER 44access control = no 45 46[lns default] 47ip range = $IP_CLIENT 48local ip = $IP_SERVER 49require authentication = no 50require chap = no 51require pap = no 52ppp debug = yes 53pppoptfile = $(pwd)/pppoe-server-options 54EOF 55 56cat > "$PPPOL2TP_DIR/l2tp-client.conf" <<EOF 57[global] 58listen-addr = $OUTER_IP_CLIENT 59access control = no 60 61[lac server] 62lns = $OUTER_IP_SERVER 63require authentication = no 64require chap = no 65require pap = no 66ppp debug = yes 67pppoptfile = $(pwd)/pppoe-server-options 68EOF 69 70# Start the L2TP Server 71ip netns exec "$NS_SERVER" xl2tpd -D -c "$PPPOL2TP_DIR/l2tp-server.conf" \ 72 -p "$PPPOL2TP_DIR/l2tp-server.pid" -C "$PPPOL2TP_DIR/l2tp-server.control" & 73 74# Start the L2TP Client 75ip netns exec "$NS_CLIENT" xl2tpd -D -c "$PPPOL2TP_DIR/l2tp-client.conf" \ 76 -p "$PPPOL2TP_DIR/l2tp-client.pid" -C "$PPPOL2TP_DIR/l2tp-client.control" & 77 78# Wait for xl2tpd to start and open their control pipes 79slowwait 2 [ -p "$PPPOL2TP_DIR/l2tp-server.control" ] 80slowwait 2 [ -p "$PPPOL2TP_DIR/l2tp-client.control" ] 81 82# Connect LAC to LNS 83echo "c server" > "$PPPOL2TP_DIR/l2tp-client.control" 84 85ppp_test_connectivity 86 87log_test "PPPoL2TP" 88 89# Recursion test 90RET=0 91# Delete route to LNS IP 92ip -netns "$NS_CLIENT" route del "$OUTER_IP_SERVER" 93# Add default route through ppp0 94ip -netns "$NS_CLIENT" route add default dev ppp0 95# ping (we expect the ping to fail but not deadlock the system) 96ip netns exec "$NS_CLIENT" ping -c 1 "$IP_SERVER" -w 1 97check_fail $? 98 99log_test "PPPoL2TP Recursion" 100 101# Dump syslog messages if the test failed 102if [ "$EXIT_STATUS" -ne 0 ]; then 103 while read -r _sign _date _time len _from _to 104 do len=${len##*=} 105 read -n "$len" -r LINE 106 echo "$LINE" 107 done < "$PPPOL2TP_LOG" 108fi 109 110exit "$EXIT_STATUS" 111