. "$(dirname "${0}")/mptcp_lib.sh"
 
-sec=$(date +%s)
-rndh=$(printf %x $sec)-$(mktemp -u XXXXXX)
-ns="ns1-$rndh"
+ns=""
 ksft_skip=4
 test_cnt=1
 timeout_poll=30
 {
        ip netns pids "${ns}" | xargs --no-run-if-empty kill -SIGKILL &>/dev/null
 
-       ip netns del $ns
+       mptcp_lib_ns_exit "${ns}"
 }
 
 mptcp_lib_check_mptcp
 }
 
 trap cleanup EXIT
-ip netns add $ns
-ip -n $ns link set dev lo up
+mptcp_lib_ns_init ns
 
 echo "a" | \
        timeout ${timeout_test} \
 
        esac
 done
 
-sec=$(date +%s)
-rndh=$(printf %x $sec)-$(mktemp -u XXXXXX)
-ns1="ns1-$rndh"
-ns2="ns2-$rndh"
-ns3="ns3-$rndh"
-ns4="ns4-$rndh"
+ns1=""
+ns2=""
+ns3=""
+ns4=""
 
 TEST_COUNT=0
 TEST_GROUP=""
 
        local netns
        for netns in "$ns1" "$ns2" "$ns3" "$ns4";do
-               ip netns del $netns
                rm -f /tmp/$netns.{nstat,out}
        done
+       mptcp_lib_ns_exit "${ns1}" "${ns2}" "${ns3}" "${ns4}"
 }
 
 mptcp_lib_check_mptcp
 cout_disconnect="$cout".disconnect
 trap cleanup EXIT
 
