brintos

brintos / linux-shallow public Read only

0
0
Text · 2.7 KiB · 2070b57 Raw
121 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4readonly FLUSH_PATH="/sys/class/net/${dev}/gro_flush_timeout"5readonly IRQ_PATH="/sys/class/net/${dev}/napi_defer_hard_irqs"6readonly FLUSH_TIMEOUT="$(< ${FLUSH_PATH})"7readonly HARD_IRQS="$(< ${IRQ_PATH})"8readonly server_ns=$(mktemp -u server-XXXXXXXX)9readonly client_ns=$(mktemp -u client-XXXXXXXX)10 11netdev_check_for_carrier() {12	local -r dev="$1"13 14	for i in {1..5}; do15		carrier="$(cat /sys/class/net/${dev}/carrier)"16		if [[ "${carrier}" -ne 1 ]] ; then17			echo "carrier not ready yet..." >&218			sleep 119		else20			echo "carrier ready" >&221			break22		fi23	done24	echo "${carrier}"25}26 27# Assumes that there is no existing ipvlan device on the physical device28setup_loopback_environment() {29	local dev="$1"30 31	# Fail hard if cannot turn on loopback mode for current NIC32	ethtool -K "${dev}" loopback on || exit 133	sleep 134 35	# Check for the carrier36	carrier=$(netdev_check_for_carrier ${dev})37	if [[ "${carrier}" -ne 1 ]] ; then38		echo "setup_loopback_environment failed"39		exit 140	fi41}42 43setup_macvlan_ns(){44	local -r link_dev="$1"45	local -r ns_name="$2"46	local -r ns_dev="$3"47	local -r ns_mac="$4"48	local -r addr="$5"49 50	ip link add link "${link_dev}" dev "${ns_dev}" \51		address "${ns_mac}" type macvlan52	exit_code=$?53	if [[ "${exit_code}" -ne 0 ]]; then54		echo "setup_macvlan_ns failed"55		exit $exit_code56	fi57 58	[[ -e /var/run/netns/"${ns_name}" ]] || ip netns add "${ns_name}"59	ip link set dev "${ns_dev}" netns "${ns_name}"60	ip -netns "${ns_name}" link set dev "${ns_dev}" up61	if [[ -n "${addr}" ]]; then62		ip -netns "${ns_name}" addr add dev "${ns_dev}" "${addr}"63	fi64 65	sleep 166}67 68cleanup_macvlan_ns(){69	while (( $# >= 2 )); do70		ns_name="$1"71		ns_dev="$2"72		ip -netns "${ns_name}" link del dev "${ns_dev}"73		ip netns del "${ns_name}"74		shift 275	done76}77 78cleanup_loopback(){79	local -r dev="$1"80 81	ethtool -K "${dev}" loopback off82	sleep 183 84	# Check for the carrier85	carrier=$(netdev_check_for_carrier ${dev})86	if [[ "${carrier}" -ne 1 ]] ; then87		echo "setup_loopback_environment failed"88		exit 189	fi90}91 92setup_interrupt() {93	# Use timer on  host to trigger the network stack94	# Also disable device interrupt to not depend on NIC interrupt95	# Reduce test flakiness caused by unexpected interrupts96	echo 100000 >"${FLUSH_PATH}"97	echo 50 >"${IRQ_PATH}"98}99 100setup_ns() {101	# Set up server_ns namespace and client_ns namespace102	setup_macvlan_ns "${dev}" ${server_ns} server "${SERVER_MAC}"103	setup_macvlan_ns "${dev}" ${client_ns} client "${CLIENT_MAC}"104}105 106cleanup_ns() {107	cleanup_macvlan_ns ${server_ns} server ${client_ns} client108}109 110setup() {111	setup_loopback_environment "${dev}"112	setup_interrupt113}114 115cleanup() {116	cleanup_loopback "${dev}"117 118	echo "${FLUSH_TIMEOUT}" >"${FLUSH_PATH}"119	echo "${HARD_IRQS}" >"${IRQ_PATH}"120}121