+#! /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