chiark / gitweb /
First version of hideous shell script.
authorJonathan David Amery <jdamery@dorothee.ysolde.ucam.org>
Fri, 18 May 2018 16:35:34 +0000 (17:35 +0100)
committerJonathan David Amery <jdamery@dorothee.ysolde.ucam.org>
Fri, 18 May 2018 16:35:34 +0000 (17:35 +0100)
source-route-watch.sh [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index e69de29..3dd0452
@@ -0,0 +1,35 @@
+#! /bin/bash
+set -ex
+
+while true
+do
+    stdbuf -oL ip monitor route | (
+        while read X
+        do
+            read -t 1 -N 100000 || true # clear stdin
+            for int in $( sed -n '/# local/,$ { /^[^#]/ s/.* // p }' /etc/iproute2/rt_tables )
+            do
+                tab=$(ip -6 route list table "$int" |
+                             sed 's/\(dev [^ ]*\) .*/\1/')
+                def=$(ip -6 route list match default |
+                             sed -n '/dev '"$int"'/ { 
+                                     s/\(dev [^ ]*\) .*/\1/
+                                     p
+                                     }')
+                if [ "x$def" != "x$tab" ]
+                then
+                    ip -6 route del $tab table "$int" || true
+                    ip -6 route add $def table "$int" || true
+                    ip -6 rule del table "$int" || true
+                    ip -6 rule add from $(
+                        ip -6 addr show "$int" scope global | sed -n '
+                             /inet6/ {
+                                 s/.*inet6 //
+                                 s/ .*//
+                                 p
+                                 }') table "$int"
+                fi
+            done
+        done
+    )
+done