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) 12 13# shellcheck disable=SC2329 14cleanup() { 15 cleanup_all_ns 16 rm -rf "$PPPOL2TP_DIR" 17} 18 19trap cleanup EXIT 20 21require_command xl2tpd 22ppp_common_init 23modprobe -q l2tp_ppp 24 25# Create the veth pair 26ip link add "$VETH_SERVER" type veth peer name "$VETH_CLIENT" 27ip link set "$VETH_SERVER" netns "$NS_SERVER" 28ip link set "$VETH_CLIENT" netns "$NS_CLIENT" 29ip -netns "$NS_SERVER" link set "$VETH_SERVER" up 30ip -netns "$NS_CLIENT" link set "$VETH_CLIENT" up 31ip -netns "$NS_SERVER" address add dev "$VETH_SERVER" "$OUTER_IP_SERVER" peer "$OUTER_IP_CLIENT" 32ip -netns "$NS_CLIENT" address add dev "$VETH_CLIENT" "$OUTER_IP_CLIENT" peer "$OUTER_IP_SERVER" 33 34# Generate configuration files 35cat > "$PPPOL2TP_DIR/l2tp-server.conf" <<EOF 36[global] 37listen-addr = $OUTER_IP_SERVER 38access control = no 39 40[lns default] 41ip range = $IP_CLIENT 42local ip = $IP_SERVER 43require authentication = no 44require chap = no 45require pap = no 46ppp debug = yes 47pppoptfile = $(pwd)/pppoe-server-options 48EOF 49 50cat > "$PPPOL2TP_DIR/l2tp-client.conf" <<EOF 51[global] 52listen-addr = $OUTER_IP_CLIENT 53access control = no 54 55[lac server] 56lns = $OUTER_IP_SERVER 57require authentication = no 58require chap = no 59require pap = no 60ppp debug = yes 61pppoptfile = $(pwd)/pppoe-server-options 62EOF 63 64# Start the L2TP Server 65ip netns exec "$NS_SERVER" xl2tpd -D -c "$PPPOL2TP_DIR/l2tp-server.conf" \ 66 -p "$PPPOL2TP_DIR/l2tp-server.pid" -C "$PPPOL2TP_DIR/l2tp-server.control" & 67 68# Start the L2TP Client 69ip netns exec "$NS_CLIENT" xl2tpd -D -c "$PPPOL2TP_DIR/l2tp-client.conf" \ 70 -p "$PPPOL2TP_DIR/l2tp-client.pid" -C "$PPPOL2TP_DIR/l2tp-client.control" & 71 72# Wait for xl2tpd to start and open their control pipes 73slowwait 2 [ -p "$PPPOL2TP_DIR/l2tp-server.control" ] 74slowwait 2 [ -p "$PPPOL2TP_DIR/l2tp-client.control" ] 75 76# Connect LAC to LNS 77echo "c server" > "$PPPOL2TP_DIR/l2tp-client.control" 78 79ppp_test_connectivity 80 81log_test "PPPoL2TP" 82 83# Recursion test 84RET=0 85# Delete route to LNS IP 86ip -netns "$NS_CLIENT" route del "$OUTER_IP_SERVER" 87# Add default route through ppp0 88ip -netns "$NS_CLIENT" route add default dev ppp0 89# ping (we expect the ping to fail but not deadlock the system) 90ip netns exec "$NS_CLIENT" ping -c 1 "$IP_SERVER" -w 1 91check_fail $? 92 93log_test "PPPoL2TP Recursion" 94 95exit "$EXIT_STATUS" 96