]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: add test case that 'nspawn --network-veth' enables IP forwarding 34014/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 16 Aug 2024 16:48:50 +0000 (01:48 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 16 Aug 2024 17:11:15 +0000 (02:11 +0900)
test/TEST-13-NSPAWN/test.sh
test/test-functions
test/units/TEST-13-NSPAWN.nspawn.sh

index 5c85b0c5dc81038b61f3251d0d80133114b6adc1..3ab52d0eee2acdb2c3b3d34b1165a9d185a088e7 100755 (executable)
@@ -17,6 +17,8 @@ test_append_files() {
 
     # For virtual wlan interface.
     instmods mac80211_hwsim
+    # for IPMasquerade=
+    instmods "=net/netfilter"
     generate_module_dependencies
 
     # Create a dummy container "template" with a minimal toolset, which we can
index e41e5792a3bc4faaf64cb033d424f45916439424..8f08d84ad812386296de86fab881be276d699c93 100644 (file)
@@ -1454,10 +1454,31 @@ install_missing_libraries() {
         [[ -e "$libgcc_s" ]] && inst_library "$libgcc_s"
     done < <(ldconfig -p | awk '/\/libgcc_s.so.1$/ { print $4 }')
 
-    local lib path
+    local lib path libs
     # A number of dependencies is now optional via dlopen, so the install
     # script will not pick them up, since it looks at linkage.
-    for lib in libcryptsetup libidn libidn2 pwquality libqrencode tss2-esys tss2-rc tss2-mu tss2-tcti-device libfido2 libbpf libelf libdw xkbcommon p11-kit-1 libarchive libgcrypt libkmod; do
+    libs=(
+        libarchive
+        libbpf
+        libcryptsetup
+        libdw
+        libelf
+        libfido2
+        libgcrypt
+        libidn
+        libidn2
+        libip4tc
+        libkmod
+        libqrencode
+        p11-kit-1
+        pwquality
+        tss2-esys
+        tss2-mu
+        tss2-rc
+        tss2-tcti-device
+        xkbcommon
+    )
+    for lib in "${libs[@]}"; do
         ddebug "Searching for $lib via pkg-config"
         if pkg-config --exists "$lib"; then
                 path="$(pkg-config --variable=libdir "$lib")"
index 80ba5c97a316c15f4c11c68e53173f42dcb54424..2de9f9079fa2a0bb41130f6ba871f216c8fba12d 100755 (executable)
@@ -1014,4 +1014,46 @@ EOF
     rm -fr "$root"
 }
 
+testcase_ip_masquerade() {
+    local root
+
+    if ! command -v networkctl >/dev/null; then
+        echo "This test requires systemd-networkd, skipping..."
+        return 0
+    fi
+
+    systemctl unmask systemd-networkd.service
+    systemctl edit --runtime --stdin systemd-networkd.service --drop-in=debug.conf <<EOF
+[Service]
+Environment=SYSTEMD_LOG_LEVEL=debug
+EOF
+    systemctl start systemd-networkd.service
+
+    root="$(mktemp -d /var/lib/machines/TEST-13-NSPAWN.ip_masquerade.XXX)"
+    create_dummy_container "$root"
+
+    systemd-run --unit=nspawn-hoge.service \
+                systemd-nspawn \
+                --register=no \
+                --directory="$root" \
+                --ephemeral \
+                --machine=hoge \
+                --network-veth \
+                bash -x -c "ip link set host0 up; sleep 30s"
+
+    /usr/lib/systemd/systemd-networkd-wait-online -i ve-hoge --timeout 30s
+
+    # Check IPMasquerade= for ve-* and friends enabled IP forwarding.
+    [[ "$(cat /proc/sys/net/ipv4/conf/all/forwarding)" == "1" ]]
+    [[ "$(cat /proc/sys/net/ipv4/conf/default/forwarding)" == "1" ]]
+    [[ "$(cat /proc/sys/net/ipv6/conf/all/forwarding)" == "1" ]]
+    [[ "$(cat /proc/sys/net/ipv6/conf/default/forwarding)" == "1" ]]
+
+    systemctl stop nspawn-hoge.service || :
+    systemctl stop systemd-networkd.service
+    systemctl mask systemd-networkd.service
+
+    rm -fr "$root"
+}
+
 run_testcases