| #!/bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| |
| # This test ensures directed broadcast routes use dst hint mechanism |
| |
| source lib.sh |
| |
| CLIENT_IP4="192.168.0.1" |
| SERVER_IP4="192.168.0.2" |
| BROADCAST_ADDRESS="192.168.0.255" |
| |
| setup() { |
| setup_ns CLIENT_NS SERVER_NS |
| |
| ip -net "${SERVER_NS}" link add link1 type veth peer name link0 netns "${CLIENT_NS}" |
| |
| ip -net "${CLIENT_NS}" link set link0 up |
| ip -net "${CLIENT_NS}" addr add "${CLIENT_IP4}/24" dev link0 |
| |
| ip -net "${SERVER_NS}" link set link1 up |
| ip -net "${SERVER_NS}" addr add "${SERVER_IP4}/24" dev link1 |
| |
| ip netns exec "${CLIENT_NS}" ethtool -K link0 tcp-segmentation-offload off |
| ip netns exec "${SERVER_NS}" sh -c "echo 500000000 > /sys/class/net/link1/gro_flush_timeout" |
| ip netns exec "${SERVER_NS}" sh -c "echo 1 > /sys/class/net/link1/napi_defer_hard_irqs" |
| ip netns exec "${SERVER_NS}" ethtool -K link1 generic-receive-offload on |
| } |
| |
| cleanup() { |
| ip -net "${SERVER_NS}" link del link1 |
| cleanup_ns "${CLIENT_NS}" "${SERVER_NS}" |
| } |
| |
| directed_bcast_hint_test() |
| { |
| local rc=0 |
| |
| echo "Testing for directed broadcast route hint" |
| |
| orig_in_brd=$(ip netns exec "${SERVER_NS}" lnstat -j -i1 -c1 | jq '.in_brd') |
| ip netns exec "${CLIENT_NS}" mausezahn link0 -a own -b bcast -A "${CLIENT_IP4}" \ |
| -B "${BROADCAST_ADDRESS}" -c1 -t tcp "sp=1-100,dp=1234,s=1,a=0" -p 5 -q |
| sleep 1 |
| new_in_brd=$(ip netns exec "${SERVER_NS}" lnstat -j -i1 -c1 | jq '.in_brd') |
| |
| res=$(echo "${new_in_brd} - ${orig_in_brd}" | bc) |
| |
| if [ "${res}" -lt 100 ]; then |
| echo "[ OK ]" |
| rc="${ksft_pass}" |
| else |
| echo "[FAIL] expected in_brd to be under 100, got ${res}" |
| rc="${ksft_fail}" |
| fi |
| |
| return "${rc}" |
| } |
| |
| if [ ! -x "$(command -v mausezahn)" ]; then |
| echo "SKIP: Could not run test without mausezahn tool" |
| exit "${ksft_skip}" |
| fi |
| |
| if [ ! -x "$(command -v jq)" ]; then |
| echo "SKIP: Could not run test without jq tool" |
| exit "${ksft_skip}" |
| fi |
| |
| if [ ! -x "$(command -v bc)" ]; then |
| echo "SKIP: Could not run test without bc tool" |
| exit "${ksft_skip}" |
| fi |
| |
| trap cleanup EXIT |
| |
| setup |
| |
| directed_bcast_hint_test |
| exit $? |