13920431dSJakub Kicinski#!/bin/bash 23920431dSJakub Kicinski# SPDX-License-Identifier: GPL-2.0 33920431dSJakub Kicinski 4f6476dedSHangbin Liusource lib.sh 53920431dSJakub Kicinskiset -o pipefail 63920431dSJakub Kicinski 73920431dSJakub KicinskiDEV=dummy-dev0 83920431dSJakub KicinskiDEV2=dummy-dev1 93920431dSJakub KicinskiALT_NAME=some-alt-name 10*56c8a23fSStanislav FomichevNSIM_ADDR=2025 113920431dSJakub Kicinski 123920431dSJakub KicinskiRET_CODE=0 133920431dSJakub Kicinski 143920431dSJakub Kicinskicleanup() { 15*56c8a23fSStanislav Fomichev cleanup_netdevsim $NSIM_ADDR 16f6476dedSHangbin Liu cleanup_ns $NS $test_ns 173920431dSJakub Kicinski} 183920431dSJakub Kicinski 193920431dSJakub Kicinskitrap cleanup EXIT 203920431dSJakub Kicinski 213920431dSJakub Kicinskifail() { 223920431dSJakub Kicinski echo "ERROR: ${1:-unexpected return code} (ret: $_)" >&2 233920431dSJakub Kicinski RET_CODE=1 243920431dSJakub Kicinski} 253920431dSJakub Kicinski 26f6476dedSHangbin Liusetup_ns NS test_ns 273920431dSJakub Kicinski 283920431dSJakub Kicinski# 293920431dSJakub Kicinski# Test basic move without a rename 30*56c8a23fSStanislav Fomichev# Use netdevsim because it has extra asserts for notifiers. 313920431dSJakub Kicinski# 32*56c8a23fSStanislav Fomichev 33*56c8a23fSStanislav Fomichevnsim=$(create_netdevsim $NSIM_ADDR $NS) 34*56c8a23fSStanislav Fomichevip -netns $NS link set dev $nsim netns $test_ns || 353920431dSJakub Kicinski fail "Can't perform a netns move" 36*56c8a23fSStanislav Fomichevip -netns $test_ns link show dev $nsim >> /dev/null || 37*56c8a23fSStanislav Fomichev fail "Device not found after move" 38*56c8a23fSStanislav Fomichevcleanup_netdevsim $NSIM_ADDR 393920431dSJakub Kicinski 403920431dSJakub Kicinski# 413920431dSJakub Kicinski# Test move with a conflict 423920431dSJakub Kicinski# 43f6476dedSHangbin Liuip -netns $test_ns link add name $DEV type dummy 443920431dSJakub Kicinskiip -netns $NS link add name $DEV type dummy || fail 45f6476dedSHangbin Liuip -netns $NS link set dev $DEV netns $test_ns 2> /dev/null && 463920431dSJakub Kicinski fail "Performed a netns move with a name conflict" 47f6476dedSHangbin Liuip -netns $test_ns link show dev $DEV >> /dev/null || fail "Device not found after move" 483920431dSJakub Kicinskiip -netns $NS link del $DEV || fail 49f6476dedSHangbin Liuip -netns $test_ns link del $DEV || fail 503920431dSJakub Kicinski 513920431dSJakub Kicinski# 523920431dSJakub Kicinski# Test move with a conflict and rename 533920431dSJakub Kicinski# 54f6476dedSHangbin Liuip -netns $test_ns link add name $DEV type dummy 553920431dSJakub Kicinskiip -netns $NS link add name $DEV type dummy || fail 56f6476dedSHangbin Liuip -netns $NS link set dev $DEV netns $test_ns name $DEV2 || 573920431dSJakub Kicinski fail "Can't perform a netns move with rename" 58f6476dedSHangbin Liuip -netns $test_ns link del $DEV2 || fail 59f6476dedSHangbin Liuip -netns $test_ns link del $DEV || fail 603920431dSJakub Kicinski 613920431dSJakub Kicinski# 623920431dSJakub Kicinski# Test dup alt-name with netns move 633920431dSJakub Kicinski# 64f6476dedSHangbin Liuip -netns $test_ns link add name $DEV type dummy || fail 65f6476dedSHangbin Liuip -netns $test_ns link property add dev $DEV altname $ALT_NAME || fail 663920431dSJakub Kicinskiip -netns $NS link add name $DEV2 type dummy || fail 673920431dSJakub Kicinskiip -netns $NS link property add dev $DEV2 altname $ALT_NAME || fail 683920431dSJakub Kicinski 69f6476dedSHangbin Liuip -netns $NS link set dev $DEV2 netns $test_ns 2> /dev/null && 703920431dSJakub Kicinski fail "Moved with alt-name dup" 713920431dSJakub Kicinski 72f6476dedSHangbin Liuip -netns $test_ns link del $DEV || fail 733920431dSJakub Kicinskiip -netns $NS link del $DEV2 || fail 743920431dSJakub Kicinski 753920431dSJakub Kicinski# 763920431dSJakub Kicinski# Test creating alt-name in one net-ns and using in another 773920431dSJakub Kicinski# 783920431dSJakub Kicinskiip -netns $NS link add name $DEV type dummy || fail 793920431dSJakub Kicinskiip -netns $NS link property add dev $DEV altname $ALT_NAME || fail 80f6476dedSHangbin Liuip -netns $NS link set dev $DEV netns $test_ns || fail 81f6476dedSHangbin Liuip -netns $test_ns link show dev $ALT_NAME >> /dev/null || fail "Can't find alt-name after move" 823920431dSJakub Kicinskiip -netns $NS link show dev $ALT_NAME 2> /dev/null && 833920431dSJakub Kicinski fail "Can still find alt-name after move" 84f6476dedSHangbin Liuip -netns $test_ns link del $DEV || fail 853920431dSJakub Kicinski 8685cb3711SXiao Liang# 8785cb3711SXiao Liang# Test no conflict of the same name/ifindex in different netns 8885cb3711SXiao Liang# 8985cb3711SXiao Liangip -netns $NS link add name $DEV index 100 type dummy || fail 9085cb3711SXiao Liangip -netns $NS link add netns $test_ns name $DEV index 100 type dummy || 9185cb3711SXiao Liang fail "Can create in netns without moving" 9285cb3711SXiao Liangip -netns $test_ns link show dev $DEV >> /dev/null || fail "Device not found" 9385cb3711SXiao Liangip -netns $NS link del $DEV || fail 9485cb3711SXiao Liangip -netns $test_ns link del $DEV || fail 9585cb3711SXiao Liang 963920431dSJakub Kicinskiecho -ne "$(basename $0) \t\t\t\t" 973920431dSJakub Kicinskiif [ $RET_CODE -eq 0 ]; then 983920431dSJakub Kicinski echo "[ OK ]" 993920431dSJakub Kicinskielse 1003920431dSJakub Kicinski echo "[ FAIL ]" 1013920431dSJakub Kicinskifi 1023920431dSJakub Kicinskiexit $RET_CODE 103