2 # SPDX-License-Identifier: GPL-2.0
4 readonly FLUSH_PATH="/sys/class/net/${dev}/gro_flush_timeout"
5 readonly IRQ_PATH="/sys/class/net/${dev}/napi_defer_hard_irqs"
6 readonly FLUSH_TIMEOUT="$(< ${FLUSH_PATH})"
7 readonly HARD_IRQS="$(< ${IRQ_PATH})"
9 netdev_check_for_carrier() {
13 carrier="$(cat /sys/class/net/${dev}/carrier)"
14 if [[ "${carrier}" -ne 1 ]] ; then
15 echo "carrier not ready yet..." >&2
18 echo "carrier ready" >&2
25 # Assumes that there is no existing ipvlan device on the physical device
26 setup_loopback_environment() {
29 # Fail hard if cannot turn on loopback mode for current NIC
30 ethtool -K "${dev}" loopback on || exit 1
33 # Check for the carrier
34 carrier=$(netdev_check_for_carrier ${dev})
35 if [[ "${carrier}" -ne 1 ]] ; then
36 echo "setup_loopback_environment failed"
42 local -r link_dev="$1"
48 ip link add link "${link_dev}" dev "${ns_dev}" \
49 address "${ns_mac}" type macvlan
51 if [[ "${exit_code}" -ne 0 ]]; then
52 echo "setup_macvlan_ns failed"
56 [[ -e /var/run/netns/"${ns_name}" ]] || ip netns add "${ns_name}"
57 ip link set dev "${ns_dev}" netns "${ns_name}"
58 ip -netns "${ns_name}" link set dev "${ns_dev}" up
59 if [[ -n "${addr}" ]]; then
60 ip -netns "${ns_name}" addr add dev "${ns_dev}" "${addr}"
67 while (( $# >= 2 )); do
70 ip -netns "${ns_name}" link del dev "${ns_dev}"
71 ip netns del "${ns_name}"
79 ethtool -K "${dev}" loopback off
82 # Check for the carrier
83 carrier=$(netdev_check_for_carrier ${dev})
84 if [[ "${carrier}" -ne 1 ]] ; then
85 echo "setup_loopback_environment failed"
91 # Use timer on host to trigger the network stack
92 # Also disable device interrupt to not depend on NIC interrupt
93 # Reduce test flakiness caused by unexpected interrupts
94 echo 100000 >"${FLUSH_PATH}"
95 echo 50 >"${IRQ_PATH}"
99 # Set up server_ns namespace and client_ns namespace
100 setup_macvlan_ns "${dev}" server_ns server "${SERVER_MAC}"
101 setup_macvlan_ns "${dev}" client_ns client "${CLIENT_MAC}"
105 cleanup_macvlan_ns server_ns server client_ns client
109 setup_loopback_environment "${dev}"
114 cleanup_loopback "${dev}"
116 echo "${FLUSH_TIMEOUT}" >"${FLUSH_PATH}"
117 echo "${HARD_IRQS}" >"${IRQ_PATH}"