From 7b0cd14b004507fdc2aa04630f29f33af9ecc5cc Mon Sep 17 00:00:00 2001 From: adlyq Date: Wed, 2 Nov 2022 23:58:51 +0800 Subject: [PATCH] chore: netlink duplicate contains --- component/ebpf/ebpf_linux.go | 3 +-- component/ebpf/redir/auto_redirect.go | 2 +- component/ebpf/tc/redirect_to_tun.go | 2 +- go.mod | 5 +---- go.sum | 4 ---- listener/listener.go | 7 ++++--- listener/sing_tun/server.go | 7 ++++--- 7 files changed, 12 insertions(+), 18 deletions(-) diff --git a/component/ebpf/ebpf_linux.go b/component/ebpf/ebpf_linux.go index bf41d6cb..2ffd4bd5 100644 --- a/component/ebpf/ebpf_linux.go +++ b/component/ebpf/ebpf_linux.go @@ -6,13 +6,12 @@ import ( "fmt" "net/netip" - "github.com/vishvananda/netlink" - "github.com/Dreamacro/clash/common/cmd" "github.com/Dreamacro/clash/component/dialer" "github.com/Dreamacro/clash/component/ebpf/redir" "github.com/Dreamacro/clash/component/ebpf/tc" C "github.com/Dreamacro/clash/constant" + "github.com/sagernet/netlink" ) func GetAutoDetectInterface() (string, error) { diff --git a/component/ebpf/redir/auto_redirect.go b/component/ebpf/redir/auto_redirect.go index 2d1b4878..4fd8b785 100644 --- a/component/ebpf/redir/auto_redirect.go +++ b/component/ebpf/redir/auto_redirect.go @@ -13,7 +13,7 @@ import ( "github.com/cilium/ebpf" "github.com/cilium/ebpf/rlimit" - "github.com/vishvananda/netlink" + "github.com/sagernet/netlink" "golang.org/x/sys/unix" "github.com/Dreamacro/clash/component/ebpf/byteorder" diff --git a/component/ebpf/tc/redirect_to_tun.go b/component/ebpf/tc/redirect_to_tun.go index 3fbaeb1b..1edc1781 100644 --- a/component/ebpf/tc/redirect_to_tun.go +++ b/component/ebpf/tc/redirect_to_tun.go @@ -11,7 +11,7 @@ import ( "github.com/cilium/ebpf" "github.com/cilium/ebpf/rlimit" - "github.com/vishvananda/netlink" + "github.com/sagernet/netlink" "golang.org/x/sys/unix" C "github.com/Dreamacro/clash/constant" diff --git a/go.mod b/go.mod index 0c772909..580481f1 100644 --- a/go.mod +++ b/go.mod @@ -19,13 +19,13 @@ require ( github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 github.com/miekg/dns v1.1.50 github.com/oschwald/geoip2-golang v1.8.0 + github.com/sagernet/netlink v0.0.0-20220905062125-8043b4a9aa97 github.com/sagernet/sing v0.0.0-20220929000216-9a83e35b7186 github.com/sagernet/sing-shadowsocks v0.0.0-20220819002358-7461bb09a8f6 github.com/sagernet/sing-tun v0.0.0-20221012082254-488c3b75f6fd github.com/sagernet/sing-vmess v0.0.0-20220921140858-b6a1bdee672f github.com/sirupsen/logrus v1.9.0 github.com/stretchr/testify v1.8.0 - github.com/vishvananda/netlink v1.2.1-beta.2 github.com/xtls/go v0.0.0-20220914232946-0441cf4cf837 go.etcd.io/bbolt v1.3.6 go.uber.org/atomic v1.10.0 @@ -40,8 +40,6 @@ require ( ) -replace github.com/vishvananda/netlink => github.com/MetaCubeX/netlink v1.2.0-beta.0.20220529072258-d6853f887820 - replace github.com/lucas-clemente/quic-go => github.com/tobyxdd/quic-go v0.28.1-0.20220706211558-7780039ad599 require ( @@ -63,7 +61,6 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/sagernet/abx-go v0.0.0-20220819185957-dba1257d738e // indirect github.com/sagernet/go-tun2socks v1.16.12-0.20220818015926-16cb67876a61 // indirect - github.com/sagernet/netlink v0.0.0-20220905062125-8043b4a9aa97 // indirect github.com/u-root/uio v0.0.0-20220204230159-dac05f7d2cb4 // indirect github.com/vishvananda/netns v0.0.0-20220913150850-18c4f4234207 // indirect golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect diff --git a/go.sum b/go.sum index d45870ef..6c5279d7 100644 --- a/go.sum +++ b/go.sum @@ -8,8 +8,6 @@ dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1 dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/MetaCubeX/netlink v1.2.0-beta.0.20220529072258-d6853f887820 h1:fGKWZ25VApYnuPZoNeqdH/nZtHa2XMajwH6Yj/OgoVc= -github.com/MetaCubeX/netlink v1.2.0-beta.0.20220529072258-d6853f887820/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= @@ -239,7 +237,6 @@ github.com/u-root/uio v0.0.0-20220204230159-dac05f7d2cb4 h1:hl6sK6aFgTLISijk6xIz github.com/u-root/uio v0.0.0-20220204230159-dac05f7d2cb4/go.mod h1:LpEX5FO/cB+WF4TYGY1V5qktpaZLkKkSegbr0V4eYXA= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vishvananda/netns v0.0.0-20220913150850-18c4f4234207 h1:nn7SOQy8xCu3iXNv7oiBhhEQtbWdnEOMnuKBlHvrqIM= github.com/vishvananda/netns v0.0.0-20220913150850-18c4f4234207/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/xtls/go v0.0.0-20220914232946-0441cf4cf837 h1:AHhUwwFJGl27E46OpdJHplZkK09m7aETNBNzhT6t15M= @@ -336,7 +333,6 @@ golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/listener/listener.go b/listener/listener.go index 8512c0b1..d13093e3 100644 --- a/listener/listener.go +++ b/listener/listener.go @@ -337,7 +337,10 @@ func ReCreateMixed(port int, tcpIn chan<- C.ConnContext, udpIn chan<- *inbound.P func ReCreateTun(tunConf *config.Tun, tcpIn chan<- C.ConnContext, udpIn chan<- *inbound.PacketAdapter) { tunMux.Lock() - defer tunMux.Unlock() + defer func() { + lastTunConf = tunConf + tunMux.Unlock() + }() var err error defer func() { @@ -361,8 +364,6 @@ func ReCreateTun(tunConf *config.Tun, tcpIn chan<- C.ConnContext, udpIn chan<- * } tunLister, err = sing_tun.New(*tunConf, tcpIn, udpIn) - - lastTunConf = tunConf } func ReCreateRedirToTun(ifaceNames []string) { diff --git a/listener/sing_tun/server.go b/listener/sing_tun/server.go index 44824b75..f1327b33 100644 --- a/listener/sing_tun/server.go +++ b/listener/sing_tun/server.go @@ -204,10 +204,11 @@ func New(options config.Tun, tcpIn chan<- C.ConnContext, udpIn chan<- *inbound.P return } err = l.tunStack.Start() + if err != nil { return } - log.Infoln("Tun adapter listening at: %s(%s,%s), mtu: %d, auto route: %v, ip stack: %s", + log.Infoln("[TUN] Tun adapter listening at: %s(%s,%s), mtu: %d, auto route: %v, ip stack: %s", tunName, tunOptions.Inet4Address, tunOptions.Inet6Address, tunMTU, options.AutoRoute, options.Stack) return } @@ -218,9 +219,9 @@ func (l *Listener) FlushDefaultInterface() { for _, destination := range []netip.Addr{netip.IPv4Unspecified(), netip.IPv6Unspecified(), netip.MustParseAddr("1.1.1.1")} { autoDetectInterfaceName := l.defaultInterfaceMonitor.DefaultInterfaceName(destination) if autoDetectInterfaceName == l.tunName { - log.Warnln("Auto detect interface by %s get same name with tun", destination.String()) + log.Warnln("[TUN] Auto detect interface by %s get same name with tun", destination.String()) } else if autoDetectInterfaceName == "" || autoDetectInterfaceName == "" { - log.Warnln("Auto detect interface by %s get empty name.", destination.String()) + log.Warnln("[TUN] Auto detect interface by %s get empty name.", destination.String()) } else { targetInterface = autoDetectInterfaceName if old := dialer.DefaultInterface.Load(); old != targetInterface {