chore: don't start UpdateMonitor when AutoRoute not enabled

This commit is contained in:
wwqgtxx 2024-09-10 17:06:44 +08:00
parent 89b9438fc0
commit f8557f5fd8

View File

@ -132,7 +132,7 @@ func New(options LC.Tun, tunnel C.Tunnel, additions ...inbound.Addition) (l *Lis
if options.GSOMaxSize == 0 { if options.GSOMaxSize == 0 {
options.GSOMaxSize = 65536 options.GSOMaxSize = 65536
} }
if !supportRedirect { if !supportRedirect || !options.AutoRoute {
options.AutoRedirect = false options.AutoRedirect = false
} }
tunName := options.Device tunName := options.Device
@ -264,31 +264,35 @@ func New(options LC.Tun, tunnel C.Tunnel, additions ...inbound.Addition) (l *Lis
interfaceFinder := DefaultInterfaceFinder interfaceFinder := DefaultInterfaceFinder
networkUpdateMonitor, err := tun.NewNetworkUpdateMonitor(log.SingLogger) var networkUpdateMonitor tun.NetworkUpdateMonitor
if err != nil { var defaultInterfaceMonitor tun.DefaultInterfaceMonitor
err = E.Cause(err, "create NetworkUpdateMonitor") if options.AutoRoute { // don't start NetworkUpdateMonitor because netlink banned by google on Android14+
return networkUpdateMonitor, err = tun.NewNetworkUpdateMonitor(log.SingLogger)
} if err != nil {
l.networkUpdateMonitor = networkUpdateMonitor err = E.Cause(err, "create NetworkUpdateMonitor")
err = networkUpdateMonitor.Start() return
if err != nil { }
err = E.Cause(err, "start NetworkUpdateMonitor") l.networkUpdateMonitor = networkUpdateMonitor
return err = networkUpdateMonitor.Start()
} if err != nil {
err = E.Cause(err, "start NetworkUpdateMonitor")
return
}
defaultInterfaceMonitor, err := tun.NewDefaultInterfaceMonitor(networkUpdateMonitor, log.SingLogger, tun.DefaultInterfaceMonitorOptions{OverrideAndroidVPN: true}) defaultInterfaceMonitor, err = tun.NewDefaultInterfaceMonitor(networkUpdateMonitor, log.SingLogger, tun.DefaultInterfaceMonitorOptions{OverrideAndroidVPN: true})
if err != nil { if err != nil {
err = E.Cause(err, "create DefaultInterfaceMonitor") err = E.Cause(err, "create DefaultInterfaceMonitor")
return return
} }
l.defaultInterfaceMonitor = defaultInterfaceMonitor l.defaultInterfaceMonitor = defaultInterfaceMonitor
defaultInterfaceMonitor.RegisterCallback(func(event int) { defaultInterfaceMonitor.RegisterCallback(func(event int) {
l.FlushDefaultInterface() l.FlushDefaultInterface()
}) })
err = defaultInterfaceMonitor.Start() err = defaultInterfaceMonitor.Start()
if err != nil { if err != nil {
err = E.Cause(err, "start DefaultInterfaceMonitor") err = E.Cause(err, "start DefaultInterfaceMonitor")
return return
}
} }
tunOptions := tun.Options{ tunOptions := tun.Options{
@ -331,7 +335,7 @@ func New(options LC.Tun, tunnel C.Tunnel, additions ...inbound.Addition) (l *Lis
Context: ctx, Context: ctx,
Handler: handler.TypeMutation(C.REDIR), Handler: handler.TypeMutation(C.REDIR),
Logger: log.SingLogger, Logger: log.SingLogger,
NetworkMonitor: networkUpdateMonitor, NetworkMonitor: l.networkUpdateMonitor,
InterfaceFinder: interfaceFinder, InterfaceFinder: interfaceFinder,
TableName: "mihomo", TableName: "mihomo",
DisableNFTables: dErr == nil && disableNFTables, DisableNFTables: dErr == nil && disableNFTables,
@ -489,7 +493,7 @@ func (l *Listener) updateRule(ruleProvider provider.RuleProvider, exclude bool,
} }
func (l *Listener) FlushDefaultInterface() { func (l *Listener) FlushDefaultInterface() {
if l.options.AutoDetectInterface { if l.options.AutoDetectInterface && l.defaultInterfaceMonitor != nil {
for _, destination := range []netip.Addr{netip.IPv4Unspecified(), netip.IPv6Unspecified(), netip.MustParseAddr("1.1.1.1")} { for _, destination := range []netip.Addr{netip.IPv4Unspecified(), netip.IPv6Unspecified(), netip.MustParseAddr("1.1.1.1")} {
autoDetectInterfaceName := l.defaultInterfaceMonitor.DefaultInterfaceName(destination) autoDetectInterfaceName := l.defaultInterfaceMonitor.DefaultInterfaceName(destination)
if autoDetectInterfaceName == l.tunName { if autoDetectInterfaceName == l.tunName {