commit: f9793bb67a40dc58c97772a9731a2b6dfcb1422f Author: Robin H. Johnson <robbat2 <AT> gentoo <DOT> org> AuthorDate: Sun Oct 23 23:50:08 2016 +0000 Commit: Robin H. Johnson <robbat2 <AT> gentoo <DOT> org> CommitDate: Sun Oct 23 23:50:08 2016 +0000 URL: https://gitweb.gentoo.org/proj/netifrc.git/commit/?id=f9793bb6
iproute2: treat EEXIST error on routes as non-fatal. Signed-off-by: Robin H. Johnson <robbat2 <AT> gentoo.org> net/iproute2.sh | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/net/iproute2.sh b/net/iproute2.sh index d03548e..779d334 100644 --- a/net/iproute2.sh +++ b/net/iproute2.sh @@ -251,10 +251,33 @@ _add_route() cmd="${cmd} metric ${metric}" fi + # Check for route already existing: + ip ${family} route show ${cmd} dev "${IFACE}" 2>/dev/null | \ + fgrep -sq "${cmd%% *}" + route_already_exists=$? + veinfo ip ${family} route append ${cmd} dev "${IFACE}" ip ${family} route append ${cmd} dev "${IFACE}" rc=$? - # TODO: check return code in some cases + # Check return code in some cases + if [ $rc -ne 0 ]; then + # If the route already exists, our default behavior is to WARN but continue. + # You can completely silence this with: errh_IFVAR_route_EEXIST=continue + if [ $route_already_exists -eq 0 ]; then + eh_behavior=$(_get_errorhandler_behavior "$IFVAR" "route" "EEXIST" "warn") + abort=0 + case $eh_behavior in + continue) msgfunc=true ;; + info) msgfunc=einfo ;; + warn) msgfunc=ewarn ;; + error|fatal) msgfunc=eerror abort=1;; + esac + $msgfunc "Route '$cmd' already existed: $(ip $family route show $cmd dev "${IFACE}" 2>&1)" + [ $abort -eq 1 ] && rc=1 + else + # TODO: Handle other errors + fi + fi eend $rc }