start more idempotent, not finished yet
authorIan Kelling <iank@fsf.org>
Fri, 5 Apr 2024 01:07:30 +0000 (21:07 -0400)
committerIan Kelling <iank@fsf.org>
Fri, 5 Apr 2024 17:26:06 +0000 (13:26 -0400)
newns

diff --git a/newns b/newns
index 34e4ca5da3454a8f4c4460e80f7a8fdef8917546..313440730cd67b08406122dd5d2d727a12bbfa91 100755 (executable)
--- a/newns
+++ b/newns
@@ -220,6 +220,18 @@ find-network() {
   fi
 }
 
+# ip add idempotent (if it doesn't exist already)
+ip-add() {
+  local cmd net dev
+  cmd=$1
+  net=$2
+  dev=$3
+  if ! $cmd addr show dev $dev | sed 's/^ *//;s/ *$//' | grep -xF "inet $net scope global $dev"; then
+    $cmd addr add $net dev $dev
+  fi
+
+}
+
 start() {
   find-network
 
@@ -257,7 +269,9 @@ start() {
 
 
   if $create; then
-    ip netns add $nn
+    if ! ip netns | grep -xF $nn &>/dev/null; then
+      ip netns add $nn
+    fi
     ip -n $nn link set dev lo up
   fi
 
@@ -271,10 +285,10 @@ start() {
   err-cleanup() { stop; }
   ipnn link add $v0 type veth peer name $v1
   ipnn link set $v0 netns default
-  ipd addr add $network.1/24 dev $v0
+  ip-add ipd $network.1/24 $v0
   ipd link set $v0 up
   nat -C &>/dev/null || nat -A
-  ipnn addr add $network.2/24 dev $v1
+  ip-add ipnn $network.1/24 $v0
   ipnn link set $v1 up
   cmd="ipnn route add default via $network.1"
   $cmd