19af771d2SPaolo Abeni#!/bin/bash
29af771d2SPaolo Abeni# SPDX-License-Identifier: GPL-2.0
39af771d2SPaolo Abeni
49af771d2SPaolo Abenisetup_veth_ns() {
59af771d2SPaolo Abeni	local -r link_dev="$1"
69af771d2SPaolo Abeni	local -r ns_name="$2"
79af771d2SPaolo Abeni	local -r ns_dev="$3"
89af771d2SPaolo Abeni	local -r ns_mac="$4"
99af771d2SPaolo Abeni
109af771d2SPaolo Abeni	[[ -e /var/run/netns/"${ns_name}" ]] || ip netns add "${ns_name}"
11*2d0bfd36SPaolo Abeni	echo 1000000 > "/sys/class/net/${ns_dev}/gro_flush_timeout"
129af771d2SPaolo Abeni	ip link set dev "${ns_dev}" netns "${ns_name}" mtu 65535
139af771d2SPaolo Abeni	ip -netns "${ns_name}" link set dev "${ns_dev}" up
149af771d2SPaolo Abeni
159af771d2SPaolo Abeni	ip netns exec "${ns_name}" ethtool -K "${ns_dev}" gro on tso off
169af771d2SPaolo Abeni}
179af771d2SPaolo Abeni
189af771d2SPaolo Abenisetup_ns() {
199af771d2SPaolo Abeni	# Set up server_ns namespace and client_ns namespace
209af771d2SPaolo Abeni	ip link add name server type veth peer name client
219af771d2SPaolo Abeni
229af771d2SPaolo Abeni	setup_veth_ns "${dev}" server_ns server "${SERVER_MAC}"
239af771d2SPaolo Abeni	setup_veth_ns "${dev}" client_ns client "${CLIENT_MAC}"
249af771d2SPaolo Abeni}
259af771d2SPaolo Abeni
269af771d2SPaolo Abenicleanup_ns() {
279af771d2SPaolo Abeni	local ns_name
289af771d2SPaolo Abeni
299af771d2SPaolo Abeni	for ns_name in client_ns server_ns; do
309af771d2SPaolo Abeni		[[ -e /var/run/netns/"${ns_name}" ]] && ip netns del "${ns_name}"
319af771d2SPaolo Abeni	done
329af771d2SPaolo Abeni}
339af771d2SPaolo Abeni
349af771d2SPaolo Abenisetup() {
359af771d2SPaolo Abeni	# no global init setup step needed
369af771d2SPaolo Abeni	:
379af771d2SPaolo Abeni}
389af771d2SPaolo Abeni
399af771d2SPaolo Abenicleanup() {
409af771d2SPaolo Abeni	cleanup_ns
419af771d2SPaolo Abeni}
42