shadowsocks-libev: ignore error from flushing route table
authorYousong Zhou <yszhou4tech@gmail.com>
Wed, 6 May 2020 13:31:29 +0000 (21:31 +0800)
committerYousong Zhou <yszhou4tech@gmail.com>
Wed, 6 May 2020 13:38:53 +0000 (21:38 +0800)
Linux kernel and iproute2 together now implement strict checking of the
existence of route tables.

Previously kernel does not support filtering by table id, now it does
and will error with nlmsgerr "ipv4: FIB table does not exist".

Previously iproute2 dump all routes and filter by table id in userspace,
now this has changed with iproute2 commit c7e6371bc4af ("ip route: Add
protocol, table id and device to dump request")

Error scene

root@OpenWrt:/# ip route flush table 100
Error: ipv4: FIB table does not exist.
Flush terminated
root@OpenWrt:/# echo $?
2

Fixes: https://github.com/openwrt/packages/issues/12095
Ref: https://lists.openwall.net/netdev/2019/05/02/105
Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
net/shadowsocks-libev/Makefile
net/shadowsocks-libev/files/ss-rules

index 22d590bb530d62e4474148c51562f8a1c25306be..88b5bffb986fbe6d99ca38ef98809b5663264c86 100644 (file)
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2017-2019 Yousong Zhou <yszhou4tech@gmail.com>
+# Copyright (C) 2017-2020 Yousong Zhou <yszhou4tech@gmail.com>
 #
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
@@ -14,7 +14,7 @@ include $(TOPDIR)/rules.mk
 #
 PKG_NAME:=shadowsocks-libev
 PKG_VERSION:=3.3.4
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://github.com/shadowsocks/shadowsocks-libev/releases/download/v$(PKG_VERSION)
index 2016667f01ccc36b0df5989d06dbd778591a0ffa..ed033afcf26e14a564ebfa24272e8632317abfdf 100755 (executable)
@@ -154,7 +154,7 @@ ss_rules_flush() {
 
        iptables-save --counters | grep -v ss_rules_ | iptables-restore --counters
        while ip rule del fwmark 1 lookup 100 2>/dev/null; do true; done
-       ip route flush table 100
+       ip route flush table 100 2>/dev/null || true
        for setname in $(ipset -n list | grep "ss_rules${o_af}_"); do
                ipset destroy "$setname" 2>/dev/null || true
        done