-for i in "$ns1" "$ns2" "$ns3" "$ns4";do
-       ip netns add $i || exit $ksft_skip
-       ip -net $i link set lo up
-done
+mptcp_lib_ns_init ns1 ns2 ns3 ns4
 
 #  "$ns1"              ns2                    ns3                     ns4
 # ns1eth2    ns2eth1   ns2eth3      ns3eth2   ns3eth4       ns4eth3
 
 check_mptcp_disabled()
 {
-       local disabled_ns="ns_disabled-$rndh"
-       ip netns add ${disabled_ns} || exit $ksft_skip
+       local disabled_ns
+       mptcp_lib_ns_init disabled_ns
 
        # net.mptcp.enabled should be enabled by default
        if [ "$(ip netns exec ${disabled_ns} sysctl net.mptcp.enabled | awk '{ print $3 }')" -ne 1 ]; then
        local err=0
        LC_ALL=C ip netns exec ${disabled_ns} ./mptcp_connect -p 10000 -s MPTCP 127.0.0.1 < "$cin" 2>&1 | \
                grep -q "^socket: Protocol not available$" && err=1
-       ip netns delete ${disabled_ns}
+       mptcp_lib_ns_exit "${disabled_ns}"
 
        if [ ${err} -eq 0 ]; then
                echo -e "New MPTCP socket cannot be blocked via sysctl\t\t[ FAIL ]"
 
 {
        capout=$(mktemp)
 
-       local sec rndh
-       sec=$(date +%s)
-       rndh=$(printf %x $sec)-$(mktemp -u XXXXXX)
-
-       ns1="ns1-$rndh"
-       ns2="ns2-$rndh"
+       mptcp_lib_ns_init ns1 ns2
 
        local netns
        for netns in "$ns1" "$ns2"; do
-               ip netns add $netns || exit $ksft_skip
-               ip -net $netns link set lo up
                ip netns exec $netns sysctl -q net.mptcp.enabled=1
                ip netns exec $netns sysctl -q net.mptcp.pm_type=0 2>/dev/null || true
                ip netns exec $netns sysctl -q net.ipv4.conf.all.rp_filter=0
 
        local netns
        for netns in "$ns1" "$ns2"; do
-               ip netns del $netns
                rm -f /tmp/$netns.{nstat,out}
        done
+       mptcp_lib_ns_exit "${ns1}" "${ns2}"
 }
 
 init() {
 
                esac
        done
 }
+mptcp_lib_ns_init() {
+       local sec rndh
+
+       sec=$(date +%s)
+       rndh=$(printf %x "${sec}")-$(mktemp -u XXXXXX)
+
+       local netns
+       for netns in "${@}"; do
+               eval "${netns}=${netns}-${rndh}"
+
+               ip netns add "${!netns}" || exit ${KSFT_SKIP}
+               ip -net "${!netns}" link set lo up
+       done
+}
+
+mptcp_lib_ns_exit() {
+       local netns
+       for netns in "${@}"; do
+               ip netns del "${netns}"
+       done
+}
 
 iptables="iptables"
 ip6tables="ip6tables"
 
-sec=$(date +%s)
-rndh=$(printf %x $sec)-$(mktemp -u XXXXXX)
-ns1="ns1-$rndh"
-ns2="ns2-$rndh"
-ns_sbox="ns_sbox-$rndh"
+ns1=""
+ns2=""
+ns_sbox=""
 
 add_mark_rules()
 {
 
 init()
 {
+       mptcp_lib_ns_init ns1 ns2 ns_sbox
+
        local netns
        for netns in "$ns1" "$ns2" "$ns_sbox";do
-               ip netns add $netns || exit $ksft_skip
-               ip -net $netns link set lo up
                ip netns exec $netns sysctl -q net.mptcp.enabled=1
                ip netns exec $netns sysctl -q net.ipv4.conf.all.rp_filter=0
                ip netns exec $netns sysctl -q net.ipv4.conf.default.rp_filter=0
 
 cleanup()
 {
-       local netns
-       for netns in "$ns1" "$ns2" "$ns_sbox"; do
-               ip netns del $netns
-       done
+       mptcp_lib_ns_exit "${ns1}" "${ns2}" "${ns_sbox}"
        rm -f "$cin" "$cout"
        rm -f "$sin" "$sout"
 }
 
        esac
 done
 
-sec=$(date +%s)
-rndh=$(printf %x $sec)-$(mktemp -u XXXXXX)
-ns1="ns1-$rndh"
+ns1=""
 err=$(mktemp)
 
 cleanup()
 {
        rm -f $err
-       ip netns del $ns1
+       mptcp_lib_ns_exit "${ns1}"
 }
 
 mptcp_lib_check_mptcp
 
 trap cleanup EXIT
 
-ip netns add $ns1 || exit $ksft_skip
-ip -net $ns1 link set lo up
+mptcp_lib_ns_init ns1
 ip netns exec $ns1 sysctl -q net.mptcp.enabled=1
 
 check()
 
 
 . "$(dirname "${0}")/mptcp_lib.sh"
 
-sec=$(date +%s)
-rndh=$(printf %x $sec)-$(mktemp -u XXXXXX)
-ns1="ns1-$rndh"
-ns2="ns2-$rndh"
-ns3="ns3-$rndh"
+ns1=""
+ns2=""
+ns3=""
 capture=false
 ksft_skip=4
 timeout_poll=30
        rm -f "$large" "$small"
        rm -f "$capout"
 
-       local netns
-       for netns in "$ns1" "$ns2" "$ns3";do
-               ip netns del $netns
-       done
+       mptcp_lib_ns_exit "${ns1}" "${ns2}" "${ns3}"
 }
 
 mptcp_lib_check_mptcp
 
        trap cleanup EXIT
 
+       mptcp_lib_ns_init ns1 ns2 ns3
        for i in "$ns1" "$ns2" "$ns3";do
-               ip netns add $i || exit $ksft_skip
-               ip -net $i link set lo up
                ip netns exec $i sysctl -q net.ipv4.conf.all.rp_filter=0
                ip netns exec $i sysctl -q net.ipv4.conf.default.rp_filter=0
        done
 
 client_addr_id=${RANDOM:0:2}
 server_addr_id=${RANDOM:0:2}
 
-sec=$(date +%s)
-rndh=$(printf %x "$sec")-$(mktemp -u XXXXXX)
-ns1="ns1-$rndh"
-ns2="ns2-$rndh"
+ns1=""
+ns2=""
 ret=0
 test_name=""
 
                mptcp_lib_kill_wait $pid
        done
 
-       local netns
-       for netns in "$ns1" "$ns2" ;do
-               ip netns del "$netns"
-       done
+       mptcp_lib_ns_exit "${ns1}" "${ns2}"
 
        rm -rf $file $client_evts $server_evts
 
 trap cleanup EXIT
 
 # Create and configure network namespaces for testing
+mptcp_lib_ns_init ns1 ns2
 for i in "$ns1" "$ns2" ;do
-       ip netns add "$i" || exit 1
-       ip -net "$i" link set lo up
        ip netns exec "$i" sysctl -q net.mptcp.enabled=1
        ip netns exec "$i" sysctl -q net.mptcp.pm_type=1
 done