#!/bin/bash # SPDX-License-Identifier: GPL-2.0 set -e NSIM_LRO_ID=$((256 + RANDOM % 256)) NSIM_LRO_SYS=/sys/bus/netdevsim/devices/netdevsim$NSIM_LRO_ID NSIM_DEV_SYS_NEW=/sys/bus/netdevsim/new_device NSIM_DEV_SYS_DEL=/sys/bus/netdevsim/del_device cleanup() { set +e ip link del dummyteam &>/dev/null ip link del team0 &>/dev/null echo $NSIM_LRO_ID > $NSIM_DEV_SYS_DEL modprobe -r netdevsim } # Trigger LRO propagation to the lower. # https://lore.kernel.org/netdev/aBvOpkIoxcr9PfDg@mini-arch/ team_lro() { # using netdevsim because it supports NETIF_F_LRO NSIM_LRO_NAME=$(find $NSIM_LRO_SYS/net -maxdepth 1 -type d ! \ -path $NSIM_LRO_SYS/net -exec basename {} \;) ip link add name team0 type team ip link set $NSIM_LRO_NAME down ip link set dev $NSIM_LRO_NAME master team0 ip link set team0 up ethtool -K team0 large-receive-offload off ip link del team0 } # Trigger promisc propagation to the lower during IFLA_MASTER. # https://lore.kernel.org/netdev/20250506032328.3003050-1-sdf@fomichev.me/ team_promisc() { ip link add name dummyteam type dummy ip link add name team0 type team ip link set dummyteam down ip link set team0 promisc on ip link set dev dummyteam master team0 ip link set team0 up ip link del team0 ip link del dummyteam } # Trigger promisc propagation to the lower via netif_change_flags (aka # ndo_change_rx_flags). # https://lore.kernel.org/netdev/20250514220319.3505158-1-stfomichev@gmail.com/ team_change_flags() { ip link add name dummyteam type dummy ip link add name team0 type team ip link set dummyteam down ip link set dev dummyteam master team0 ip link set team0 up ip link set team0 promisc on # Make sure we can add more L2 addresses without any issues. ip link add link team0 address 00:00:00:00:00:01 team0.1 type macvlan ip link set team0.1 up ip link del team0.1 ip link del team0 ip link del dummyteam } trap cleanup EXIT modprobe netdevsim || : echo $NSIM_LRO_ID > $NSIM_DEV_SYS_NEW udevadm settle team_lro team_promisc team_change_flags