Преглед изворни кода

platform: Add UsePlatformAutoDetectInterfaceControl

世界 пре 2 година
родитељ
комит
3a92bf993d

+ 1 - 0
experimental/libbox/platform.go

@@ -5,6 +5,7 @@ import (
 )
 
 type PlatformInterface interface {
+	UsePlatformAutoDetectInterfaceControl() bool
 	AutoDetectInterfaceControl(fd int32) error
 	OpenTun(options TunOptions) (int32, error)
 	WriteLog(message string)

+ 1 - 0
experimental/libbox/platform/interface.go

@@ -15,6 +15,7 @@ import (
 
 type Interface interface {
 	Initialize(ctx context.Context, router adapter.Router) error
+	UsePlatformAutoDetectInterfaceControl() bool
 	AutoDetectInterfaceControl() control.Func
 	OpenTun(options *tun.Options, platformOptions option.TunPlatformOptions) (tun.Tun, error)
 	UsePlatformDefaultInterfaceMonitor() bool

+ 4 - 0
experimental/libbox/service.go

@@ -68,6 +68,10 @@ func (w *platformInterfaceWrapper) Initialize(ctx context.Context, router adapte
 	return nil
 }
 
+func (w *platformInterfaceWrapper) UsePlatformAutoDetectInterfaceControl() bool {
+	return w.iif.UsePlatformAutoDetectInterfaceControl()
+}
+
 func (w *platformInterfaceWrapper) AutoDetectInterfaceControl() control.Func {
 	return func(network, address string, conn syscall.RawConn) error {
 		return control.Raw(conn, func(fd uintptr) error {

+ 1 - 1
route/router.go

@@ -823,7 +823,7 @@ func (r *Router) AutoDetectInterface() bool {
 }
 
 func (r *Router) AutoDetectInterfaceFunc() control.Func {
-	if r.platformInterface != nil {
+	if r.platformInterface != nil && r.platformInterface.UsePlatformAutoDetectInterfaceControl() {
 		return r.platformInterface.AutoDetectInterfaceControl()
 	} else {
 		return control.BindToInterfaceFunc(r.InterfaceFinder(), func(network string, address string) (interfaceName string, interfaceIndex int) {