1*963c94c9SToke Høiland-Jørgensen#!/bin/bash 2*963c94c9SToke Høiland-Jørgensen# SPDX-License-Identifier: GPL-2.0 3*963c94c9SToke Høiland-Jørgensen 4*963c94c9SToke Høiland-Jørgensensource lib.sh 5*963c94c9SToke Høiland-Jørgensenset -o pipefail 6*963c94c9SToke Høiland-Jørgensen 7*963c94c9SToke Høiland-JørgensenNSIM_ADDR=2025 8*963c94c9SToke Høiland-JørgensenTEST_ADDR="d0:be:d0:be:d0:00" 9*963c94c9SToke Høiland-Jørgensen 10*963c94c9SToke Høiland-JørgensenRET_CODE=0 11*963c94c9SToke Høiland-Jørgensen 12*963c94c9SToke Høiland-Jørgensencleanup() { 13*963c94c9SToke Høiland-Jørgensen cleanup_netdevsim "$NSIM_ADDR" 14*963c94c9SToke Høiland-Jørgensen cleanup_ns "$NS" 15*963c94c9SToke Høiland-Jørgensen} 16*963c94c9SToke Høiland-Jørgensen 17*963c94c9SToke Høiland-Jørgensentrap cleanup EXIT 18*963c94c9SToke Høiland-Jørgensen 19*963c94c9SToke Høiland-Jørgensenfail() { 20*963c94c9SToke Høiland-Jørgensen echo "ERROR: ${1:-unexpected return code} (ret: $_)" >&2 21*963c94c9SToke Høiland-Jørgensen RET_CODE=1 22*963c94c9SToke Høiland-Jørgensen} 23*963c94c9SToke Høiland-Jørgensen 24*963c94c9SToke Høiland-Jørgensenget_addr() 25*963c94c9SToke Høiland-Jørgensen{ 26*963c94c9SToke Høiland-Jørgensen local type="$1" 27*963c94c9SToke Høiland-Jørgensen local dev="$2" 28*963c94c9SToke Høiland-Jørgensen local ns="$3" 29*963c94c9SToke Høiland-Jørgensen 30*963c94c9SToke Høiland-Jørgensen ip -j -n "$ns" link show dev "$dev" | jq -er ".[0].$type" 31*963c94c9SToke Høiland-Jørgensen} 32*963c94c9SToke Høiland-Jørgensen 33*963c94c9SToke Høiland-Jørgensensetup_ns NS 34*963c94c9SToke Høiland-Jørgensen 35*963c94c9SToke Høiland-Jørgensennsim=$(create_netdevsim $NSIM_ADDR "$NS") 36*963c94c9SToke Høiland-Jørgensen 37*963c94c9SToke Høiland-Jørgensenget_addr address "$nsim" "$NS" >/dev/null || fail "Couldn't get ether addr" 38*963c94c9SToke Høiland-Jørgensenget_addr broadcast "$nsim" "$NS" >/dev/null || fail "Couldn't get brd addr" 39*963c94c9SToke Høiland-Jørgensenget_addr permaddr "$nsim" "$NS" >/dev/null && fail "Found perm_addr without setting it" 40*963c94c9SToke Høiland-Jørgensen 41*963c94c9SToke Høiland-Jørgensenip -n "$NS" link set dev "$nsim" address "$TEST_ADDR" 42*963c94c9SToke Høiland-Jørgensenip -n "$NS" link set dev "$nsim" brd "$TEST_ADDR" 43*963c94c9SToke Høiland-Jørgensen 44*963c94c9SToke Høiland-Jørgensen[[ "$(get_addr address "$nsim" "$NS")" == "$TEST_ADDR" ]] || fail "Couldn't set ether addr" 45*963c94c9SToke Høiland-Jørgensen[[ "$(get_addr broadcast "$nsim" "$NS")" == "$TEST_ADDR" ]] || fail "Couldn't set brd addr" 46*963c94c9SToke Høiland-Jørgensen 47*963c94c9SToke Høiland-Jørgensenif create_netdevsim_port "$NSIM_ADDR" "$NS" 2 "FF:FF:FF:FF:FF:FF" 2>/dev/null; then 48*963c94c9SToke Høiland-Jørgensen fail "Created netdevsim with broadcast permaddr" 49*963c94c9SToke Høiland-Jørgensenfi 50*963c94c9SToke Høiland-Jørgensen 51*963c94c9SToke Høiland-Jørgensennsim_port=$(create_netdevsim_port "$NSIM_ADDR" "$NS" 2 "$TEST_ADDR") 52*963c94c9SToke Høiland-Jørgensen 53*963c94c9SToke Høiland-Jørgensenget_addr address "$nsim_port" "$NS" >/dev/null || fail "Couldn't get ether addr" 54*963c94c9SToke Høiland-Jørgensenget_addr broadcast "$nsim_port" "$NS" >/dev/null || fail "Couldn't get brd addr" 55*963c94c9SToke Høiland-Jørgensen[[ "$(get_addr permaddr "$nsim_port" "$NS")" == "$TEST_ADDR" ]] || fail "Couldn't get permaddr" 56*963c94c9SToke Høiland-Jørgensen 57*963c94c9SToke Høiland-Jørgensencleanup_netdevsim "$NSIM_ADDR" "$NS" 58*963c94c9SToke Høiland-Jørgensen 59*963c94c9SToke Høiland-Jørgensenexit $RET_CODE 60