diff options
Diffstat (limited to 'contrib/scripts')
-rwxr-xr-x | contrib/scripts/netjail/netjail_core.sh | 50 | ||||
-rwxr-xr-x | contrib/scripts/netjail/netjail_setup_internet.sh | 47 |
2 files changed, 54 insertions, 43 deletions
diff --git a/contrib/scripts/netjail/netjail_core.sh b/contrib/scripts/netjail/netjail_core.sh index c93f26dc9..d53315052 100755 --- a/contrib/scripts/netjail/netjail_core.sh +++ b/contrib/scripts/netjail/netjail_core.sh | |||
@@ -10,22 +10,20 @@ PREFIX=${PPID:?must run from a parent process} | |||
10 | 10 | ||
11 | export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" | 11 | export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" |
12 | 12 | ||
13 | # initialize the numbering to ensure unique names | 13 | export RESULT= |
14 | export NAMESPACE_NUM=0 | ||
15 | export INTERFACE_NUM=0 | ||
14 | 16 | ||
15 | NAMESPACE_NUM=${NAMESPACE_FD:?must have a file for ids} | 17 | netjail_next_namespace() { |
16 | INTERFACE_NUM=${INTERFACE_FD:?must have a file for ids} | 18 | local NUM=$NAMESPACE_NUM |
19 | NAMESPACE_NUM=$(($NAMESPACE_NUM + 1)) | ||
20 | RESULT=$NUM | ||
21 | } | ||
17 | 22 | ||
18 | netjail_read_inc() { | 23 | netjail_next_interface() { |
19 | local FD=$1 | 24 | local NUM=$INTERFACE_NUM |
20 | local NUM=$(cat $FD) | 25 | INTERFACE_NUM=$(($INTERFACE_NUM + 1)) |
21 | NUM=${NUM:-0} | 26 | RESULT=$NUM |
22 | |||
23 | local RES=$NUM | ||
24 | NUM=$(($NUM + 1)) | ||
25 | |||
26 | echo $NUM > $FD | ||
27 | |||
28 | printf "$RES" | ||
29 | } | 27 | } |
30 | 28 | ||
31 | netjail_opt() { | 29 | netjail_opt() { |
@@ -36,7 +34,7 @@ netjail_opt() { | |||
36 | 34 | ||
37 | while [ $# -gt 0 ]; do | 35 | while [ $# -gt 0 ]; do |
38 | if [ "$1" = "$OPT" ]; then | 36 | if [ "$1" = "$OPT" ]; then |
39 | printf "%d" $INDEX | 37 | RESULT=$INDEX |
40 | return | 38 | return |
41 | fi | 39 | fi |
42 | 40 | ||
@@ -44,7 +42,7 @@ netjail_opt() { | |||
44 | shift 1 | 42 | shift 1 |
45 | done | 43 | done |
46 | 44 | ||
47 | printf "%d" 0 | 45 | RESULT=0 |
48 | } | 46 | } |
49 | 47 | ||
50 | netjail_opts() { | 48 | netjail_opts() { |
@@ -61,7 +59,7 @@ netjail_opts() { | |||
61 | shift 1 | 59 | shift 1 |
62 | done | 60 | done |
63 | 61 | ||
64 | printf "$DEF" | 62 | RESULT="$DEF" |
65 | } | 63 | } |
66 | 64 | ||
67 | netjail_check() { | 65 | netjail_check() { |
@@ -93,13 +91,14 @@ netjail_check_bin() { | |||
93 | } | 91 | } |
94 | 92 | ||
95 | netjail_bridge() { | 93 | netjail_bridge() { |
96 | local NUM=$(netjail_read_inc $INTERFACE_NUM) | 94 | netjail_next_interface |
95 | local NUM=$RESULT | ||
97 | local BRIDGE=$(printf "%06x-%08x" $PREFIX $NUM) | 96 | local BRIDGE=$(printf "%06x-%08x" $PREFIX $NUM) |
98 | 97 | ||
99 | ip link add $BRIDGE type bridge | 98 | ip link add $BRIDGE type bridge |
100 | ip link set dev $BRIDGE up | 99 | ip link set dev $BRIDGE up |
101 | 100 | ||
102 | printf "%s" $BRIDGE | 101 | RESULT=$BRIDGE |
103 | } | 102 | } |
104 | 103 | ||
105 | netjail_bridge_clear() { | 104 | netjail_bridge_clear() { |
@@ -109,12 +108,13 @@ netjail_bridge_clear() { | |||
109 | } | 108 | } |
110 | 109 | ||
111 | netjail_node() { | 110 | netjail_node() { |
112 | local NUM=$(netjail_read_inc $NAMESPACE_NUM) | 111 | netjail_next_namespace |
112 | local NUM=$RESULT | ||
113 | local NODE=$(printf "%06x-%08x" $PREFIX $NUM) | 113 | local NODE=$(printf "%06x-%08x" $PREFIX $NUM) |
114 | 114 | ||
115 | ip netns add $NODE | 115 | ip netns add $NODE |
116 | 116 | ||
117 | printf "%s" $NODE | 117 | RESULT=$NODE |
118 | } | 118 | } |
119 | 119 | ||
120 | netjail_node_clear() { | 120 | netjail_node_clear() { |
@@ -129,8 +129,10 @@ netjail_node_link_bridge() { | |||
129 | local ADDRESS=$3 | 129 | local ADDRESS=$3 |
130 | local MASK=$4 | 130 | local MASK=$4 |
131 | 131 | ||
132 | local NUM_IF=$(netjail_read_inc $INTERFACE_NUM) | 132 | netjail_next_interface |
133 | local NUM_BR=$(netjail_read_inc $INTERFACE_NUM) | 133 | local NUM_IF=$RESULT |
134 | netjail_next_interface | ||
135 | local NUM_BR=$RESULT | ||
134 | 136 | ||
135 | local LINK_IF=$(printf "%06x-%08x" $PREFIX $NUM_IF) | 137 | local LINK_IF=$(printf "%06x-%08x" $PREFIX $NUM_IF) |
136 | local LINK_BR=$(printf "%06x-%08x" $PREFIX $NUM_BR) | 138 | local LINK_BR=$(printf "%06x-%08x" $PREFIX $NUM_BR) |
@@ -145,7 +147,7 @@ netjail_node_link_bridge() { | |||
145 | 147 | ||
146 | ip link set $LINK_BR up | 148 | ip link set $LINK_BR up |
147 | 149 | ||
148 | printf "%s" $LINK_BR | 150 | RESULT=$LINK_BR |
149 | } | 151 | } |
150 | 152 | ||
151 | netjail_node_unlink_bridge() { | 153 | netjail_node_unlink_bridge() { |
diff --git a/contrib/scripts/netjail/netjail_setup_internet.sh b/contrib/scripts/netjail/netjail_setup_internet.sh index c9a6fd6d8..e3880783f 100755 --- a/contrib/scripts/netjail/netjail_setup_internet.sh +++ b/contrib/scripts/netjail/netjail_setup_internet.sh | |||
@@ -1,10 +1,5 @@ | |||
1 | #!/bin/sh | 1 | #!/bin/sh |
2 | 2 | ||
3 | NAMESPACE_FD=$(mktemp) | ||
4 | INTERFACE_FD=$(mktemp) | ||
5 | |||
6 | trap "rm -f $NAMESPACE_FD $INTERFACE_FD; exit" ERR EXIT | ||
7 | |||
8 | . "./netjail_core.sh" | 3 | . "./netjail_core.sh" |
9 | 4 | ||
10 | set -eu | 5 | set -eu |
@@ -21,11 +16,14 @@ shift 2 | |||
21 | netjail_check $(($LOCAL_M * $GLOBAL_N)) | 16 | netjail_check $(($LOCAL_M * $GLOBAL_N)) |
22 | 17 | ||
23 | # Starts optionally an amount of nodes without NAT starting with "92.68.151.1" | 18 | # Starts optionally an amount of nodes without NAT starting with "92.68.151.1" |
24 | KNOWN=$(netjail_opt '--known' $@) | 19 | netjail_opt '--known' $@ |
25 | KNOWN_NUM=$(netjail_opts '--known' 0 $@) | 20 | KNOWN=$RESULT |
21 | netjail_opts '--known' 0 $@ | ||
22 | KNOWN_NUM=$RESULT | ||
26 | 23 | ||
27 | # Starts optionally 'stunserver' on "92.68.150.254": | 24 | # Starts optionally 'stunserver' on "92.68.150.254": |
28 | STUN=$(netjail_opt '--stun' $@) | 25 | netjail_opt '--stun' $@ |
26 | STUN=$RESULT | ||
29 | 27 | ||
30 | if [ $KNOWN -gt 0 ]; then | 28 | if [ $KNOWN -gt 0 ]; then |
31 | shift 2 | 29 | shift 2 |
@@ -50,28 +48,37 @@ KNOWN_GROUP="92.68.151" | |||
50 | CLEANUP=0 | 48 | CLEANUP=0 |
51 | echo "Start [local: $LOCAL_GROUP.0/24, global: $GLOBAL_GROUP.0/16, stun: $STUN]" | 49 | echo "Start [local: $LOCAL_GROUP.0/24, global: $GLOBAL_GROUP.0/16, stun: $STUN]" |
52 | 50 | ||
53 | NETWORK_NET=$(netjail_bridge) | 51 | netjail_bridge |
52 | NETWORK_NET=$RESULT | ||
54 | 53 | ||
55 | for X in $(seq $KNOWN); do | 54 | for X in $(seq $KNOWN); do |
56 | KNOWN_NODES[$X]=$(netjail_node) | 55 | netjail_node |
57 | KNOWN_LINKS[$X]=$(netjail_node_link_bridge ${KNOWN_NODES[$X]} $NETWORK_NET "$KNOWN_GROUP.$X" 16) | 56 | KNOWN_NODES[$X]=$RESULT |
57 | netjail_node_link_bridge ${KNOWN_NODES[$X]} $NETWORK_NET "$KNOWN_GROUP.$X" 16 | ||
58 | KNOWN_LINKS[$X]=$RESULT | ||
58 | done | 59 | done |
59 | 60 | ||
60 | declare -A NODES | 61 | declare -A NODES |
61 | declare -A NODE_LINKS | 62 | declare -A NODE_LINKS |
62 | 63 | ||
63 | for N in $(seq $GLOBAL_N); do | 64 | for N in $(seq $GLOBAL_N); do |
64 | ROUTERS[$N]=$(netjail_node) | 65 | netjail_node |
65 | NETWORK_LINKS[$N]=$(netjail_node_link_bridge ${ROUTERS[$N]} $NETWORK_NET "$GLOBAL_GROUP.$N" 16) | 66 | ROUTERS[$N]=$RESULT |
66 | ROUTER_NETS[$N]=$(netjail_bridge) | 67 | netjail_node_link_bridge ${ROUTERS[$N]} $NETWORK_NET "$GLOBAL_GROUP.$N" 16 |
68 | NETWORK_LINKS[$N]=$RESULT | ||
69 | netjail_bridge | ||
70 | ROUTER_NETS[$N]=$RESULT | ||
67 | 71 | ||
68 | for M in $(seq $LOCAL_M); do | 72 | for M in $(seq $LOCAL_M); do |
69 | NODES[$N,$M]=$(netjail_node) | 73 | netjail_node |
70 | NODE_LINKS[$N,$M]=$(netjail_node_link_bridge ${NODES[$N,$M]} ${ROUTER_NETS[$N]} "$LOCAL_GROUP.$M" 24) | 74 | NODES[$N,$M]=$RESULT |
75 | netjail_node_link_bridge ${NODES[$N,$M]} ${ROUTER_NETS[$N]} "$LOCAL_GROUP.$M" 24 | ||
76 | NODE_LINKS[$N,$M]=$RESULT | ||
71 | done | 77 | done |
72 | 78 | ||
73 | ROUTER_ADDR="$LOCAL_GROUP.$(($LOCAL_M+1))" | 79 | ROUTER_ADDR="$LOCAL_GROUP.$(($LOCAL_M+1))" |
74 | ROUTER_LINKS[$N]=$(netjail_node_link_bridge ${ROUTERS[$N]} ${ROUTER_NETS[$N]} $ROUTER_ADDR 24) | 80 | netjail_node_link_bridge ${ROUTERS[$N]} ${ROUTER_NETS[$N]} $ROUTER_ADDR 24 |
81 | ROUTER_LINKS[$N]=$RESULT | ||
75 | 82 | ||
76 | netjail_node_add_nat ${ROUTERS[$N]} $ROUTER_ADDR 24 | 83 | netjail_node_add_nat ${ROUTERS[$N]} $ROUTER_ADDR 24 |
77 | 84 | ||
@@ -84,8 +91,10 @@ WAITING="" | |||
84 | KILLING="" | 91 | KILLING="" |
85 | 92 | ||
86 | if [ $STUN -gt 0 ]; then | 93 | if [ $STUN -gt 0 ]; then |
87 | STUN_NODE=$(netjail_node) | 94 | netjail_node |
88 | STUN_LINK=$(netjail_node_link_bridge $STUN_NODE $NETWORK_NET "$GLOBAL_GROUP.254" 16) | 95 | STUN_NODE=$RESULT |
96 | netjail_node_link_bridge $STUN_NODE $NETWORK_NET "$GLOBAL_GROUP.254" 16 | ||
97 | STUN_LINK=$RESULT | ||
89 | 98 | ||
90 | netjail_node_exec $STUN_NODE 0 1 stunserver & | 99 | netjail_node_exec $STUN_NODE 0 1 stunserver & |
91 | KILLING="$!" | 100 | KILLING="$!" |