1*9af771d2SPaolo Abeni#!/bin/bash
2*9af771d2SPaolo Abeni# SPDX-License-Identifier: GPL-2.0
3*9af771d2SPaolo Abeni
4*9af771d2SPaolo Abenisetup_veth_ns() {
5*9af771d2SPaolo Abeni	local -r link_dev="$1"
6*9af771d2SPaolo Abeni	local -r ns_name="$2"
7*9af771d2SPaolo Abeni	local -r ns_dev="$3"
8*9af771d2SPaolo Abeni	local -r ns_mac="$4"
9*9af771d2SPaolo Abeni
10*9af771d2SPaolo Abeni	[[ -e /var/run/netns/"${ns_name}" ]] || ip netns add "${ns_name}"
11*9af771d2SPaolo Abeni	echo 100000 > "/sys/class/net/${ns_dev}/gro_flush_timeout"
12*9af771d2SPaolo Abeni	ip link set dev "${ns_dev}" netns "${ns_name}" mtu 65535
13*9af771d2SPaolo Abeni	ip -netns "${ns_name}" link set dev "${ns_dev}" up
14*9af771d2SPaolo Abeni
15*9af771d2SPaolo Abeni	ip netns exec "${ns_name}" ethtool -K "${ns_dev}" gro on tso off
16*9af771d2SPaolo Abeni}
17*9af771d2SPaolo Abeni
18*9af771d2SPaolo Abenisetup_ns() {
19*9af771d2SPaolo Abeni	# Set up server_ns namespace and client_ns namespace
20*9af771d2SPaolo Abeni	ip link add name server type veth peer name client
21*9af771d2SPaolo Abeni
22*9af771d2SPaolo Abeni	setup_veth_ns "${dev}" server_ns server "${SERVER_MAC}"
23*9af771d2SPaolo Abeni	setup_veth_ns "${dev}" client_ns client "${CLIENT_MAC}"
24*9af771d2SPaolo Abeni}
25*9af771d2SPaolo Abeni
26*9af771d2SPaolo Abenicleanup_ns() {
27*9af771d2SPaolo Abeni	local ns_name
28*9af771d2SPaolo Abeni
29*9af771d2SPaolo Abeni	for ns_name in client_ns server_ns; do
30*9af771d2SPaolo Abeni		[[ -e /var/run/netns/"${ns_name}" ]] && ip netns del "${ns_name}"
31*9af771d2SPaolo Abeni	done
32*9af771d2SPaolo Abeni}
33*9af771d2SPaolo Abeni
34*9af771d2SPaolo Abenisetup() {
35*9af771d2SPaolo Abeni	# no global init setup step needed
36*9af771d2SPaolo Abeni	:
37*9af771d2SPaolo Abeni}
38*9af771d2SPaolo Abeni
39*9af771d2SPaolo Abenicleanup() {
40*9af771d2SPaolo Abeni	cleanup_ns
41*9af771d2SPaolo Abeni}
42