Commit c9365643 authored by Kirill Smelkov's avatar Kirill Smelkov

Factor xunshare/xnsenter into lib.sh and use it in topo-square as well

parent 9e784c62
# lib.sh is library of common shell functions for topo-*
# `xunshare <dir> ...` -- unshare net/mount/... namespaces to be referenced by dir
xunshare() {
ref=$1
shift
rm -rf "$ref"
mkdir "$ref"
touch $ref/mnt $ref/net
unshare --mount=$ref/mnt --net=$ref/net "$@"
}
# `xnsenter <dir> ...` -- nsenter net/mount/... namespaces to be referenced by dir
xnsenter() {
ref=$1
shift
nsenter --mount=$ref/mnt --net=$ref/net --wd=. "$@"
}
...@@ -13,25 +13,9 @@ ...@@ -13,25 +13,9 @@
# #
# Based on https://github.com/troglobit/smcroute/tree/master/test # Based on https://github.com/troglobit/smcroute/tree/master/test
rm -rf A B C . lib.sh
mkdir A B C
PID=$$
# `xunshare <dir> ...` -- unshare net/mount/... namespaces to be referenced by dir
xunshare() {
ref=$1
shift
touch $ref/mnt $ref/net
unshare --mount=$ref/mnt --net=$ref/net "$@"
}
# `xnsenter <dir> ...` -- nsenter net/mount/... namespaces to be referenced by dir
xnsenter() {
ref=$1
shift
nsenter --mount=$ref/mnt --net=$ref/net --wd=. "$@"
}
PID=$$
# B-br0-A # B-br0-A
xunshare B -- ip link set lo up xunshare B -- ip link set lo up
......
...@@ -19,25 +19,25 @@ ...@@ -19,25 +19,25 @@
# #
# #
# should be run under unshare -mrun . # should be run under unshare -mrun .
# use nsenter --net={A,B,C,D} to enter into network namespace of A/B/C/D. # use xnsenter {A,B,C,D} to enter into namespaces of A/B/C/D.
# #
# Based on https://github.com/troglobit/smcroute/tree/master/test # Based on https://github.com/troglobit/smcroute/tree/master/test
rm -f A B C D . lib.sh
touch A B C D
PID=$$ PID=$$
# A-br0-B # A-br0-B
unshare --net=B --mount=B -- ip link set lo up xunshare B -- ip link set lo up
nsenter --net=B -- ip link add ba type veth peer BA xnsenter B -- ip link add ba type veth peer BA
nsenter --net=B -- ip link set BA netns $PID xnsenter B -- ip link set BA netns $PID
nsenter --net=B -- ip link set ba up xnsenter B -- ip link set ba up
ip link set BA up ip link set BA up
unshare --net=A -- ip link set lo up xunshare A -- ip link set lo up
nsenter --net=A -- ip link add ab type veth peer AB xnsenter A -- ip link add ab type veth peer AB
nsenter --net=A -- ip link set AB netns $PID xnsenter A -- ip link set AB netns $PID
nsenter --net=A -- ip link set ab up xnsenter A -- ip link set ab up
ip link set AB up ip link set AB up
ip link add br0 type bridge # vlan_filtering 1 mcast_snooping 0 ip link add br0 type bridge # vlan_filtering 1 mcast_snooping 0
...@@ -46,15 +46,15 @@ ip link set AB master br0 ...@@ -46,15 +46,15 @@ ip link set AB master br0
ip link set br0 up ip link set br0 up
# A-br1-C # A-br1-C
nsenter --net=A -- ip link add ac type veth peer AC xnsenter A -- ip link add ac type veth peer AC
nsenter --net=A -- ip link set AC netns $PID xnsenter A -- ip link set AC netns $PID
nsenter --net=A -- ip link set ac up xnsenter A -- ip link set ac up
ip link set AC up ip link set AC up
unshare --net=C -- ip link set lo up xunshare C -- ip link set lo up
nsenter --net=C -- ip link add ca type veth peer CA xnsenter C -- ip link add ca type veth peer CA
nsenter --net=C -- ip link set CA netns $PID xnsenter C -- ip link set CA netns $PID
nsenter --net=C -- ip link set ca up xnsenter C -- ip link set ca up
ip link set CA up ip link set CA up
ip link add br1 type bridge # vlan_filtering 1 mcast_snooping 0 ip link add br1 type bridge # vlan_filtering 1 mcast_snooping 0
...@@ -63,15 +63,15 @@ ip link set AC master br1 ...@@ -63,15 +63,15 @@ ip link set AC master br1
ip link set br1 up ip link set br1 up
# C-br2-D # C-br2-D
nsenter --net=C -- ip link add cd type veth peer CD xnsenter C -- ip link add cd type veth peer CD
nsenter --net=C -- ip link set CD netns $PID xnsenter C -- ip link set CD netns $PID
nsenter --net=C -- ip link set cd up xnsenter C -- ip link set cd up
ip link set CD up ip link set CD up
unshare --net=D -- ip link set lo up xunshare D -- ip link set lo up
nsenter --net=D -- ip link add dc type veth peer DC xnsenter D -- ip link add dc type veth peer DC
nsenter --net=D -- ip link set DC netns $PID xnsenter D -- ip link set DC netns $PID
nsenter --net=D -- ip link set dc up xnsenter D -- ip link set dc up
ip link set DC up ip link set DC up
ip link add br2 type bridge # vlan_filtering 1 mcast_snooping 0 ip link add br2 type bridge # vlan_filtering 1 mcast_snooping 0
...@@ -80,14 +80,14 @@ ip link set DC master br2 ...@@ -80,14 +80,14 @@ ip link set DC master br2
ip link set br2 up ip link set br2 up
# B-br3-D # B-br3-D
nsenter --net=B -- ip link add bd type veth peer BD xnsenter B -- ip link add bd type veth peer BD
nsenter --net=B -- ip link set BD netns $PID xnsenter B -- ip link set BD netns $PID
nsenter --net=B -- ip link set bd up xnsenter B -- ip link set bd up
ip link set BD up ip link set BD up
nsenter --net=D -- ip link add db type veth peer DB xnsenter D -- ip link add db type veth peer DB
nsenter --net=D -- ip link set DB netns $PID xnsenter D -- ip link set DB netns $PID
nsenter --net=D -- ip link set db up xnsenter D -- ip link set db up
ip link set DB up ip link set DB up
ip link add br3 type bridge # vlan_filtering 1 mcast_snooping 0 ip link add br3 type bridge # vlan_filtering 1 mcast_snooping 0
...@@ -96,21 +96,21 @@ ip link set DB master br3 ...@@ -96,21 +96,21 @@ ip link set DB master br3
ip link set br3 up ip link set br3 up
# addresses # addresses
nsenter --net=B -- ip addr add 10.0.0.1/24 dev ba xnsenter B -- ip addr add 10.0.0.1/24 dev ba
nsenter --net=A -- ip addr add 10.0.0.2/24 dev ab xnsenter A -- ip addr add 10.0.0.2/24 dev ab
nsenter --net=C -- ip addr add 20.0.0.1/24 dev ca xnsenter C -- ip addr add 20.0.0.1/24 dev ca
nsenter --net=A -- ip addr add 20.0.0.2/24 dev ac xnsenter A -- ip addr add 20.0.0.2/24 dev ac
nsenter --net=B -- ip addr add 30.0.0.1/24 dev bd xnsenter B -- ip addr add 30.0.0.1/24 dev bd
nsenter --net=D -- ip addr add 30.0.0.2/24 dev db xnsenter D -- ip addr add 30.0.0.2/24 dev db
nsenter --net=C -- ip addr add 40.0.0.1/24 dev cd xnsenter C -- ip addr add 40.0.0.1/24 dev cd
nsenter --net=D -- ip addr add 40.0.0.2/24 dev dc xnsenter D -- ip addr add 40.0.0.2/24 dev dc
# multicast routing # multicast routing
#nsenter --net=B -- ip route add 224.0.0.0/4 dev b1 #xnsenter B -- ip route add 224.0.0.0/4 dev b1
#nsenter --net=C -- ip route add 224.0.0.0/4 dev c1 #xnsenter C -- ip route add 224.0.0.0/4 dev c1
# #
#nsenter --net=A -- ip route add 224.0.0.0/4 dev a1 # NOTE on A 224.0.0.0/4 is routed #xnsenter A -- ip route add 224.0.0.0/4 dev a1 # NOTE on A 224.0.0.0/4 is routed
#nsenter --net=A -- ip route append 224.0.0.0/4 dev a2 # to _both_ a1 and a2 #xnsenter A -- ip route append 224.0.0.0/4 dev a2 # to _both_ a1 and a2
...@@ -121,13 +121,13 @@ sed -e 's/IF0/ca/g' -e 's/IF1/cd/g' pim-dm.yaml.tmpl > pim-dm_C.yaml ...@@ -121,13 +121,13 @@ sed -e 's/IF0/ca/g' -e 's/IF1/cd/g' pim-dm.yaml.tmpl > pim-dm_C.yaml
sed -e 's/IF0/dc/g' -e 's/IF1/db/g' pim-dm.yaml.tmpl > pim-dm_D.yaml sed -e 's/IF0/dc/g' -e 's/IF1/db/g' pim-dm.yaml.tmpl > pim-dm_D.yaml
# we need to mount private /var/run in each namespace so that pim-dm can be started # we need to mount private /var/run in each namespace so that pim-dm can be started
#nsenter --net=A -- pim-dm -config pim-dm_A.yaml & #xnsenter A -- pim-dm -config pim-dm_A.yaml &
#nsenter --net=B -- pim-dm -config pim-dm_B.yaml & #xnsenter B -- pim-dm -config pim-dm_B.yaml &
#nsenter --net=C -- pim-dm -config pim-dm_C.yaml & #xnsenter C -- pim-dm -config pim-dm_C.yaml &
#nsenter --net=D -- pim-dm -config pim-dm_D.yaml & #xnsenter D -- pim-dm -config pim-dm_D.yaml &
# open terminals in A B C D for play # open terminals in A B C D for play
nsenter --net=A -- xfce4-terminal --title=A & xnsenter A -- xfce4-terminal --title=A &
nsenter --net=B -- xfce4-terminal --title=B & xnsenter B -- xfce4-terminal --title=B &
nsenter --net=C -- xfce4-terminal --title=C & xnsenter C -- xfce4-terminal --title=C &
nsenter --net=D -- xfce4-terminal --title=D & xnsenter D -- xfce4-terminal --title=D &
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment