File Index
Files and directories
Sign in
FILE

options.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/drivers/net/team/options.sh BASH
  1#!/bin/bash
  2# SPDX-License-Identifier: GPL-2.0
  3
  4# These tests verify basic set and get functionality of the team
  5# driver options over netlink.
  6
  7# Run in private netns.
  8test_dir="$(dirname "$0")"
  9if [[ $# -eq 0 ]]; then
 10        "${test_dir}"/../../../net/in_netns.sh "$0" __subprocess
 11        exit $?
 12fi
 13
 14ALL_TESTS="
 15        team_test_options
 16"
 17
 18source "${test_dir}/../../../net/lib.sh"
 19
 20TEAM_PORT="team0"
 21MEMBER_PORT="dummy0"
 22
 23setup()
 24{
 25        ip link add name "${MEMBER_PORT}" type dummy
 26        ip link add name "${TEAM_PORT}" type team
 27}
 28
 29get_and_check_value()
 30{
 31        local option_name="$1"
 32        local expected_value="$2"
 33        local port_flag="$3"
 34
 35        local value_from_get
 36
 37        if ! value_from_get=$(teamnl "${TEAM_PORT}" getoption "${option_name}" \
 38                        "${port_flag}"); then
 39                echo "Could not get option '${option_name}'" >&2
 40                return 1
 41        fi
 42
 43        if [[ "${value_from_get}" != "${expected_value}" ]]; then
 44                echo "Incorrect value for option '${option_name}'" >&2
 45                echo "get (${value_from_get}) != set (${expected_value})" >&2
 46                return 1
 47        fi
 48}
 49
 50set_and_check_get()
 51{
 52        local option_name="$1"
 53        local option_value="$2"
 54        local port_flag="$3"
 55
 56        local value_from_get
 57
 58        if ! teamnl "${TEAM_PORT}" setoption "${option_name}" \
 59                        "${option_value}" "${port_flag}"; then
 60                echo "'setoption ${option_name} ${option_value}' failed" >&2
 61                return 1
 62        fi
 63
 64        get_and_check_value "${option_name}" "${option_value}" "${port_flag}"
 65        return $?
 66}
 67
 68# Get a "port flag" to pass to the `teamnl` command.
 69# E.g. $1="dummy0" -> "port=dummy0",
 70#      $1=""       -> ""
 71get_port_flag()
 72{
 73        local port_name="$1"
 74
 75        if [[ -n "${port_name}" ]]; then
 76                echo "--port=${port_name}"
 77        fi
 78}
 79
 80attach_port_if_specified()
 81{
 82        local port_name="$1"
 83
 84        if [[ -n "${port_name}" ]]; then
 85                ip link set dev "${port_name}" master "${TEAM_PORT}"
 86                return $?
 87        fi
 88}
 89
 90detach_port_if_specified()
 91{
 92        local port_name="$1"
 93
 94        if [[ -n "${port_name}" ]]; then
 95                ip link set dev "${port_name}" nomaster
 96                return $?
 97        fi
 98}
 99
100# Test that an option's get value matches its set value.
101# Globals:
102#   RET - Used by testing infra like `check_err`.
103#   EXIT_STATUS - Used by `log_test` for whole script exit value.
104# Arguments:
105#   option_name - The name of the option.
106#   value_1 - The first value to try setting.
107#   value_2 - The second value to try setting.
108#   port_name - The (optional) name of the attached port.
109team_test_option()
110{
111        local option_name="$1"
112        local value_1="$2"
113        local value_2="$3"
114        local possible_values="$2 $3 $2"
115        local port_name="$4"
116        local port_flag
117
118        RET=0
119
120        echo "Setting '${option_name}' to '${value_1}' and '${value_2}'"
121
122        attach_port_if_specified "${port_name}"
123        check_err $? "Couldn't attach ${port_name} to master"
124        port_flag=$(get_port_flag "${port_name}")
125
126        # Set and get both possible values.
127        for value in ${possible_values}; do
128                set_and_check_get "${option_name}" "${value}" "${port_flag}"
129                check_err $? "Failed to set '${option_name}' to '${value}'"
130        done
131
132        detach_port_if_specified "${port_name}"
133        check_err $? "Couldn't detach ${port_name} from its master"
134
135        log_test "Set + Get '${option_name}' test"
136}
137
138# Test that getting a non-existant option fails.
139# Globals:
140#   RET - Used by testing infra like `check_err`.
141#   EXIT_STATUS - Used by `log_test` for whole script exit value.
142# Arguments:
143#   option_name - The name of the option.
144#   port_name - The (optional) name of the attached port.
145team_test_get_option_fails()
146{
147        local option_name="$1"
148        local port_name="$2"
149        local port_flag
150
151        RET=0
152
153        attach_port_if_specified "${port_name}"
154        check_err $? "Couldn't attach ${port_name} to master"
155        port_flag=$(get_port_flag "${port_name}")
156
157        # Just confirm that getting the value fails.
158        teamnl "${TEAM_PORT}" getoption "${option_name}" "${port_flag}"
159        check_fail $? "Shouldn't be able to get option '${option_name}'"
160
161        detach_port_if_specified "${port_name}"
162
163        log_test "Get '${option_name}' fails"
164}
165
166team_test_options()
167{
168        # Wrong option name behavior.
169        team_test_get_option_fails fake_option1
170        team_test_get_option_fails fake_option2 "${MEMBER_PORT}"
171
172        # Correct set and get behavior.
173        team_test_option mode activebackup loadbalance
174        team_test_option notify_peers_count 0 5
175        team_test_option notify_peers_interval 0 5
176        team_test_option mcast_rejoin_count 0 5
177        team_test_option mcast_rejoin_interval 0 5
178        team_test_option enabled true false "${MEMBER_PORT}"
179        team_test_option user_linkup true false "${MEMBER_PORT}"
180        team_test_option user_linkup_enabled true false "${MEMBER_PORT}"
181        team_test_option priority 10 20 "${MEMBER_PORT}"
182        team_test_option queue_id 0 1 "${MEMBER_PORT}"
183}
184
185require_command teamnl
186setup
187tests_run
188exit "${EXIT_STATUS}"
~/ Read-only file preview.