Просмотр исходного кода

Exclude gVisor for unsupported arch

世界 3 лет назад
Родитель
Сommit
cf845d946e
6 измененных файлов с 77 добавлено и 5 удалено
  1. 2 0
      inbound/tun.go
  2. 16 0
      inbound/tun_stub.go
  3. 22 0
      route/iface.go
  4. 17 0
      route/iface_stub.go
  5. 16 0
      route/iface_tun.go
  6. 4 5
      route/router.go

+ 2 - 0
inbound/tun.go

@@ -1,3 +1,5 @@
+//go:build linux || windows
+
 package inbound
 
 import (

+ 16 - 0
inbound/tun_stub.go

@@ -0,0 +1,16 @@
+//go:build !linux && !windows
+
+package inbound
+
+import (
+	"context"
+	"os"
+
+	"github.com/sagernet/sing-box/adapter"
+	"github.com/sagernet/sing-box/log"
+	"github.com/sagernet/sing-box/option"
+)
+
+func NewTun(ctx context.Context, router adapter.Router, logger log.ContextLogger, tag string, options option.TunInboundOptions) (adapter.Inbound, error) {
+	return nil, os.ErrInvalid
+}

+ 22 - 0
route/iface.go

@@ -0,0 +1,22 @@
+package route
+
+import "github.com/sagernet/sing/common/x/list"
+
+type (
+	NetworkUpdateCallback          = func() error
+	DefaultInterfaceUpdateCallback = func()
+)
+
+type NetworkUpdateMonitor interface {
+	Start() error
+	Close() error
+	RegisterCallback(callback NetworkUpdateCallback) *list.Element[NetworkUpdateCallback]
+	UnregisterCallback(element *list.Element[NetworkUpdateCallback])
+}
+
+type DefaultInterfaceMonitor interface {
+	Start() error
+	Close() error
+	DefaultInterfaceName() string
+	DefaultInterfaceIndex() int
+}

+ 17 - 0
route/iface_stub.go

@@ -0,0 +1,17 @@
+//go:build !linux && !windows
+
+package route
+
+import (
+	"os"
+
+	E "github.com/sagernet/sing/common/exceptions"
+)
+
+func NewNetworkUpdateMonitor(errorHandler E.Handler) (NetworkUpdateMonitor, error) {
+	return nil, os.ErrInvalid
+}
+
+func NewDefaultInterfaceMonitor(networkMonitor NetworkUpdateMonitor, callback DefaultInterfaceUpdateCallback) (DefaultInterfaceMonitor, error) {
+	return nil, os.ErrInvalid
+}

+ 16 - 0
route/iface_tun.go

@@ -0,0 +1,16 @@
+//go:build linux || windows
+
+package route
+
+import (
+	"github.com/sagernet/sing-tun"
+	E "github.com/sagernet/sing/common/exceptions"
+)
+
+func NewNetworkUpdateMonitor(errorHandler E.Handler) (NetworkUpdateMonitor, error) {
+	return tun.NewNetworkUpdateMonitor(errorHandler)
+}
+
+func NewDefaultInterfaceMonitor(networkMonitor NetworkUpdateMonitor, callback DefaultInterfaceUpdateCallback) (DefaultInterfaceMonitor, error) {
+	return tun.NewDefaultInterfaceMonitor(networkMonitor, callback)
+}

+ 4 - 5
route/router.go

@@ -22,7 +22,6 @@ import (
 	"github.com/sagernet/sing-box/log"
 	"github.com/sagernet/sing-box/option"
 	"github.com/sagernet/sing-dns"
-	"github.com/sagernet/sing-tun"
 	"github.com/sagernet/sing/common"
 	"github.com/sagernet/sing/common/buf"
 	"github.com/sagernet/sing/common/bufio"
@@ -66,10 +65,10 @@ type Router struct {
 	transportMap          map[string]dns.Transport
 
 	interfaceBindManager control.BindManager
-	networkMonitor       tun.NetworkUpdateMonitor
+	networkMonitor       NetworkUpdateMonitor
 	autoDetectInterface  bool
 	defaultInterface     string
-	interfaceMonitor     tun.DefaultInterfaceMonitor
+	interfaceMonitor     DefaultInterfaceMonitor
 }
 
 func NewRouter(ctx context.Context, logger log.ContextLogger, dnsLogger log.ContextLogger, options option.RouteOptions, dnsOptions option.DNSOptions) (*Router, error) {
@@ -199,7 +198,7 @@ func NewRouter(ctx context.Context, logger log.ContextLogger, dnsLogger log.Cont
 	router.transportMap = transportMap
 
 	if router.interfaceBindManager != nil || options.AutoDetectInterface {
-		networkMonitor, err := tun.NewNetworkUpdateMonitor(router)
+		networkMonitor, err := NewNetworkUpdateMonitor(router)
 		if err == nil {
 			router.networkMonitor = networkMonitor
 			if router.interfaceBindManager != nil {
@@ -209,7 +208,7 @@ func NewRouter(ctx context.Context, logger log.ContextLogger, dnsLogger log.Cont
 	}
 
 	if router.networkMonitor != nil && options.AutoDetectInterface {
-		interfaceMonitor, err := tun.NewDefaultInterfaceMonitor(router.networkMonitor, func() {
+		interfaceMonitor, err := NewDefaultInterfaceMonitor(router.networkMonitor, func() {
 			router.logger.Info("updated default interface ", router.interfaceMonitor.DefaultInterfaceName(), ", index ", router.interfaceMonitor.DefaultInterfaceIndex())
 		})
 		if err != nil {