xref: /linux/tools/testing/selftests/drivers/net/team/propagation.sh (revision 1b98f357dadd6ea613a435fbaef1a5dd7b35fd21)
1*f792709eSStanislav Fomichev#!/bin/bash
2*f792709eSStanislav Fomichev# SPDX-License-Identifier: GPL-2.0
3*f792709eSStanislav Fomichev
4*f792709eSStanislav Fomichevset -e
5*f792709eSStanislav Fomichev
6*f792709eSStanislav FomichevNSIM_LRO_ID=$((256 + RANDOM % 256))
7*f792709eSStanislav FomichevNSIM_LRO_SYS=/sys/bus/netdevsim/devices/netdevsim$NSIM_LRO_ID
8*f792709eSStanislav Fomichev
9*f792709eSStanislav FomichevNSIM_DEV_SYS_NEW=/sys/bus/netdevsim/new_device
10*f792709eSStanislav FomichevNSIM_DEV_SYS_DEL=/sys/bus/netdevsim/del_device
11*f792709eSStanislav Fomichev
12*f792709eSStanislav Fomichevcleanup()
13*f792709eSStanislav Fomichev{
14*f792709eSStanislav Fomichev	set +e
15*f792709eSStanislav Fomichev	ip link del dummyteam &>/dev/null
16*f792709eSStanislav Fomichev	ip link del team0 &>/dev/null
17*f792709eSStanislav Fomichev	echo $NSIM_LRO_ID > $NSIM_DEV_SYS_DEL
18*f792709eSStanislav Fomichev	modprobe -r netdevsim
19*f792709eSStanislav Fomichev}
20*f792709eSStanislav Fomichev
21*f792709eSStanislav Fomichev# Trigger LRO propagation to the lower.
22*f792709eSStanislav Fomichev# https://lore.kernel.org/netdev/aBvOpkIoxcr9PfDg@mini-arch/
23*f792709eSStanislav Fomichevteam_lro()
24*f792709eSStanislav Fomichev{
25*f792709eSStanislav Fomichev	# using netdevsim because it supports NETIF_F_LRO
26*f792709eSStanislav Fomichev	NSIM_LRO_NAME=$(find $NSIM_LRO_SYS/net -maxdepth 1 -type d ! \
27*f792709eSStanislav Fomichev		-path $NSIM_LRO_SYS/net -exec basename {} \;)
28*f792709eSStanislav Fomichev
29*f792709eSStanislav Fomichev	ip link add name team0 type team
30*f792709eSStanislav Fomichev	ip link set $NSIM_LRO_NAME down
31*f792709eSStanislav Fomichev	ip link set dev $NSIM_LRO_NAME master team0
32*f792709eSStanislav Fomichev	ip link set team0 up
33*f792709eSStanislav Fomichev	ethtool -K team0 large-receive-offload off
34*f792709eSStanislav Fomichev
35*f792709eSStanislav Fomichev	ip link del team0
36*f792709eSStanislav Fomichev}
37*f792709eSStanislav Fomichev
38*f792709eSStanislav Fomichev# Trigger promisc propagation to the lower during IFLA_MASTER.
39*f792709eSStanislav Fomichev# https://lore.kernel.org/netdev/20250506032328.3003050-1-sdf@fomichev.me/
40*f792709eSStanislav Fomichevteam_promisc()
41*f792709eSStanislav Fomichev{
42*f792709eSStanislav Fomichev	ip link add name dummyteam type dummy
43*f792709eSStanislav Fomichev	ip link add name team0 type team
44*f792709eSStanislav Fomichev	ip link set dummyteam down
45*f792709eSStanislav Fomichev	ip link set team0 promisc on
46*f792709eSStanislav Fomichev	ip link set dev dummyteam master team0
47*f792709eSStanislav Fomichev	ip link set team0 up
48*f792709eSStanislav Fomichev
49*f792709eSStanislav Fomichev	ip link del team0
50*f792709eSStanislav Fomichev	ip link del dummyteam
51*f792709eSStanislav Fomichev}
52*f792709eSStanislav Fomichev
53*f792709eSStanislav Fomichev# Trigger promisc propagation to the lower via netif_change_flags (aka
54*f792709eSStanislav Fomichev# ndo_change_rx_flags).
55*f792709eSStanislav Fomichev# https://lore.kernel.org/netdev/20250514220319.3505158-1-stfomichev@gmail.com/
56*f792709eSStanislav Fomichevteam_change_flags()
57*f792709eSStanislav Fomichev{
58*f792709eSStanislav Fomichev	ip link add name dummyteam type dummy
59*f792709eSStanislav Fomichev	ip link add name team0 type team
60*f792709eSStanislav Fomichev	ip link set dummyteam down
61*f792709eSStanislav Fomichev	ip link set dev dummyteam master team0
62*f792709eSStanislav Fomichev	ip link set team0 up
63*f792709eSStanislav Fomichev	ip link set team0 promisc on
64*f792709eSStanislav Fomichev
65*f792709eSStanislav Fomichev	# Make sure we can add more L2 addresses without any issues.
66*f792709eSStanislav Fomichev	ip link add link team0 address 00:00:00:00:00:01 team0.1 type macvlan
67*f792709eSStanislav Fomichev	ip link set team0.1 up
68*f792709eSStanislav Fomichev
69*f792709eSStanislav Fomichev	ip link del team0.1
70*f792709eSStanislav Fomichev	ip link del team0
71*f792709eSStanislav Fomichev	ip link del dummyteam
72*f792709eSStanislav Fomichev}
73*f792709eSStanislav Fomichev
74*f792709eSStanislav Fomichevtrap cleanup EXIT
75*f792709eSStanislav Fomichevmodprobe netdevsim || :
76*f792709eSStanislav Fomichevecho $NSIM_LRO_ID > $NSIM_DEV_SYS_NEW
77*f792709eSStanislav Fomichevudevadm settle
78*f792709eSStanislav Fomichevteam_lro
79*f792709eSStanislav Fomichevteam_promisc
80*f792709eSStanislav Fomichevteam_change_flags
81