From: Jonathan David Amery Date: Fri, 18 May 2018 16:35:34 +0000 (+0100) Subject: First version of hideous shell script. X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~jdamery/git?a=commitdiff_plain;h=f803b58cdcdefdd92c12633df5d31e11817ac870;p=source-route-watch First version of hideous shell script. --- diff --git a/source-route-watch.sh b/source-route-watch.sh old mode 100644 new mode 100755 index e69de29..3dd0452 --- a/source-route-watch.sh +++ b/source-route-watch.sh @@ -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