| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- #!/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
|