1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4source lib.sh 5set -o pipefail 6 7DEV=dummy-dev0 8DEV2=dummy-dev1 9ALT_NAME=some-alt-name 10NSIM_ADDR=2025 11 12RET_CODE=0 13 14cleanup() { 15 cleanup_netdevsim $NSIM_ADDR 16 cleanup_ns $NS $test_ns 17} 18 19trap cleanup EXIT 20 21fail() { 22 echo "ERROR: ${1:-unexpected return code} (ret: $_)" >&2 23 RET_CODE=1 24} 25 26setup_ns NS test_ns 27 28# 29# Test basic move without a rename 30# Use netdevsim because it has extra asserts for notifiers. 31# 32 33nsim=$(create_netdevsim $NSIM_ADDR $NS) 34ip -netns $NS link set dev $nsim netns $test_ns || 35 fail "Can't perform a netns move" 36ip -netns $test_ns link show dev $nsim >> /dev/null || 37 fail "Device not found after move" 38cleanup_netdevsim $NSIM_ADDR 39 40# 41# Test move with a conflict 42# 43ip -netns $test_ns link add name $DEV type dummy 44ip -netns $NS link add name $DEV type dummy || fail 45ip -netns $NS link set dev $DEV netns $test_ns 2> /dev/null && 46 fail "Performed a netns move with a name conflict" 47ip -netns $test_ns link show dev $DEV >> /dev/null || fail "Device not found after move" 48ip -netns $NS link del $DEV || fail 49ip -netns $test_ns link del $DEV || fail 50 51# 52# Test move with a conflict and rename 53# 54ip -netns $test_ns link add name $DEV type dummy 55ip -netns $NS link add name $DEV type dummy || fail 56ip -netns $NS link set dev $DEV netns $test_ns name $DEV2 || 57 fail "Can't perform a netns move with rename" 58ip -netns $test_ns link del $DEV2 || fail 59ip -netns $test_ns link del $DEV || fail 60 61# 62# Test dup alt-name with netns move 63# 64ip -netns $test_ns link add name $DEV type dummy || fail 65ip -netns $test_ns link property add dev $DEV altname $ALT_NAME || fail 66ip -netns $NS link add name $DEV2 type dummy || fail 67ip -netns $NS link property add dev $DEV2 altname $ALT_NAME || fail 68 69ip -netns $NS link set dev $DEV2 netns $test_ns 2> /dev/null && 70 fail "Moved with alt-name dup" 71 72ip -netns $test_ns link del $DEV || fail 73ip -netns $NS link del $DEV2 || fail 74 75# 76# Test creating alt-name in one net-ns and using in another 77# 78ip -netns $NS link add name $DEV type dummy || fail 79ip -netns $NS link property add dev $DEV altname $ALT_NAME || fail 80ip -netns $NS link set dev $DEV netns $test_ns || fail 81ip -netns $test_ns link show dev $ALT_NAME >> /dev/null || fail "Can't find alt-name after move" 82ip -netns $NS link show dev $ALT_NAME 2> /dev/null && 83 fail "Can still find alt-name after move" 84ip -netns $test_ns link del $DEV || fail 85 86# 87# Test no conflict of the same name/ifindex in different netns 88# 89ip -netns $NS link add name $DEV index 100 type dummy || fail 90ip -netns $NS link add netns $test_ns name $DEV index 100 type dummy || 91 fail "Can create in netns without moving" 92ip -netns $test_ns link show dev $DEV >> /dev/null || fail "Device not found" 93ip -netns $NS link del $DEV || fail 94ip -netns $test_ns link del $DEV || fail 95 96echo -ne "$(basename $0) \t\t\t\t" 97if [ $RET_CODE -eq 0 ]; then 98 echo "[ OK ]" 99else 100 echo "[ FAIL ]" 101fi 102exit $RET_CODE 103