diff options
Diffstat (limited to 'contrib/scripts/netjail/netjail_setup_internet.sh')
-rwxr-xr-x | contrib/scripts/netjail/netjail_setup_internet.sh | 92 |
1 files changed, 38 insertions, 54 deletions
diff --git a/contrib/scripts/netjail/netjail_setup_internet.sh b/contrib/scripts/netjail/netjail_setup_internet.sh index 6ae047274..c9a6fd6d8 100755 --- a/contrib/scripts/netjail/netjail_setup_internet.sh +++ b/contrib/scripts/netjail/netjail_setup_internet.sh | |||
@@ -1,4 +1,10 @@ | |||
1 | #!/bin/sh | 1 | #!/bin/sh |
2 | |||
3 | NAMESPACE_FD=$(mktemp) | ||
4 | INTERFACE_FD=$(mktemp) | ||
5 | |||
6 | trap "rm -f $NAMESPACE_FD $INTERFACE_FD; exit" ERR EXIT | ||
7 | |||
2 | . "./netjail_core.sh" | 8 | . "./netjail_core.sh" |
3 | 9 | ||
4 | set -eu | 10 | set -eu |
@@ -6,6 +12,7 @@ set -x | |||
6 | 12 | ||
7 | export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" | 13 | export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" |
8 | 14 | ||
15 | PREFIX=$PPID | ||
9 | LOCAL_M=$1 | 16 | LOCAL_M=$1 |
10 | GLOBAL_N=$2 | 17 | GLOBAL_N=$2 |
11 | 18 | ||
@@ -32,8 +39,6 @@ if [ $STUN -gt 0 ]; then | |||
32 | netjail_check_bin stunserver | 39 | netjail_check_bin stunserver |
33 | 40 | ||
34 | shift 1 | 41 | shift 1 |
35 | |||
36 | STUN_NODE=$(netjail_print_name "S" 254) | ||
37 | fi | 42 | fi |
38 | 43 | ||
39 | netjail_check_bin $1 | 44 | netjail_check_bin $1 |
@@ -45,43 +50,33 @@ KNOWN_GROUP="92.68.151" | |||
45 | CLEANUP=0 | 50 | CLEANUP=0 |
46 | echo "Start [local: $LOCAL_GROUP.0/24, global: $GLOBAL_GROUP.0/16, stun: $STUN]" | 51 | echo "Start [local: $LOCAL_GROUP.0/24, global: $GLOBAL_GROUP.0/16, stun: $STUN]" |
47 | 52 | ||
48 | NETWORK_NET=$(netjail_print_name "n" $GLOBAL_N $LOCAL_M) | 53 | NETWORK_NET=$(netjail_bridge) |
49 | |||
50 | netjail_bridge $NETWORK_NET | ||
51 | 54 | ||
52 | for X in $(seq $KNOWN); do | 55 | for X in $(seq $KNOWN); do |
53 | KNOWN_NODE=$(netjail_print_name "K" $X) | 56 | KNOWN_NODES[$X]=$(netjail_node) |
54 | 57 | KNOWN_LINKS[$X]=$(netjail_node_link_bridge ${KNOWN_NODES[$X]} $NETWORK_NET "$KNOWN_GROUP.$X" 16) | |
55 | netjail_node $KNOWN_NODE | ||
56 | netjail_node_link_bridge $KNOWN_NODE $NETWORK_NET "$KNOWN_GROUP.$X" 16 | ||
57 | done | 58 | done |
58 | 59 | ||
59 | for N in $(seq $GLOBAL_N); do | 60 | declare -A NODES |
60 | ROUTER=$(netjail_print_name "R" $N) | 61 | declare -A NODE_LINKS |
61 | |||
62 | netjail_node $ROUTER | ||
63 | netjail_node_link_bridge $ROUTER $NETWORK_NET "$GLOBAL_GROUP.$N" 16 | ||
64 | |||
65 | ROUTER_NET=$(netjail_print_name "r" $N) | ||
66 | 62 | ||
67 | netjail_bridge $ROUTER_NET | 63 | for N in $(seq $GLOBAL_N); do |
64 | ROUTERS[$N]=$(netjail_node) | ||
65 | NETWORK_LINKS[$N]=$(netjail_node_link_bridge ${ROUTERS[$N]} $NETWORK_NET "$GLOBAL_GROUP.$N" 16) | ||
66 | ROUTER_NETS[$N]=$(netjail_bridge) | ||
68 | 67 | ||
69 | for M in $(seq $LOCAL_M); do | 68 | for M in $(seq $LOCAL_M); do |
70 | NODE=$(netjail_print_name "N" $N $M) | 69 | NODES[$N,$M]=$(netjail_node) |
71 | 70 | NODE_LINKS[$N,$M]=$(netjail_node_link_bridge ${NODES[$N,$M]} ${ROUTER_NETS[$N]} "$LOCAL_GROUP.$M" 24) | |
72 | netjail_node $NODE | ||
73 | netjail_node_link_bridge $NODE $ROUTER_NET "$LOCAL_GROUP.$M" 24 | ||
74 | done | 71 | done |
75 | 72 | ||
76 | ROUTER_ADDR="$LOCAL_GROUP.$(($LOCAL_M+1))" | 73 | ROUTER_ADDR="$LOCAL_GROUP.$(($LOCAL_M+1))" |
77 | 74 | ROUTER_LINKS[$N]=$(netjail_node_link_bridge ${ROUTERS[$N]} ${ROUTER_NETS[$N]} $ROUTER_ADDR 24) | |
78 | netjail_node_link_bridge $ROUTER $ROUTER_NET $ROUTER_ADDR 24 | 75 | |
79 | netjail_node_add_nat $ROUTER $ROUTER_ADDR 24 | 76 | netjail_node_add_nat ${ROUTERS[$N]} $ROUTER_ADDR 24 |
80 | 77 | ||
81 | for M in $(seq $LOCAL_M); do | 78 | for M in $(seq $LOCAL_M); do |
82 | NODE=$(netjail_print_name "N" $N $M) | 79 | netjail_node_add_default ${NODES[$N,$M]} $ROUTER_ADDR |
83 | |||
84 | netjail_node_add_default $NODE $ROUTER_ADDR | ||
85 | done | 80 | done |
86 | done | 81 | done |
87 | 82 | ||
@@ -89,67 +84,56 @@ WAITING="" | |||
89 | KILLING="" | 84 | KILLING="" |
90 | 85 | ||
91 | if [ $STUN -gt 0 ]; then | 86 | if [ $STUN -gt 0 ]; then |
92 | netjail_node $STUN_NODE | 87 | STUN_NODE=$(netjail_node) |
93 | netjail_node_link_bridge $STUN_NODE $NETWORK_NET "$GLOBAL_GROUP.254" 16 | 88 | STUN_LINK=$(netjail_node_link_bridge $STUN_NODE $NETWORK_NET "$GLOBAL_GROUP.254" 16) |
94 | 89 | ||
95 | netjail_node_exec $STUN_NODE 0 1 stunserver & | 90 | netjail_node_exec $STUN_NODE 0 1 stunserver & |
96 | KILLING="$!" | 91 | KILLING="$!" |
97 | fi | 92 | fi |
98 | 93 | ||
99 | for X in $(seq $KNOWN); do | 94 | for X in $(seq $KNOWN); do |
100 | KNOWN_NODE=$(netjail_print_name "K" $X) | ||
101 | INDEX=$(($X - 1)) | 95 | INDEX=$(($X - 1)) |
102 | 96 | ||
103 | FD_X=$(($INDEX * 2 + 3 + 0)) | 97 | FD_X=$(($INDEX * 2 + 3 + 0)) |
104 | FD_Y=$(($INDEX * 2 + 3 + 1)) | 98 | FD_Y=$(($INDEX * 2 + 3 + 1)) |
105 | 99 | ||
106 | netjail_node_exec $KNOWN_NODE $FD_X $FD_Y $@ & | 100 | netjail_node_exec ${KNOWN_NODES[$X]} $FD_X $FD_Y $@ & |
107 | WAITING="$! $WAITING" | 101 | WAITING="$! $WAITING" |
108 | done | 102 | done |
109 | 103 | ||
110 | for N in $(seq $GLOBAL_N); do | 104 | for N in $(seq $GLOBAL_N); do |
111 | for M in $(seq $LOCAL_M); do | 105 | for M in $(seq $LOCAL_M); do |
112 | NODE=$(netjail_print_name "N" $N $M) | ||
113 | INDEX=$(($LOCAL_M * ($N - 1) + $M - 1 + $KNOWN)) | 106 | INDEX=$(($LOCAL_M * ($N - 1) + $M - 1 + $KNOWN)) |
114 | 107 | ||
115 | FD_X=$(($INDEX * 2 + 3 + 0)) | 108 | FD_X=$(($INDEX * 2 + 3 + 0)) |
116 | FD_Y=$(($INDEX * 2 + 3 + 1)) | 109 | FD_Y=$(($INDEX * 2 + 3 + 1)) |
117 | 110 | ||
118 | netjail_node_exec $NODE $FD_X $FD_Y $@ & | 111 | netjail_node_exec ${NODES[$N,$M]} $FD_X $FD_Y $@ & |
119 | WAITING="$! $WAITING" | 112 | WAITING="$! $WAITING" |
120 | done | 113 | done |
121 | done | 114 | done |
122 | 115 | ||
123 | cleanup() { | 116 | cleanup() { |
124 | if [ $STUN -gt 0 ]; then | 117 | if [ $STUN -gt 0 ]; then |
125 | STUN_NODE=$(netjail_print_name "S" 254) | 118 | netjail_node_unlink_bridge $STUN_LINK |
126 | |||
127 | netjail_node_unlink_bridge $STUN_NODE $NETWORK_NET | ||
128 | netjail_node_clear $STUN_NODE | 119 | netjail_node_clear $STUN_NODE |
129 | fi | 120 | fi |
130 | 121 | ||
131 | for X in $(seq $KNOWN); do | 122 | for X in $(seq $KNOWN); do |
132 | KNOWN_NODE=$(netjail_print_name "K" $X) | 123 | netjail_node_unlink_bridge ${KNOWN_LINKS[$X]} |
133 | 124 | netjail_node_clear ${KNOWN_NODES[$X]} | |
134 | netjail_node_unlink_bridge $KNOWN_NODE $NETWORK_NET | ||
135 | netjail_node_clear $KNOWN_NODE | ||
136 | done | 125 | done |
137 | 126 | ||
138 | for N in $(seq $GLOBAL_N); do | 127 | for N in $(seq $GLOBAL_N); do |
139 | ROUTER_NET=$(netjail_print_name "r" $N) | ||
140 | |||
141 | for M in $(seq $LOCAL_M); do | 128 | for M in $(seq $LOCAL_M); do |
142 | NODE=$(netjail_print_name "N" $N $M) | 129 | netjail_node_unlink_bridge ${NODE_LINKS[$N,$M]} |
143 | 130 | netjail_node_clear ${NODES[$N,$M]} | |
144 | netjail_node_unlink_bridge $NODE $ROUTER_NET | ||
145 | netjail_node_clear $NODE | ||
146 | done | 131 | done |
147 | 132 | ||
148 | ROUTER=$(netjail_print_name "R" $N) | 133 | netjail_node_unlink_bridge ${ROUTER_LINKS[$N]} |
149 | 134 | netjail_bridge_clear ${ROUTER_NETS[$N]} | |
150 | netjail_bridge_clear $ROUTER_NET | 135 | netjail_node_unlink_bridge ${NETWORK_LINKS[$N]} |
151 | netjail_node_unlink_bridge $ROUTER $NETWORK_NET | 136 | netjail_node_clear ${ROUTERS[$N]} |
152 | netjail_node_clear $ROUTER | ||
153 | done | 137 | done |
154 | 138 | ||
155 | netjail_bridge_clear $NETWORK_NET | 139 | netjail_bridge_clear $NETWORK_NET |
@@ -162,7 +146,7 @@ trapped_cleanup() { | |||
162 | cleanup | 146 | cleanup |
163 | } | 147 | } |
164 | 148 | ||
165 | trap 'trapped_cleanup' 2 | 149 | trap 'trapped_cleanup' ERR |
166 | 150 | ||
167 | netjail_waitall $WAITING | 151 | netjail_waitall $WAITING |
168 | netjail_killall $KILLING | 152 | netjail_killall $KILLING |