cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

setup_loopback.sh (2654B)


      1#!/bin/bash
      2# SPDX-License-Identifier: GPL-2.0
      3
      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})"
      8
      9netdev_check_for_carrier() {
     10	local -r dev="$1"
     11
     12	for i in {1..5}; do
     13		carrier="$(cat /sys/class/net/${dev}/carrier)"
     14		if [[ "${carrier}" -ne 1 ]] ; then
     15			echo "carrier not ready yet..." >&2
     16			sleep 1
     17		else
     18			echo "carrier ready" >&2
     19			break
     20		fi
     21	done
     22	echo "${carrier}"
     23}
     24
     25# Assumes that there is no existing ipvlan device on the physical device
     26setup_loopback_environment() {
     27	local dev="$1"
     28
     29	# Fail hard if cannot turn on loopback mode for current NIC
     30	ethtool -K "${dev}" loopback on || exit 1
     31	sleep 1
     32
     33	# Check for the carrier
     34	carrier=$(netdev_check_for_carrier ${dev})
     35	if [[ "${carrier}" -ne 1 ]] ; then
     36		echo "setup_loopback_environment failed"
     37		exit 1
     38	fi
     39}
     40
     41setup_macvlan_ns(){
     42	local -r link_dev="$1"
     43	local -r ns_name="$2"
     44	local -r ns_dev="$3"
     45	local -r ns_mac="$4"
     46	local -r addr="$5"
     47
     48	ip link add link "${link_dev}" dev "${ns_dev}" \
     49		address "${ns_mac}" type macvlan
     50	exit_code=$?
     51	if [[ "${exit_code}" -ne 0 ]]; then
     52		echo "setup_macvlan_ns failed"
     53		exit $exit_code
     54	fi
     55
     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}"
     61	fi
     62
     63	sleep 1
     64}
     65
     66cleanup_macvlan_ns(){
     67	while (( $# >= 2 )); do
     68		ns_name="$1"
     69		ns_dev="$2"
     70		ip -netns "${ns_name}" link del dev "${ns_dev}"
     71		ip netns del "${ns_name}"
     72		shift 2
     73	done
     74}
     75
     76cleanup_loopback(){
     77	local -r dev="$1"
     78
     79	ethtool -K "${dev}" loopback off
     80	sleep 1
     81
     82	# Check for the carrier
     83	carrier=$(netdev_check_for_carrier ${dev})
     84	if [[ "${carrier}" -ne 1 ]] ; then
     85		echo "setup_loopback_environment failed"
     86		exit 1
     87	fi
     88}
     89
     90setup_interrupt() {
     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}"
     96}
     97
     98setup_ns() {
     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}"
    102}
    103
    104cleanup_ns() {
    105	cleanup_macvlan_ns server_ns server client_ns client
    106}
    107
    108setup() {
    109	setup_loopback_environment "${dev}"
    110	setup_interrupt
    111}
    112
    113cleanup() {
    114	cleanup_loopback "${dev}"
    115
    116	echo "${FLUSH_TIMEOUT}" >"${FLUSH_PATH}"
    117	echo "${HARD_IRQS}" >"${IRQ_PATH}"
    118}