PASS=0
 FAIL=0
 LOG_DIR=$(mktemp -d)
+declare -a NS
+NS[0]="ns0-$(mktemp -u XXXXXX)"
+NS[1]="ns1-$(mktemp -u XXXXXX)"
+NS[2]="ns2-$(mktemp -u XXXXXX)"
+NS[3]="ns3-$(mktemp -u XXXXXX)"
 
 test_pass()
 {
 
 clean_up()
 {
-       for i in $(seq $NUM); do
-               ip link del veth$i 2> /dev/null
-               ip netns del ns$i 2> /dev/null
+       for i in $(seq 0 $NUM); do
+               ip netns del ${NS[$i]} 2> /dev/null
        done
-       ip netns del ns0 2> /dev/null
 }
 
 # Kselftest framework requirement - SKIP code is 4.
                mode="xdpdrv"
        fi
 
-       ip netns add ns0
+       ip netns add ${NS[0]}
        for i in $(seq $NUM); do
-               ip netns add ns$i
-               ip -n ns$i link add veth0 index 2 type veth \
-                       peer name veth$i netns ns0 index $((1 + $i))
-               ip -n ns0 link set veth$i up
-               ip -n ns$i link set veth0 up
-
-               ip -n ns$i addr add 192.0.2.$i/24 dev veth0
-               ip -n ns$i addr add 2001:db8::$i/64 dev veth0
+               ip netns add ${NS[$i]}
+               ip -n ${NS[$i]} link add veth0 type veth peer name veth$i netns ${NS[0]}
+               ip -n ${NS[$i]} link set veth0 up
+               ip -n ${NS[0]} link set veth$i up
+
+               ip -n ${NS[$i]} addr add 192.0.2.$i/24 dev veth0
+               ip -n ${NS[$i]} addr add 2001:db8::$i/64 dev veth0
                # Add a neigh entry for IPv4 ping test
-               ip -n ns$i neigh add 192.0.2.253 lladdr 00:00:00:00:00:01 dev veth0
-               ip -n ns$i link set veth0 $mode obj \
+               ip -n ${NS[$i]} neigh add 192.0.2.253 lladdr 00:00:00:00:00:01 dev veth0
+               ip -n ${NS[$i]} link set veth0 $mode obj \
                        xdp_dummy.o sec xdp &> /dev/null || \
                        { test_fail "Unable to load dummy xdp" && exit 1; }
                IFACES="$IFACES veth$i"
-               veth_mac[$i]=$(ip -n ns0 link show veth$i | awk '/link\/ether/ {print $2}')
+               veth_mac[$i]=$(ip -n ${NS[0]} link show veth$i | awk '/link\/ether/ {print $2}')
        done
 }
 
        local mode=$1
 
        # mac test
-       ip netns exec ns2 tcpdump -e -i veth0 -nn -l -e &> ${LOG_DIR}/mac_ns1-2_${mode}.log &
-       ip netns exec ns3 tcpdump -e -i veth0 -nn -l -e &> ${LOG_DIR}/mac_ns1-3_${mode}.log &
+       ip netns exec ${NS[2]} tcpdump -e -i veth0 -nn -l -e &> ${LOG_DIR}/mac_ns1-2_${mode}.log &
+       ip netns exec ${NS[3]} tcpdump -e -i veth0 -nn -l -e &> ${LOG_DIR}/mac_ns1-3_${mode}.log &
        sleep 0.5
-       ip netns exec ns1 ping 192.0.2.254 -i 0.1 -c 4 &> /dev/null
+       ip netns exec ${NS[1]} ping 192.0.2.254 -i 0.1 -c 4 &> /dev/null
        sleep 0.5
        pkill tcpdump
 
        local mode=$1
 
        # ping6 test: echo request should be redirect back to itself, not others
-       ip netns exec ns1 ip neigh add 2001:db8::2 dev veth0 lladdr 00:00:00:00:00:02
+       ip netns exec ${NS[1]} ip neigh add 2001:db8::2 dev veth0 lladdr 00:00:00:00:00:02
 
-       ip netns exec ns1 tcpdump -i veth0 -nn -l -e &> ${LOG_DIR}/ns1-1_${mode}.log &
-       ip netns exec ns2 tcpdump -i veth0 -nn -l -e &> ${LOG_DIR}/ns1-2_${mode}.log &
-       ip netns exec ns3 tcpdump -i veth0 -nn -l -e &> ${LOG_DIR}/ns1-3_${mode}.log &
+       ip netns exec ${NS[1]} tcpdump -i veth0 -nn -l -e &> ${LOG_DIR}/ns1-1_${mode}.log &
+       ip netns exec ${NS[2]} tcpdump -i veth0 -nn -l -e &> ${LOG_DIR}/ns1-2_${mode}.log &
+       ip netns exec ${NS[3]} tcpdump -i veth0 -nn -l -e &> ${LOG_DIR}/ns1-3_${mode}.log &
        sleep 0.5
        # ARP test
-       ip netns exec ns1 arping -q -c 2 -I veth0 192.0.2.254
+       ip netns exec ${NS[1]} arping -q -c 2 -I veth0 192.0.2.254
        # IPv4 test
-       ip netns exec ns1 ping 192.0.2.253 -i 0.1 -c 4 &> /dev/null
+       ip netns exec ${NS[1]} ping 192.0.2.253 -i 0.1 -c 4 &> /dev/null
        # IPv6 test
-       ip netns exec ns1 ping6 2001:db8::2 -i 0.1 -c 2 &> /dev/null
+       ip netns exec ${NS[1]} ping6 2001:db8::2 -i 0.1 -c 2 &> /dev/null
        sleep 0.5
        pkill tcpdump
 
                xdpgeneric) drv_p="-S";;
        esac
 
-       ip netns exec ns0 ./xdp_redirect_multi $drv_p $IFACES &> ${LOG_DIR}/xdp_redirect_${mode}.log &
+       ip netns exec ${NS[0]} ./xdp_redirect_multi $drv_p $IFACES &> ${LOG_DIR}/xdp_redirect_${mode}.log &
        xdp_pid=$!
        sleep 1
        if ! ps -p $xdp_pid > /dev/null; then
        kill $xdp_pid
 }
 
-trap clean_up EXIT
-
 check_env
 
+trap clean_up EXIT
+
 for mode in ${DRV_MODE}; do
        setup_ns $mode
        do_tests $mode