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