1*c2377f17SHangbin Liu#!/bin/bash 2*c2377f17SHangbin Liu# SPDX-License-Identifier: GPL-2.0 3*c2377f17SHangbin Liu# 4*c2377f17SHangbin Liu# Testing if bond lacp per port priority works 5*c2377f17SHangbin Liu# 6*c2377f17SHangbin Liu# Switch (s_ns) Backup Switch (b_ns) 7*c2377f17SHangbin Liu# +-------------------------+ +-------------------------+ 8*c2377f17SHangbin Liu# | bond0 | | bond0 | 9*c2377f17SHangbin Liu# | + | | + | 10*c2377f17SHangbin Liu# | eth0 | eth1 | | eth0 | eth1 | 11*c2377f17SHangbin Liu# | +---+---+ | | +---+---+ | 12*c2377f17SHangbin Liu# | | | | | | | | 13*c2377f17SHangbin Liu# +-------------------------+ +-------------------------+ 14*c2377f17SHangbin Liu# | | | | 15*c2377f17SHangbin Liu# +-----------------------------------------------------+ 16*c2377f17SHangbin Liu# | | | | | | 17*c2377f17SHangbin Liu# | +-------+---------+---------+-------+ | 18*c2377f17SHangbin Liu# | eth0 eth1 | eth2 eth3 | 19*c2377f17SHangbin Liu# | + | 20*c2377f17SHangbin Liu# | bond0 | 21*c2377f17SHangbin Liu# +-----------------------------------------------------+ 22*c2377f17SHangbin Liu# Client (c_ns) 23*c2377f17SHangbin Liu 24*c2377f17SHangbin Liulib_dir=$(dirname "$0") 25*c2377f17SHangbin Liu# shellcheck disable=SC1091 26*c2377f17SHangbin Liusource "$lib_dir"/../../../net/lib.sh 27*c2377f17SHangbin Liu 28*c2377f17SHangbin Liusetup_links() 29*c2377f17SHangbin Liu{ 30*c2377f17SHangbin Liu # shellcheck disable=SC2154 31*c2377f17SHangbin Liu ip -n "${c_ns}" link add eth0 type veth peer name eth0 netns "${s_ns}" 32*c2377f17SHangbin Liu ip -n "${c_ns}" link add eth1 type veth peer name eth1 netns "${s_ns}" 33*c2377f17SHangbin Liu # shellcheck disable=SC2154 34*c2377f17SHangbin Liu ip -n "${c_ns}" link add eth2 type veth peer name eth0 netns "${b_ns}" 35*c2377f17SHangbin Liu ip -n "${c_ns}" link add eth3 type veth peer name eth1 netns "${b_ns}" 36*c2377f17SHangbin Liu 37*c2377f17SHangbin Liu ip -n "${c_ns}" link add bond0 type bond mode 802.3ad miimon 100 \ 38*c2377f17SHangbin Liu lacp_rate fast ad_select actor_port_prio 39*c2377f17SHangbin Liu ip -n "${s_ns}" link add bond0 type bond mode 802.3ad miimon 100 \ 40*c2377f17SHangbin Liu lacp_rate fast 41*c2377f17SHangbin Liu ip -n "${b_ns}" link add bond0 type bond mode 802.3ad miimon 100 \ 42*c2377f17SHangbin Liu lacp_rate fast 43*c2377f17SHangbin Liu 44*c2377f17SHangbin Liu ip -n "${c_ns}" link set eth0 master bond0 45*c2377f17SHangbin Liu ip -n "${c_ns}" link set eth1 master bond0 46*c2377f17SHangbin Liu ip -n "${c_ns}" link set eth2 master bond0 47*c2377f17SHangbin Liu ip -n "${c_ns}" link set eth3 master bond0 48*c2377f17SHangbin Liu ip -n "${s_ns}" link set eth0 master bond0 49*c2377f17SHangbin Liu ip -n "${s_ns}" link set eth1 master bond0 50*c2377f17SHangbin Liu ip -n "${b_ns}" link set eth0 master bond0 51*c2377f17SHangbin Liu ip -n "${b_ns}" link set eth1 master bond0 52*c2377f17SHangbin Liu 53*c2377f17SHangbin Liu ip -n "${c_ns}" link set bond0 up 54*c2377f17SHangbin Liu ip -n "${s_ns}" link set bond0 up 55*c2377f17SHangbin Liu ip -n "${b_ns}" link set bond0 up 56*c2377f17SHangbin Liu} 57*c2377f17SHangbin Liu 58*c2377f17SHangbin Liutest_port_prio_setting() 59*c2377f17SHangbin Liu{ 60*c2377f17SHangbin Liu RET=0 61*c2377f17SHangbin Liu ip -n "${c_ns}" link set eth0 type bond_slave actor_port_prio 1000 62*c2377f17SHangbin Liu prio=$(cmd_jq "ip -n ${c_ns} -d -j link show eth0" \ 63*c2377f17SHangbin Liu ".[].linkinfo.info_slave_data.actor_port_prio") 64*c2377f17SHangbin Liu [ "$prio" -ne 1000 ] && RET=1 65*c2377f17SHangbin Liu ip -n "${c_ns}" link set eth2 type bond_slave actor_port_prio 10 66*c2377f17SHangbin Liu prio=$(cmd_jq "ip -n ${c_ns} -d -j link show eth2" \ 67*c2377f17SHangbin Liu ".[].linkinfo.info_slave_data.actor_port_prio") 68*c2377f17SHangbin Liu [ "$prio" -ne 10 ] && RET=1 69*c2377f17SHangbin Liu} 70*c2377f17SHangbin Liu 71*c2377f17SHangbin Liutest_agg_reselect() 72*c2377f17SHangbin Liu{ 73*c2377f17SHangbin Liu local bond_agg_id slave_agg_id 74*c2377f17SHangbin Liu local expect_slave="$1" 75*c2377f17SHangbin Liu RET=0 76*c2377f17SHangbin Liu 77*c2377f17SHangbin Liu # Trigger link state change to reselect the aggregator 78*c2377f17SHangbin Liu ip -n "${c_ns}" link set eth1 down 79*c2377f17SHangbin Liu sleep 0.5 80*c2377f17SHangbin Liu ip -n "${c_ns}" link set eth1 up 81*c2377f17SHangbin Liu sleep 0.5 82*c2377f17SHangbin Liu 83*c2377f17SHangbin Liu bond_agg_id=$(cmd_jq "ip -n ${c_ns} -d -j link show bond0" \ 84*c2377f17SHangbin Liu ".[].linkinfo.info_data.ad_info.aggregator") 85*c2377f17SHangbin Liu slave_agg_id=$(cmd_jq "ip -n ${c_ns} -d -j link show $expect_slave" \ 86*c2377f17SHangbin Liu ".[].linkinfo.info_slave_data.ad_aggregator_id") 87*c2377f17SHangbin Liu # shellcheck disable=SC2034 88*c2377f17SHangbin Liu [ "${bond_agg_id}" -ne "${slave_agg_id}" ] && \ 89*c2377f17SHangbin Liu RET=1 90*c2377f17SHangbin Liu} 91*c2377f17SHangbin Liu 92*c2377f17SHangbin Liutrap cleanup_all_ns EXIT 93*c2377f17SHangbin Liusetup_ns c_ns s_ns b_ns 94*c2377f17SHangbin Liusetup_links 95*c2377f17SHangbin Liu 96*c2377f17SHangbin Liutest_port_prio_setting 97*c2377f17SHangbin Liulog_test "bond 802.3ad" "actor_port_prio setting" 98*c2377f17SHangbin Liu 99*c2377f17SHangbin Liutest_agg_reselect eth0 100*c2377f17SHangbin Liulog_test "bond 802.3ad" "actor_port_prio select" 101*c2377f17SHangbin Liu 102*c2377f17SHangbin Liu# Change the actor port prio and re-test 103*c2377f17SHangbin Liuip -n "${c_ns}" link set eth0 type bond_slave actor_port_prio 10 104*c2377f17SHangbin Liuip -n "${c_ns}" link set eth2 type bond_slave actor_port_prio 1000 105*c2377f17SHangbin Liutest_agg_reselect eth2 106*c2377f17SHangbin Liulog_test "bond 802.3ad" "actor_port_prio switch" 107*c2377f17SHangbin Liu 108*c2377f17SHangbin Liuexit "${EXIT_STATUS}" 109