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