Selaa lähdekoodia

prevent creation of bind and mark controls on unsupported platforms

世界 5 kuukautta sitten
vanhempi
sitoutus
d5432b4c27
2 muutettua tiedostoa jossa 15 lisäystä ja 0 poistoa
  1. 6 0
      common/dialer/default.go
  2. 9 0
      route/network.go

+ 6 - 0
common/dialer/default.go

@@ -66,11 +66,17 @@ func NewDefault(ctx context.Context, options option.DialerOptions) (*DefaultDial
 		interfaceFinder = control.NewDefaultInterfaceFinder()
 	}
 	if options.BindInterface != "" {
+		if !(C.IsLinux || C.IsDarwin || C.IsWindows) {
+			return nil, E.New("`bind_interface` is only supported on Linux, macOS and Windows")
+		}
 		bindFunc := control.BindToInterface(interfaceFinder, options.BindInterface, -1)
 		dialer.Control = control.Append(dialer.Control, bindFunc)
 		listener.Control = control.Append(listener.Control, bindFunc)
 	}
 	if options.RoutingMark > 0 {
+		if !C.IsLinux {
+			return nil, E.New("`routing_mark` is only supported on Linux")
+		}
 		dialer.Control = control.Append(dialer.Control, setMarkWrapper(networkManager, uint32(options.RoutingMark), false))
 		listener.Control = control.Append(listener.Control, setMarkWrapper(networkManager, uint32(options.RoutingMark), false))
 	}

+ 9 - 0
route/network.go

@@ -57,6 +57,15 @@ type NetworkManager struct {
 
 func NewNetworkManager(ctx context.Context, logger logger.ContextLogger, routeOptions option.RouteOptions) (*NetworkManager, error) {
 	defaultDomainResolver := common.PtrValueOrDefault(routeOptions.DefaultDomainResolver)
+	if routeOptions.AutoDetectInterface && !(C.IsLinux || C.IsDarwin || C.IsWindows) {
+		return nil, E.New("`auto_detect_interface` is only supported on Linux, Windows and macOS")
+	} else if routeOptions.OverrideAndroidVPN && !C.IsAndroid {
+		return nil, E.New("`override_android_vpn` is only supported on Android")
+	} else if routeOptions.DefaultInterface != "" && !(C.IsLinux || C.IsDarwin || C.IsWindows) {
+		return nil, E.New("`default_interface` is only supported on Linux, Windows and macOS")
+	} else if routeOptions.DefaultMark != 0 && !C.IsLinux {
+		return nil, E.New("`default_mark` is only supported on linux")
+	}
 	nm := &NetworkManager{
 		logger:              logger,
 		interfaceFinder:     control.NewDefaultInterfaceFinder(),