1*dfecb0c5SQingfang Deng#!/bin/bash 2*dfecb0c5SQingfang Deng# SPDX-License-Identifier: GPL-2.0 3*dfecb0c5SQingfang Deng 4*dfecb0c5SQingfang Dengsource ppp_common.sh 5*dfecb0c5SQingfang Deng 6*dfecb0c5SQingfang DengVETH_SERVER="veth-server" 7*dfecb0c5SQingfang DengVETH_CLIENT="veth-client" 8*dfecb0c5SQingfang DengPPPOE_LOG=$(mktemp /tmp/pppoe.XXXXXX) 9*dfecb0c5SQingfang Deng 10*dfecb0c5SQingfang Deng# shellcheck disable=SC2329 11*dfecb0c5SQingfang Dengcleanup() { 12*dfecb0c5SQingfang Deng cleanup_all_ns 13*dfecb0c5SQingfang Deng [ -n "$SOCAT_PID" ] && kill_process "$SOCAT_PID" 14*dfecb0c5SQingfang Deng rm -f "$PPPOE_LOG" 15*dfecb0c5SQingfang Deng} 16*dfecb0c5SQingfang Deng 17*dfecb0c5SQingfang Dengtrap cleanup EXIT 18*dfecb0c5SQingfang Deng 19*dfecb0c5SQingfang Dengrequire_command pppoe-server 20*dfecb0c5SQingfang Dengppp_common_init 21*dfecb0c5SQingfang Dengmodprobe -q pppoe 22*dfecb0c5SQingfang Deng 23*dfecb0c5SQingfang Deng# Try to locate pppoe.so plugin 24*dfecb0c5SQingfang DengPPPOE_PLUGIN=$(find /usr/{lib,lib64,lib32}/pppd/ -name pppoe.so -type f -print -quit) 25*dfecb0c5SQingfang Dengif [ -z "$PPPOE_PLUGIN" ]; then 26*dfecb0c5SQingfang Deng log_test_skip "PPPoE: pppoe.so plugin not found" 27*dfecb0c5SQingfang Deng exit "$EXIT_STATUS" 28*dfecb0c5SQingfang Dengfi 29*dfecb0c5SQingfang Deng 30*dfecb0c5SQingfang Deng# Create the veth pair 31*dfecb0c5SQingfang Dengip link add "$VETH_SERVER" type veth peer name "$VETH_CLIENT" 32*dfecb0c5SQingfang Dengip link set "$VETH_SERVER" netns "$NS_SERVER" 33*dfecb0c5SQingfang Dengip link set "$VETH_CLIENT" netns "$NS_CLIENT" 34*dfecb0c5SQingfang Dengip -netns "$NS_SERVER" link set "$VETH_SERVER" up 35*dfecb0c5SQingfang Dengip -netns "$NS_CLIENT" link set "$VETH_CLIENT" up 36*dfecb0c5SQingfang Deng 37*dfecb0c5SQingfang Deng# Start socat as syslog listener 38*dfecb0c5SQingfang Dengsocat -v -u UNIX-RECV:/dev/log OPEN:/dev/null > "$PPPOE_LOG" 2>&1 & 39*dfecb0c5SQingfang DengSOCAT_PID=$! 40*dfecb0c5SQingfang Deng 41*dfecb0c5SQingfang Deng# Start the PPP Server. Note that versions before 4.0 ignore -g option and 42*dfecb0c5SQingfang Deng# instead use a hardcoded plugin path, so they may fail to find the plugin. 43*dfecb0c5SQingfang Dengip netns exec "$NS_SERVER" pppoe-server -I "$VETH_SERVER" \ 44*dfecb0c5SQingfang Deng -L "$IP_SERVER" -R "$IP_CLIENT" -N 1 -q "$(command -v pppd)" \ 45*dfecb0c5SQingfang Deng -k -O "$(pwd)/pppoe-server-options" -g "$PPPOE_PLUGIN" 46*dfecb0c5SQingfang Deng 47*dfecb0c5SQingfang Deng# Start the PPP Client 48*dfecb0c5SQingfang Dengip netns exec "$NS_CLIENT" pppd \ 49*dfecb0c5SQingfang Deng local debug updetach noipdefault noauth nodefaultroute \ 50*dfecb0c5SQingfang Deng plugin "$PPPOE_PLUGIN" nic-"$VETH_CLIENT" 51*dfecb0c5SQingfang Deng 52*dfecb0c5SQingfang Dengppp_test_connectivity 53*dfecb0c5SQingfang Deng 54*dfecb0c5SQingfang Denglog_test "PPPoE" 55*dfecb0c5SQingfang Deng 56*dfecb0c5SQingfang Deng# Dump syslog messages if the test failed 57*dfecb0c5SQingfang Dengif [ "$RET" -ne 0 ]; then 58*dfecb0c5SQingfang Deng while read -r _sign _date _time len _from _to 59*dfecb0c5SQingfang Deng do len=${len##*=} 60*dfecb0c5SQingfang Deng read -n "$len" -r LINE 61*dfecb0c5SQingfang Deng echo "$LINE" 62*dfecb0c5SQingfang Deng done < "$PPPOE_LOG" 63*dfecb0c5SQingfang Dengfi 64*dfecb0c5SQingfang Deng 65*dfecb0c5SQingfang Dengexit "$EXIT_STATUS" 66