#!/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) PPPOL2TP_LOG="$PPPOL2TP_DIR/l2tp.log" # shellcheck disable=SC2329 cleanup() { cleanup_all_ns [ -n "$SOCAT_PID" ] && kill_process "$SOCAT_PID" 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" # Start socat as syslog listener socat -v -u UNIX-RECV:/dev/log OPEN:/dev/null > "$PPPOL2TP_LOG" 2>&1 & SOCAT_PID=$! # Generate configuration files cat > "$PPPOL2TP_DIR/l2tp-server.conf" < "$PPPOL2TP_DIR/l2tp-client.conf" < "$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" # Dump syslog messages if the test failed if [ "$EXIT_STATUS" -ne 0 ]; then while read -r _sign _date _time len _from _to do len=${len##*=} read -n "$len" -r LINE echo "$LINE" done < "$PPPOL2TP_LOG" fi exit "$EXIT_STATUS"