mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 06:04:44 +01:00
selftests: hsr: Add ping test for PRP
Add a selftest for PRP that performs a basic ping test on IPv4 and IPv6, over the plain PRP interface and a VLAN interface, similar to the existing ping test for HSR. The test first checks reachability of the other node, then checks for no loss and no duplicates. Signed-off-by: Felix Maurer <fmaurer@redhat.com> Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Link: https://patch.msgid.link/4a342189e842d7308d037da72af566729ee75834.1770299429.git.fmaurer@redhat.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
310d80b0f8
commit
c01a6c700f
2 changed files with 148 additions and 0 deletions
|
|
@ -5,6 +5,7 @@ top_srcdir = ../../../../..
|
|||
TEST_PROGS := \
|
||||
hsr_ping.sh \
|
||||
hsr_redbox.sh \
|
||||
prp_ping.sh \
|
||||
# end of TEST_PROGS
|
||||
|
||||
TEST_FILES += hsr_common.sh
|
||||
|
|
|
|||
147
tools/testing/selftests/net/hsr/prp_ping.sh
Executable file
147
tools/testing/selftests/net/hsr/prp_ping.sh
Executable file
|
|
@ -0,0 +1,147 @@
|
|||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
ipv6=true
|
||||
|
||||
source ./hsr_common.sh
|
||||
|
||||
optstring="h4"
|
||||
usage() {
|
||||
echo "Usage: $0 [OPTION]"
|
||||
echo -e "\t-4: IPv4 only: disable IPv6 tests (default: test both IPv4 and IPv6)"
|
||||
}
|
||||
|
||||
while getopts "$optstring" option;do
|
||||
case "$option" in
|
||||
"h")
|
||||
usage "$0"
|
||||
exit 0
|
||||
;;
|
||||
"4")
|
||||
ipv6=false
|
||||
;;
|
||||
"?")
|
||||
usage "$0"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
setup_prp_interfaces()
|
||||
{
|
||||
echo "INFO: Preparing interfaces for PRP"
|
||||
# Two PRP nodes, connected by two links (treated as LAN A and LAN B).
|
||||
#
|
||||
# vethA ----- vethA
|
||||
# prp1 prp2
|
||||
# vethB ----- vethB
|
||||
#
|
||||
# node1 node2
|
||||
|
||||
# Interfaces
|
||||
# shellcheck disable=SC2154 # variables assigned by setup_ns
|
||||
ip link add vethA netns "$node1" type veth peer name vethA netns "$node2"
|
||||
ip link add vethB netns "$node1" type veth peer name vethB netns "$node2"
|
||||
|
||||
# MAC addresses will be copied from LAN A interface
|
||||
ip -net "$node1" link set address 00:11:22:00:00:01 dev vethA
|
||||
ip -net "$node2" link set address 00:11:22:00:00:02 dev vethA
|
||||
|
||||
# PRP
|
||||
ip -net "$node1" link add name prp1 type hsr \
|
||||
slave1 vethA slave2 vethB supervision 45 proto 1
|
||||
ip -net "$node2" link add name prp2 type hsr \
|
||||
slave1 vethA slave2 vethB supervision 45 proto 1
|
||||
|
||||
# IP addresses
|
||||
ip -net "$node1" addr add 100.64.0.1/24 dev prp1
|
||||
ip -net "$node1" addr add dead:beef:0::1/64 dev prp1 nodad
|
||||
ip -net "$node2" addr add 100.64.0.2/24 dev prp2
|
||||
ip -net "$node2" addr add dead:beef:0::2/64 dev prp2 nodad
|
||||
|
||||
# All links up
|
||||
ip -net "$node1" link set vethA up
|
||||
ip -net "$node1" link set vethB up
|
||||
ip -net "$node1" link set prp1 up
|
||||
|
||||
ip -net "$node2" link set vethA up
|
||||
ip -net "$node2" link set vethB up
|
||||
ip -net "$node2" link set prp2 up
|
||||
}
|
||||
|
||||
setup_vlan_interfaces()
|
||||
{
|
||||
# Interfaces
|
||||
ip -net "$node1" link add link prp1 name prp1.2 type vlan id 2
|
||||
ip -net "$node2" link add link prp2 name prp2.2 type vlan id 2
|
||||
|
||||
# IP addresses
|
||||
ip -net "$node1" addr add 100.64.2.1/24 dev prp1.2
|
||||
ip -net "$node1" addr add dead:beef:2::1/64 dev prp1.2 nodad
|
||||
|
||||
ip -net "$node2" addr add 100.64.2.2/24 dev prp2.2
|
||||
ip -net "$node2" addr add dead:beef:2::2/64 dev prp2.2 nodad
|
||||
|
||||
# All links up
|
||||
ip -net "$node1" link set prp1.2 up
|
||||
ip -net "$node2" link set prp2.2 up
|
||||
}
|
||||
|
||||
do_ping_tests()
|
||||
{
|
||||
local netid="$1"
|
||||
|
||||
echo "INFO: Initial validation ping"
|
||||
|
||||
do_ping "$node1" "100.64.$netid.2"
|
||||
do_ping "$node2" "100.64.$netid.1"
|
||||
stop_if_error "Initial validation failed on IPv4"
|
||||
|
||||
do_ping "$node1" "dead:beef:$netid::2"
|
||||
do_ping "$node2" "dead:beef:$netid::1"
|
||||
stop_if_error "Initial validation failed on IPv6"
|
||||
|
||||
echo "INFO: Longer ping test."
|
||||
|
||||
do_ping_long "$node1" "100.64.$netid.2"
|
||||
do_ping_long "$node2" "100.64.$netid.1"
|
||||
stop_if_error "Longer ping test failed on IPv4."
|
||||
|
||||
do_ping_long "$node1" "dead:beef:$netid::2"
|
||||
do_ping_long "$node2" "dead:beef:$netid::1"
|
||||
stop_if_error "Longer ping test failed on IPv6."
|
||||
}
|
||||
|
||||
run_ping_tests()
|
||||
{
|
||||
echo "INFO: Running ping tests"
|
||||
do_ping_tests 0
|
||||
}
|
||||
|
||||
run_vlan_ping_tests()
|
||||
{
|
||||
vlan_challenged_prp1=$(ip net exec "$node1" ethtool -k prp1 | \
|
||||
grep "vlan-challenged" | awk '{print $2}')
|
||||
vlan_challenged_prp2=$(ip net exec "$node2" ethtool -k prp2 | \
|
||||
grep "vlan-challenged" | awk '{print $2}')
|
||||
|
||||
if [[ "$vlan_challenged_prp1" = "off" || \
|
||||
"$vlan_challenged_prp2" = "off" ]]; then
|
||||
echo "INFO: Running VLAN ping tests"
|
||||
setup_vlan_interfaces
|
||||
do_ping_tests 2
|
||||
else
|
||||
echo "INFO: Not Running VLAN tests as the device does not support VLAN"
|
||||
fi
|
||||
}
|
||||
|
||||
check_prerequisites
|
||||
trap cleanup_all_ns EXIT
|
||||
|
||||
setup_ns node1 node2
|
||||
setup_prp_interfaces
|
||||
|
||||
run_ping_tests
|
||||
run_vlan_ping_tests
|
||||
|
||||
exit $ret
|
||||
Loading…
Add table
Add a link
Reference in a new issue