xref: /linux/tools/testing/selftests/net/ppp/pppoe.sh (revision 91a4855d6c03e770e42f17c798a36a3c46e63de2)
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