summary refs log tree commit diff
path: root/contrib/scripts/test-ppp.sh
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/scripts/test-ppp.sh')
-rwxr-xr-xcontrib/scripts/test-ppp.sh108
1 files changed, 108 insertions, 0 deletions
diff --git a/contrib/scripts/test-ppp.sh b/contrib/scripts/test-ppp.sh
new file mode 100755
index 00000000..c100e976
--- /dev/null
+++ b/contrib/scripts/test-ppp.sh
@@ -0,0 +1,108 @@
+#!/bin/bash
+
+# test-ppp.sh:
+#
+# Test script that creates an netns and connect it with
+# veth pairs. On the other end, it runs pppoe-server.
+# It also creates a NetworkManager profile that can be activated.
+#
+# Usage:
+#
+# ./test-ppp.sh [setup]: create the setup. This implies a "cleanup"
+#   first.
+# ./test-ppp.sh cleanup: cleanup the things that the script created.
+set -e
+
+export IFACE=net1
+export IFACE_PEER=net1-x
+export CON_NAME="ppp-$IFACE"
+export NETNS=nm-ppp
+export PPP_SERVICE=isp
+export PPP_AUTH=pap
+export PPP_USER=test-user
+export PPP_PASSWD=test-passwd
+export IP_PEER="192.168.133.6"
+export IP_RANGE="192.168.133.100-130"
+
+die() {
+    printf '%s\n' "$*" >&2
+    exit 1
+}
+
+do_cleanup() {
+    pkill -F "/tmp/nm-test-ppp-$IFACE.pid" pppoe-server &>/dev/null || :
+    rm -rf \
+        "/tmp/nm-test-ppp-$IFACE.pid" \
+        "/tmp/nm-test-ppp-allip-$IFACE" \
+        "/tmp/nm-test-ppp-pppoe-server-options-$IFACE" \
+        "/tmp/nm-test-ppp-$IFACE-$PPP_AUTH-secrets"
+    ip --netns "$NETNS" link delete "$IFACE_PEER" &>/dev/null || :
+    ip netns delete "$NETNS" &>/dev/null || :
+
+    nmcli connection delete id ppp-net1 || :
+}
+
+do_setup() {
+    do_cleanup
+
+    ip netns add "$NETNS"
+    ip --netns "$NETNS" link add "$IFACE" type veth peer "$IFACE_PEER"
+    ip --netns "$NETNS" link set "$IFACE_PEER" up
+
+    ip --netns "$NETNS" addr add "$IP_PEER/24" dev "$IFACE_PEER"
+
+    echo "$IP_RANGE" > "/tmp/nm-test-ppp-allip-$IFACE"
+
+    cat <<EOF > "/tmp/nm-test-ppp-pppoe-server-options-$IFACE"
+require-$PPP_AUTH
+lcp-echo-interval 10
+lcp-echo-failure 2
+ms-dns 8.8.8.8
+ms-dns 8.8.4.4
+netmask 255.255.255.0
+defaultroute
+noipdefault
+usepeerdns
+EOF
+
+    echo "$PPP_USER * $PPP_PASSWD $IP_PEER" > "/tmp/nm-test-ppp-$IFACE-$PPP_AUTH-secrets"
+    chmod 600 "/tmp/nm-test-ppp-$IFACE-$PPP_AUTH-secrets"
+    mkdir -p /etc/ppp
+    touch "/etc/ppp/$PPP_AUTH-secrets"
+    ip netns exec "$NETNS" bash -ex <(
+        cat <<'EOF'
+        mount -o bind  "/tmp/nm-test-ppp-$IFACE-$PPP_AUTH-secrets" "/etc/ppp/$PPP_AUTH-secrets" &&
+        exec pppoe-server \
+            -X "/tmp/nm-test-ppp-$IFACE.pid" \
+            -S "$PPP_SERVICE" \
+            -C "$PPP_SERVICE" \
+            -L "$IP_PEER" \
+            -p "/tmp/nm-test-ppp-allip-$IFACE" \
+            -I "$IFACE_PEER" \
+            -O "/tmp/nm-test-ppp-pppoe-server-options-$IFACE"
+EOF
+) &
+
+    ip --netns "$NETNS" link set "$IFACE" netns $$
+
+    nmcli connection add \
+        type pppoe \
+        con-name "$CON_NAME" \
+        ifname "ppp-$IFACE" \
+        pppoe.parent "$IFACE" \
+        service "$PPP_SERVICE" \
+        username "$PPP_USER" \
+        password "$PPP_PASSWD" \
+        autoconnect no
+}
+
+CMD="${1-setup}"
+case "$CMD" in
+    setup| \
+    cleanup)
+        "do_$CMD"
+        ;;
+    *)
+        die "invalid command $1"
+        ;;
+esac