aboutsummaryrefslogtreecommitdiff
path: root/contrib/scripts/netjail/netjail_core.sh
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/scripts/netjail/netjail_core.sh')
-rwxr-xr-xcontrib/scripts/netjail/netjail_core.sh50
1 files changed, 26 insertions, 24 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
11export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 11export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
12 12
13# initialize the numbering to ensure unique names 13export RESULT=
14export NAMESPACE_NUM=0
15export INTERFACE_NUM=0
14 16
15NAMESPACE_NUM=${NAMESPACE_FD:?must have a file for ids} 17netjail_next_namespace() {
16INTERFACE_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
18netjail_read_inc() { 23netjail_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
31netjail_opt() { 29netjail_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
50netjail_opts() { 48netjail_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
67netjail_check() { 65netjail_check() {
@@ -93,13 +91,14 @@ netjail_check_bin() {
93} 91}
94 92
95netjail_bridge() { 93netjail_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
105netjail_bridge_clear() { 104netjail_bridge_clear() {
@@ -109,12 +108,13 @@ netjail_bridge_clear() {
109} 108}
110 109
111netjail_node() { 110netjail_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
120netjail_node_clear() { 120netjail_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
151netjail_node_unlink_bridge() { 153netjail_node_unlink_bridge() {