]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests: netconsole: Add support for basic netconsole target format
authorBreno Leitao <leitao@debian.org>
Mon, 9 Jun 2025 09:46:29 +0000 (02:46 -0700)
committerJakub Kicinski <kuba@kernel.org>
Tue, 10 Jun 2025 21:21:53 +0000 (14:21 -0700)
Extend the netconsole selftest to validate both basic and extended
target formats. The basic format is a simpler variant that doesn't
support userdata or release functionality.

The test now validates that netconsole works correctly in both
configurations, improving test coverage for different netconsole
deployment scenarios.

Signed-off-by: Breno Leitao <leitao@debian.org>
Link: https://patch.msgid.link/20250609-netcons_ext-v3-4-5336fa670326@debian.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/drivers/net/lib/sh/lib_netcons.sh
tools/testing/selftests/drivers/net/netcons_basic.sh

index 2d5dd3297693c8a6621d4c51f851c9161b4638d0..71a5a8b1712c00e72957ad8bf2236bd9085b0a96 100644 (file)
@@ -95,6 +95,8 @@ function set_network() {
 }
 
 function create_dynamic_target() {
+       local FORMAT=${1:-"extended"}
+
        DSTMAC=$(ip netns exec "${NAMESPACE}" \
                 ip link show "${DSTIF}" | awk '/ether/ {print $2}')
 
@@ -106,6 +108,16 @@ function create_dynamic_target() {
        echo "${DSTMAC}" > "${NETCONS_PATH}"/remote_mac
        echo "${SRCIF}" > "${NETCONS_PATH}"/dev_name
 
+       if [ "${FORMAT}" == "basic" ]
+       then
+               # Basic target does not support release
+               echo 0 > "${NETCONS_PATH}"/release
+               echo 0 > "${NETCONS_PATH}"/extended
+       elif [ "${FORMAT}" == "extended" ]
+       then
+               echo 1 > "${NETCONS_PATH}"/extended
+       fi
+
        echo 1 > "${NETCONS_PATH}"/enabled
 }
 
@@ -159,6 +171,7 @@ function listen_port_and_save_to() {
 
 function validate_result() {
        local TMPFILENAME="$1"
+       local FORMAT=${2:-"extended"}
 
        # TMPFILENAME will contain something like:
        # 6.11.1-0_fbk0_rc13_509_g30d75cea12f7,13,1822,115075213798,-;netconsole selftest: netcons_gtJHM
@@ -176,10 +189,15 @@ function validate_result() {
                exit "${ksft_fail}"
        fi
 
-       if ! grep -q "${USERDATA_KEY}=${USERDATA_VALUE}" "${TMPFILENAME}"; then
-               echo "FAIL: ${USERDATA_KEY}=${USERDATA_VALUE} not found in ${TMPFILENAME}" >&2
-               cat "${TMPFILENAME}" >&2
-               exit "${ksft_fail}"
+       # userdata is not supported on basic format target,
+       # thus, do not validate it.
+       if [ "${FORMAT}" != "basic" ];
+       then
+               if ! grep -q "${USERDATA_KEY}=${USERDATA_VALUE}" "${TMPFILENAME}"; then
+                       echo "FAIL: ${USERDATA_KEY}=${USERDATA_VALUE} not found in ${TMPFILENAME}" >&2
+                       cat "${TMPFILENAME}" >&2
+                       exit "${ksft_fail}"
+               fi
        fi
 
        # Delete the file once it is validated, otherwise keep it
index d2f0685d24ba37c8e0faaeb5ace0776f235802f9..40a6ac6191b8b6d5c4279c7cfc31cc208ae998a5 100755 (executable)
@@ -32,23 +32,35 @@ check_for_dependencies
 echo "6 5" > /proc/sys/kernel/printk
 # Remove the namespace, interfaces and netconsole target on exit
 trap cleanup EXIT
-# Create one namespace and two interfaces
-set_network
-# Create a dynamic target for netconsole
-create_dynamic_target
-# Set userdata "key" with the "value" value
-set_user_data
-# Listed for netconsole port inside the namespace and destination interface
-listen_port_and_save_to "${OUTPUT_FILE}" &
-# Wait for socat to start and listen to the port.
-wait_local_port_listen "${NAMESPACE}" "${PORT}" udp
-# Send the message
-echo "${MSG}: ${TARGET}" > /dev/kmsg
-# Wait until socat saves the file to disk
-busywait "${BUSYWAIT_TIMEOUT}" test -s "${OUTPUT_FILE}"
-
-# Make sure the message was received in the dst part
-# and exit
-validate_result "${OUTPUT_FILE}"
 
+# Run the test twice, with different format modes
+for FORMAT in "basic" "extended"
+do
+       echo "Running with target mode: ${FORMAT}"
+       # Create one namespace and two interfaces
+       set_network
+       # Create a dynamic target for netconsole
+       create_dynamic_target "${FORMAT}"
+       # Only set userdata for extended format
+       if [ "$FORMAT" == "extended" ]
+       then
+               # Set userdata "key" with the "value" value
+               set_user_data
+       fi
+       # Listed for netconsole port inside the namespace and destination interface
+       listen_port_and_save_to "${OUTPUT_FILE}" &
+       # Wait for socat to start and listen to the port.
+       wait_local_port_listen "${NAMESPACE}" "${PORT}" udp
+       # Send the message
+       echo "${MSG}: ${TARGET}" > /dev/kmsg
+       # Wait until socat saves the file to disk
+       busywait "${BUSYWAIT_TIMEOUT}" test -s "${OUTPUT_FILE}"
+
+       # Make sure the message was received in the dst part
+       # and exit
+       validate_result "${OUTPUT_FILE}" "${FORMAT}"
+       cleanup
+done
+
+trap - EXIT
 exit "${ksft_pass}"