Suppress expected ip errors

This commit is contained in:
Mygod
2020-06-28 11:00:09 -04:00
parent 5c6b22a6d2
commit 027a954e1d
2 changed files with 14 additions and 6 deletions

View File

@@ -34,11 +34,7 @@ object DhcpWorkaround : SharedPreferences.OnSharedPreferenceChangeListener {
try {
it.exec("ip rule $action iif lo uidrange 0-0 lookup local_network priority 11000")
} catch (e: RoutingCommands.UnexpectedOutputException) {
if (e.result.out.isEmpty() && (e.result.exit == 2 || e.result.exit == 254) && if (enabled) {
e.result.err == "RTNETLINK answers: File exists\n"
} else {
e.result.err == "RTNETLINK answers: No such file or directory\n"
}) return@use
if (Routing.shouldSuppressIpError(e)) return@use
Timber.w(IOException("Failed to tweak dhcp workaround rule", e))
SmartSnackbar.make(e).show()
}

View File

@@ -91,11 +91,23 @@ class Routing(private val caller: Any, private val downstream: String,
result.check(listOf(command), !result.out.endsWith(suffix))
if (result.out.length > suffix.length) Timber.i(result.message(listOf(command), true))
}
fun shouldSuppressIpError(e: RoutingCommands.UnexpectedOutputException, isAdd: Boolean = true) =
e.result.out.isEmpty() && (e.result.exit == 2 || e.result.exit == 254) && e.result.err == if (isAdd) {
"RTNETLINK answers: File exists\n"
} else {
"RTNETLINK answers: No such file or directory\n"
}
}
private fun RootSession.Transaction.ipRule(add: String, priority: Int, rule: String = "", del: String = add) =
private fun RootSession.Transaction.ipRule(add: String, priority: Int, rule: String = "", del: String = add) {
try {
exec("ip rule add $rule iif $downstream $add priority $priority",
"ip rule del $rule iif $downstream $del priority $priority")
} catch (e: RoutingCommands.UnexpectedOutputException) {
if (!shouldSuppressIpError(e)) throw e
}
}
private fun RootSession.Transaction.ipRuleLookup(upstream: String, priority: Int, rule: String = "") =
// by the time stopScript is called, table entry for upstream may already get removed
ipRule("lookup $upstream", priority, rule, "")