diff --git a/adapter/router.go b/adapter/router.go index 3cf9e6d4..df74ee0a 100644 --- a/adapter/router.go +++ b/adapter/router.go @@ -85,5 +85,5 @@ type DNSRule interface { } type InterfaceUpdateListener interface { - InterfaceUpdated() error + InterfaceUpdated() } diff --git a/common/settings/proxy_darwin.go b/common/settings/proxy_darwin.go index 595fb944..101ed096 100644 --- a/common/settings/proxy_darwin.go +++ b/common/settings/proxy_darwin.go @@ -20,10 +20,10 @@ type systemProxy struct { isMixed bool } -func (p *systemProxy) update(event int) error { +func (p *systemProxy) update(event int) { newInterfaceName := p.monitor.DefaultInterfaceName(netip.IPv4Unspecified()) if p.interfaceName == newInterfaceName { - return nil + return } if p.interfaceName != "" { _ = p.unset() @@ -31,7 +31,7 @@ func (p *systemProxy) update(event int) error { p.interfaceName = newInterfaceName interfaceDisplayName, err := getInterfaceDisplayName(p.interfaceName) if err != nil { - return err + return } if p.isMixed { err = shell.Exec("networksetup", "-setsocksfirewallproxy", interfaceDisplayName, "127.0.0.1", F.ToString(p.port)).Attach().Run() @@ -40,9 +40,9 @@ func (p *systemProxy) update(event int) error { err = shell.Exec("networksetup", "-setwebproxy", interfaceDisplayName, "127.0.0.1", F.ToString(p.port)).Attach().Run() } if err == nil { - err = shell.Exec("networksetup", "-setsecurewebproxy", interfaceDisplayName, "127.0.0.1", F.ToString(p.port)).Attach().Run() + _ = shell.Exec("networksetup", "-setsecurewebproxy", interfaceDisplayName, "127.0.0.1", F.ToString(p.port)).Attach().Run() } - return err + return } func (p *systemProxy) unset() error { @@ -88,10 +88,7 @@ func SetSystemProxy(router adapter.Router, port uint16, isMixed bool) (func() er port: port, isMixed: isMixed, } - err := proxy.update(tun.EventInterfaceUpdate) - if err != nil { - return nil, err - } + proxy.update(tun.EventInterfaceUpdate) proxy.element = interfaceMonitor.RegisterCallback(proxy.update) return func() error { interfaceMonitor.UnregisterCallback(proxy.element) diff --git a/common/tls/std_server.go b/common/tls/std_server.go index 2c875855..f2bf56eb 100644 --- a/common/tls/std_server.go +++ b/common/tls/std_server.go @@ -164,8 +164,8 @@ func NewSTDServer(ctx context.Context, router adapter.Router, logger log.Logger, var acmeService adapter.Service var err error if options.ACME != nil && len(options.ACME.Domain) > 0 { - tlsConfig, acmeService, err = startACME(ctx, common.PtrValueOrDefault(options.ACME)) //nolint:staticcheck + tlsConfig, acmeService, err = startACME(ctx, common.PtrValueOrDefault(options.ACME)) if err != nil { return nil, err } diff --git a/experimental/libbox/monitor.go b/experimental/libbox/monitor.go index 685d6ccb..1cd29139 100644 --- a/experimental/libbox/monitor.go +++ b/experimental/libbox/monitor.go @@ -1,7 +1,6 @@ package libbox import ( - "context" "net" "net/netip" "sync" @@ -9,6 +8,7 @@ import ( "github.com/sagernet/sing-tun" "github.com/sagernet/sing/common" E "github.com/sagernet/sing/common/exceptions" + "github.com/sagernet/sing/common/logger" M "github.com/sagernet/sing/common/metadata" "github.com/sagernet/sing/common/x/list" ) @@ -20,13 +20,13 @@ var ( type platformDefaultInterfaceMonitor struct { *platformInterfaceWrapper - errorHandler E.Handler networkAddresses []networkAddress defaultInterfaceName string defaultInterfaceIndex int element *list.Element[tun.NetworkUpdateCallback] access sync.Mutex callbacks list.List[tun.DefaultInterfaceUpdateCallback] + logger logger.Logger } type networkAddress struct { @@ -96,7 +96,7 @@ func (m *platformDefaultInterfaceMonitor) UpdateDefaultInterface(interfaceName s err = m.router.UpdateInterfaces() } if err != nil { - m.errorHandler.NewError(context.Background(), E.Cause(err, "update interfaces")) + m.logger.Error(E.Cause(err, "update interfaces")) } interfaceIndex := int(interfaceIndex32) if interfaceName == "" { @@ -115,10 +115,10 @@ func (m *platformDefaultInterfaceMonitor) UpdateDefaultInterface(interfaceName s } } if interfaceName == "" { - m.errorHandler.NewError(context.Background(), E.New("invalid interface name for ", interfaceIndex)) + m.logger.Error(E.New("invalid interface name for ", interfaceIndex)) return } else if interfaceIndex == -1 { - m.errorHandler.NewError(context.Background(), E.New("invalid interface index for ", interfaceName)) + m.logger.Error(E.New("invalid interface index for ", interfaceName)) return } if m.defaultInterfaceName == interfaceName && m.defaultInterfaceIndex == interfaceIndex { @@ -130,10 +130,7 @@ func (m *platformDefaultInterfaceMonitor) UpdateDefaultInterface(interfaceName s callbacks := m.callbacks.Array() m.access.Unlock() for _, callback := range callbacks { - err = callback(tun.EventInterfaceUpdate) - if err != nil { - m.errorHandler.NewError(context.Background(), err) - } + callback(tun.EventInterfaceUpdate) } } diff --git a/experimental/libbox/platform/interface.go b/experimental/libbox/platform/interface.go index e811bdb0..e99d842d 100644 --- a/experimental/libbox/platform/interface.go +++ b/experimental/libbox/platform/interface.go @@ -10,7 +10,7 @@ import ( "github.com/sagernet/sing-box/option" "github.com/sagernet/sing-tun" "github.com/sagernet/sing/common/control" - E "github.com/sagernet/sing/common/exceptions" + "github.com/sagernet/sing/common/logger" ) type Interface interface { @@ -19,7 +19,7 @@ type Interface interface { AutoDetectInterfaceControl() control.Func OpenTun(options *tun.Options, platformOptions option.TunPlatformOptions) (tun.Tun, error) UsePlatformDefaultInterfaceMonitor() bool - CreateDefaultInterfaceMonitor(errorHandler E.Handler) tun.DefaultInterfaceMonitor + CreateDefaultInterfaceMonitor(logger logger.Logger) tun.DefaultInterfaceMonitor UsePlatformInterfaceGetter() bool Interfaces() ([]NetworkInterface, error) UnderNetworkExtension() bool diff --git a/experimental/libbox/service.go b/experimental/libbox/service.go index 0b63659e..dc8c5caf 100644 --- a/experimental/libbox/service.go +++ b/experimental/libbox/service.go @@ -17,6 +17,7 @@ import ( "github.com/sagernet/sing/common" "github.com/sagernet/sing/common/control" E "github.com/sagernet/sing/common/exceptions" + "github.com/sagernet/sing/common/logger" N "github.com/sagernet/sing/common/network" "github.com/sagernet/sing/service" "github.com/sagernet/sing/service/filemanager" @@ -158,11 +159,11 @@ func (w *platformInterfaceWrapper) UsePlatformDefaultInterfaceMonitor() bool { return w.iif.UsePlatformDefaultInterfaceMonitor() } -func (w *platformInterfaceWrapper) CreateDefaultInterfaceMonitor(errorHandler E.Handler) tun.DefaultInterfaceMonitor { +func (w *platformInterfaceWrapper) CreateDefaultInterfaceMonitor(logger logger.Logger) tun.DefaultInterfaceMonitor { return &platformDefaultInterfaceMonitor{ platformInterfaceWrapper: w, - errorHandler: errorHandler, defaultInterfaceIndex: -1, + logger: logger, } } diff --git a/go.mod b/go.mod index 3d5495d1..eaf2a0a7 100644 --- a/go.mod +++ b/go.mod @@ -25,13 +25,13 @@ require ( github.com/sagernet/gvisor v0.0.0-20230627031050-1ab0276e0dd2 github.com/sagernet/quic-go v0.0.0-20230731012313-1327e4015111 github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691 - github.com/sagernet/sing v0.2.10-0.20230802105922-c6a69b4912ee + github.com/sagernet/sing v0.2.10-0.20230820051732-fabfb87d9f29 github.com/sagernet/sing-dns v0.1.9-0.20230731012726-ad50da89b659 github.com/sagernet/sing-mux v0.1.3-0.20230803070305-ea4a972acd21 github.com/sagernet/sing-shadowsocks v0.2.4 github.com/sagernet/sing-shadowsocks2 v0.1.3 github.com/sagernet/sing-shadowtls v0.1.4 - github.com/sagernet/sing-tun v0.1.11 + github.com/sagernet/sing-tun v0.1.12-0.20230807123152-0a68b9f1d873 github.com/sagernet/sing-vmess v0.1.7 github.com/sagernet/smux v0.0.0-20230312102458-337ec2a5af37 github.com/sagernet/tfo-go v0.0.0-20230303015439-ffcfd8c41cf9 diff --git a/go.sum b/go.sum index 6177326b..3ea3464a 100644 --- a/go.sum +++ b/go.sum @@ -116,8 +116,8 @@ github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691 h1:5Th31OC6yj8byL github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691/go.mod h1:B8lp4WkQ1PwNnrVMM6KyuFR20pU8jYBD+A4EhJovEXU= github.com/sagernet/sing v0.0.0-20220817130738-ce854cda8522/go.mod h1:QVsS5L/ZA2Q5UhQwLrn0Trw+msNd/NPGEhBKR/ioWiY= github.com/sagernet/sing v0.1.8/go.mod h1:jt1w2u7lJQFFSGLiRrRIs5YWmx4kAPfWuOejuDW9qMk= -github.com/sagernet/sing v0.2.10-0.20230802105922-c6a69b4912ee h1:5MATgtWMh2TCAVMtQnC3UcVMympANU7zXEekctD29PY= -github.com/sagernet/sing v0.2.10-0.20230802105922-c6a69b4912ee/go.mod h1:9uOZwWkhT2Z2WldolLxX34s+1svAX4i4vvz5hy8u1MA= +github.com/sagernet/sing v0.2.10-0.20230820051732-fabfb87d9f29 h1:TGSiSJ5noRdmDW0vd1sc/WICJWoT2ulOhD/igXh8PJc= +github.com/sagernet/sing v0.2.10-0.20230820051732-fabfb87d9f29/go.mod h1:9uOZwWkhT2Z2WldolLxX34s+1svAX4i4vvz5hy8u1MA= github.com/sagernet/sing-dns v0.1.9-0.20230731012726-ad50da89b659 h1:1DAKccGNqTYJ8nsBR765FS0LVBVXfuFlFAHqKsGN3EI= github.com/sagernet/sing-dns v0.1.9-0.20230731012726-ad50da89b659/go.mod h1:W7GHTZFS8RkoLI3bA2LFY27/0E+uoQESWtMFLepO/JA= github.com/sagernet/sing-mux v0.1.3-0.20230803070305-ea4a972acd21 h1:IQ7oBBKz+lwIqwI9IMStlQ9YSUu3eKJmNTip0aLbvOI= @@ -128,8 +128,8 @@ github.com/sagernet/sing-shadowsocks2 v0.1.3 h1:WXoLvCFi5JTFBRYorf1YePGYIQyJ/zbs github.com/sagernet/sing-shadowsocks2 v0.1.3/go.mod h1:DOhJc/cLeqRv0wuePrQso+iUmDxOnWF4eT/oMcRzYFw= github.com/sagernet/sing-shadowtls v0.1.4 h1:aTgBSJEgnumzFenPvc+kbD9/W0PywzWevnVpEx6Tw3k= github.com/sagernet/sing-shadowtls v0.1.4/go.mod h1:F8NBgsY5YN2beQavdgdm1DPlhaKQlaL6lpDdcBglGK4= -github.com/sagernet/sing-tun v0.1.11 h1:wUfRQZ4eHk8suHkGKEFxjV5uXl3tfZhPm/v14/4lHvk= -github.com/sagernet/sing-tun v0.1.11/go.mod h1:XsyIVKd/Qp+2SdLZWGbavHtcpE7J7XU3S1zJmcoj9Ck= +github.com/sagernet/sing-tun v0.1.12-0.20230807123152-0a68b9f1d873 h1:f1ejTKI6R+rQ2vHyD5pNHy0V+MhfBD1l8wiYyhTscnI= +github.com/sagernet/sing-tun v0.1.12-0.20230807123152-0a68b9f1d873/go.mod h1:XsyIVKd/Qp+2SdLZWGbavHtcpE7J7XU3S1zJmcoj9Ck= github.com/sagernet/sing-vmess v0.1.7 h1:TM8FFLsXmlXH9XT8/oDgc6PC5BOzrg6OzyEe01is2r4= github.com/sagernet/sing-vmess v0.1.7/go.mod h1:1qkC1L1T2sxnS/NuO6HU72S8TkltV+EXoKGR29m/Yss= github.com/sagernet/smux v0.0.0-20230312102458-337ec2a5af37 h1:HuE6xSwco/Xed8ajZ+coeYLmioq0Qp1/Z2zczFaV8as= diff --git a/option/types.go b/option/types.go index f4dd4b48..8a5e6cfc 100644 --- a/option/types.go +++ b/option/types.go @@ -98,9 +98,9 @@ func (l *Listable[T]) UnmarshalJSON(content []byte) error { return nil } var singleItem T - err = json.Unmarshal(content, &singleItem) - if err != nil { - return err + newError := json.Unmarshal(content, &singleItem) + if newError != nil { + return E.Errors(err, newError) } *l = []T{singleItem} return nil diff --git a/outbound/hysteria.go b/outbound/hysteria.go index 207b9c4c..2c13ac6c 100644 --- a/outbound/hysteria.go +++ b/outbound/hysteria.go @@ -241,9 +241,9 @@ func (h *Hysteria) udpRecvLoop(conn quic.Connection) { } } -func (h *Hysteria) InterfaceUpdated() error { +func (h *Hysteria) InterfaceUpdated() { h.Close() - return nil + return } func (h *Hysteria) Close() error { diff --git a/outbound/shadowsocks.go b/outbound/shadowsocks.go index 79c18427..2f7d92cb 100644 --- a/outbound/shadowsocks.go +++ b/outbound/shadowsocks.go @@ -129,11 +129,11 @@ func (h *Shadowsocks) NewPacketConnection(ctx context.Context, conn N.PacketConn return NewPacketConnection(ctx, h, conn, metadata) } -func (h *Shadowsocks) InterfaceUpdated() error { +func (h *Shadowsocks) InterfaceUpdated() { if h.multiplexDialer != nil { h.multiplexDialer.Reset() } - return nil + return } func (h *Shadowsocks) Close() error { diff --git a/outbound/ssh.go b/outbound/ssh.go index 4f434e78..93e5a7bc 100644 --- a/outbound/ssh.go +++ b/outbound/ssh.go @@ -174,9 +174,9 @@ func (s *SSH) connect() (*ssh.Client, error) { return client, nil } -func (s *SSH) InterfaceUpdated() error { +func (s *SSH) InterfaceUpdated() { common.Close(s.clientConn) - return nil + return } func (s *SSH) Close() error { diff --git a/outbound/trojan.go b/outbound/trojan.go index 3fc53171..a12041e4 100644 --- a/outbound/trojan.go +++ b/outbound/trojan.go @@ -104,11 +104,11 @@ func (h *Trojan) NewPacketConnection(ctx context.Context, conn N.PacketConn, met return NewPacketConnection(ctx, h, conn, metadata) } -func (h *Trojan) InterfaceUpdated() error { +func (h *Trojan) InterfaceUpdated() { if h.multiplexDialer != nil { h.multiplexDialer.Reset() } - return nil + return } func (h *Trojan) Close() error { diff --git a/outbound/urltest.go b/outbound/urltest.go index 1c95084d..bd828e4b 100644 --- a/outbound/urltest.go +++ b/outbound/urltest.go @@ -138,9 +138,9 @@ func (s *URLTest) NewPacketConnection(ctx context.Context, conn N.PacketConn, me return NewPacketConnection(ctx, s, conn, metadata) } -func (s *URLTest) InterfaceUpdated() error { +func (s *URLTest) InterfaceUpdated() { go s.group.CheckOutbounds(true) - return nil + return } type URLTestGroup struct { diff --git a/outbound/vless.go b/outbound/vless.go index 85f79fc6..12574467 100644 --- a/outbound/vless.go +++ b/outbound/vless.go @@ -123,11 +123,11 @@ func (h *VLESS) NewPacketConnection(ctx context.Context, conn N.PacketConn, meta return NewPacketConnection(ctx, h, conn, metadata) } -func (h *VLESS) InterfaceUpdated() error { +func (h *VLESS) InterfaceUpdated() { if h.multiplexDialer != nil { h.multiplexDialer.Reset() } - return nil + return } func (h *VLESS) Close() error { diff --git a/outbound/vmess.go b/outbound/vmess.go index e4113854..6f7735fc 100644 --- a/outbound/vmess.go +++ b/outbound/vmess.go @@ -98,11 +98,11 @@ func NewVMess(ctx context.Context, router adapter.Router, logger log.ContextLogg return outbound, nil } -func (h *VMess) InterfaceUpdated() error { +func (h *VMess) InterfaceUpdated() { if h.multiplexDialer != nil { h.multiplexDialer.Reset() } - return nil + return } func (h *VMess) Close() error { diff --git a/outbound/wireguard.go b/outbound/wireguard.go index 4c2126c6..eb8f65db 100644 --- a/outbound/wireguard.go +++ b/outbound/wireguard.go @@ -186,9 +186,9 @@ func NewWireGuard(ctx context.Context, router adapter.Router, logger log.Context return outbound, nil } -func (w *WireGuard) InterfaceUpdated() error { +func (w *WireGuard) InterfaceUpdated() { w.bind.Reset() - return nil + return } func (w *WireGuard) DialContext(ctx context.Context, network string, destination M.Socksaddr) (net.Conn, error) { diff --git a/route/router.go b/route/router.go index c23c8a45..568db59a 100644 --- a/route/router.go +++ b/route/router.go @@ -262,14 +262,16 @@ func NewRouter( if needInterfaceMonitor { if !usePlatformDefaultInterfaceMonitor { - networkMonitor, err := tun.NewNetworkUpdateMonitor(router) + networkMonitor, err := tun.NewNetworkUpdateMonitor(router.logger) if err != os.ErrInvalid { if err != nil { return nil, err } router.networkMonitor = networkMonitor - networkMonitor.RegisterCallback(router.interfaceFinder.update) - interfaceMonitor, err := tun.NewDefaultInterfaceMonitor(router.networkMonitor, tun.DefaultInterfaceMonitorOptions{ + networkMonitor.RegisterCallback(func() { + _ = router.interfaceFinder.update() + }) + interfaceMonitor, err := tun.NewDefaultInterfaceMonitor(router.networkMonitor, router.logger, tun.DefaultInterfaceMonitorOptions{ OverrideAndroidVPN: options.OverrideAndroidVPN, UnderNetworkExtension: platformInterface != nil && platformInterface.UnderNetworkExtension(), }) @@ -280,7 +282,7 @@ func NewRouter( router.interfaceMonitor = interfaceMonitor } } else { - interfaceMonitor := platformInterface.CreateDefaultInterfaceMonitor(router) + interfaceMonitor := platformInterface.CreateDefaultInterfaceMonitor(router.logger) interfaceMonitor.RegisterCallback(router.notifyNetworkUpdate) router.interfaceMonitor = interfaceMonitor } @@ -970,17 +972,21 @@ func (r *Router) NewError(ctx context.Context, err error) { r.logger.ErrorContext(ctx, err) } -func (r *Router) notifyNetworkUpdate(int) error { - if C.IsAndroid && r.platformInterface == nil { - var vpnStatus string - if r.interfaceMonitor.AndroidVPNEnabled() { - vpnStatus = "enabled" - } else { - vpnStatus = "disabled" - } - r.logger.Info("updated default interface ", r.interfaceMonitor.DefaultInterfaceName(netip.IPv4Unspecified()), ", index ", r.interfaceMonitor.DefaultInterfaceIndex(netip.IPv4Unspecified()), ", vpn ", vpnStatus) +func (r *Router) notifyNetworkUpdate(event int) { + if event == tun.EventNoRoute { + r.logger.Info("missing default interface") } else { - r.logger.Info("updated default interface ", r.interfaceMonitor.DefaultInterfaceName(netip.IPv4Unspecified()), ", index ", r.interfaceMonitor.DefaultInterfaceIndex(netip.IPv4Unspecified())) + if C.IsAndroid && r.platformInterface == nil { + var vpnStatus string + if r.interfaceMonitor.AndroidVPNEnabled() { + vpnStatus = "enabled" + } else { + vpnStatus = "disabled" + } + r.logger.Info("updated default interface ", r.interfaceMonitor.DefaultInterfaceName(netip.IPv4Unspecified()), ", index ", r.interfaceMonitor.DefaultInterfaceIndex(netip.IPv4Unspecified()), ", vpn ", vpnStatus) + } else { + r.logger.Info("updated default interface ", r.interfaceMonitor.DefaultInterfaceName(netip.IPv4Unspecified()), ", index ", r.interfaceMonitor.DefaultInterfaceIndex(netip.IPv4Unspecified())) + } } conntrack.Close() @@ -988,13 +994,10 @@ func (r *Router) notifyNetworkUpdate(int) error { for _, outbound := range r.outbounds { listener, isListener := outbound.(adapter.InterfaceUpdateListener) if isListener { - err := listener.InterfaceUpdated() - if err != nil { - return err - } + listener.InterfaceUpdated() } } - return nil + return } func (r *Router) ResetNetwork() error { @@ -1003,10 +1006,7 @@ func (r *Router) ResetNetwork() error { for _, outbound := range r.outbounds { listener, isListener := outbound.(adapter.InterfaceUpdateListener) if isListener { - err := listener.InterfaceUpdated() - if err != nil { - return err - } + listener.InterfaceUpdated() } } return nil diff --git a/test/go.mod b/test/go.mod index ad76cd38..a55a609c 100644 --- a/test/go.mod +++ b/test/go.mod @@ -10,7 +10,7 @@ require ( github.com/docker/docker v20.10.18+incompatible github.com/docker/go-connections v0.4.0 github.com/gofrs/uuid/v5 v5.0.0 - github.com/sagernet/sing v0.2.10-0.20230802105922-c6a69b4912ee + github.com/sagernet/sing v0.2.10-0.20230820051732-fabfb87d9f29 github.com/sagernet/sing-shadowsocks v0.2.4 github.com/sagernet/sing-shadowsocks2 v0.1.3 github.com/spyzhov/ajson v0.7.1 @@ -76,7 +76,7 @@ require ( github.com/sagernet/sing-dns v0.1.9-0.20230731012726-ad50da89b659 // indirect github.com/sagernet/sing-mux v0.1.3-0.20230803070305-ea4a972acd21 // indirect github.com/sagernet/sing-shadowtls v0.1.4 // indirect - github.com/sagernet/sing-tun v0.1.11 // indirect + github.com/sagernet/sing-tun v0.1.12-0.20230807123152-0a68b9f1d873 // indirect github.com/sagernet/sing-vmess v0.1.7 // indirect github.com/sagernet/smux v0.0.0-20230312102458-337ec2a5af37 // indirect github.com/sagernet/tfo-go v0.0.0-20230303015439-ffcfd8c41cf9 // indirect diff --git a/test/go.sum b/test/go.sum index 3ed47839..74e32eb8 100644 --- a/test/go.sum +++ b/test/go.sum @@ -132,8 +132,9 @@ github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691 h1:5Th31OC6yj8byL github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691/go.mod h1:B8lp4WkQ1PwNnrVMM6KyuFR20pU8jYBD+A4EhJovEXU= github.com/sagernet/sing v0.0.0-20220817130738-ce854cda8522/go.mod h1:QVsS5L/ZA2Q5UhQwLrn0Trw+msNd/NPGEhBKR/ioWiY= github.com/sagernet/sing v0.1.8/go.mod h1:jt1w2u7lJQFFSGLiRrRIs5YWmx4kAPfWuOejuDW9qMk= -github.com/sagernet/sing v0.2.10-0.20230802105922-c6a69b4912ee h1:5MATgtWMh2TCAVMtQnC3UcVMympANU7zXEekctD29PY= -github.com/sagernet/sing v0.2.10-0.20230802105922-c6a69b4912ee/go.mod h1:9uOZwWkhT2Z2WldolLxX34s+1svAX4i4vvz5hy8u1MA= +github.com/sagernet/sing v0.2.10-0.20230807080248-4db0062caa0a h1:b89t6Mjgk4rJ5lrNMnCzy1/J116XkhgdB3YNd9FHyF4= +github.com/sagernet/sing v0.2.10-0.20230807080248-4db0062caa0a/go.mod h1:9uOZwWkhT2Z2WldolLxX34s+1svAX4i4vvz5hy8u1MA= +github.com/sagernet/sing v0.2.10-0.20230820051732-fabfb87d9f29/go.mod h1:9uOZwWkhT2Z2WldolLxX34s+1svAX4i4vvz5hy8u1MA= github.com/sagernet/sing-dns v0.1.9-0.20230731012726-ad50da89b659 h1:1DAKccGNqTYJ8nsBR765FS0LVBVXfuFlFAHqKsGN3EI= github.com/sagernet/sing-dns v0.1.9-0.20230731012726-ad50da89b659/go.mod h1:W7GHTZFS8RkoLI3bA2LFY27/0E+uoQESWtMFLepO/JA= github.com/sagernet/sing-mux v0.1.3-0.20230803070305-ea4a972acd21 h1:IQ7oBBKz+lwIqwI9IMStlQ9YSUu3eKJmNTip0aLbvOI= @@ -144,8 +145,8 @@ github.com/sagernet/sing-shadowsocks2 v0.1.3 h1:WXoLvCFi5JTFBRYorf1YePGYIQyJ/zbs github.com/sagernet/sing-shadowsocks2 v0.1.3/go.mod h1:DOhJc/cLeqRv0wuePrQso+iUmDxOnWF4eT/oMcRzYFw= github.com/sagernet/sing-shadowtls v0.1.4 h1:aTgBSJEgnumzFenPvc+kbD9/W0PywzWevnVpEx6Tw3k= github.com/sagernet/sing-shadowtls v0.1.4/go.mod h1:F8NBgsY5YN2beQavdgdm1DPlhaKQlaL6lpDdcBglGK4= -github.com/sagernet/sing-tun v0.1.11 h1:wUfRQZ4eHk8suHkGKEFxjV5uXl3tfZhPm/v14/4lHvk= -github.com/sagernet/sing-tun v0.1.11/go.mod h1:XsyIVKd/Qp+2SdLZWGbavHtcpE7J7XU3S1zJmcoj9Ck= +github.com/sagernet/sing-tun v0.1.12-0.20230807123152-0a68b9f1d873 h1:f1ejTKI6R+rQ2vHyD5pNHy0V+MhfBD1l8wiYyhTscnI= +github.com/sagernet/sing-tun v0.1.12-0.20230807123152-0a68b9f1d873/go.mod h1:XsyIVKd/Qp+2SdLZWGbavHtcpE7J7XU3S1zJmcoj9Ck= github.com/sagernet/sing-vmess v0.1.7 h1:TM8FFLsXmlXH9XT8/oDgc6PC5BOzrg6OzyEe01is2r4= github.com/sagernet/sing-vmess v0.1.7/go.mod h1:1qkC1L1T2sxnS/NuO6HU72S8TkltV+EXoKGR29m/Yss= github.com/sagernet/smux v0.0.0-20230312102458-337ec2a5af37 h1:HuE6xSwco/Xed8ajZ+coeYLmioq0Qp1/Z2zczFaV8as= diff --git a/transport/dhcp/server.go b/transport/dhcp/server.go index ae93d52c..e3f1aed8 100644 --- a/transport/dhcp/server.go +++ b/transport/dhcp/server.go @@ -162,8 +162,11 @@ func (t *Transport) updateServers() error { } } -func (t *Transport) interfaceUpdated(int) error { - return t.updateServers() +func (t *Transport) interfaceUpdated(int) { + err := t.updateServers() + if err != nil { + t.logger.Error("update servers: ", err) + } } func (t *Transport) fetchServers0(ctx context.Context, iface *net.Interface) error {