Add DefaultInterfaceMonitor.MyInterface

This commit is contained in:
世界
2025-04-12 14:39:22 +08:00
parent 2121bc3f01
commit f57754918d
5 changed files with 19 additions and 2 deletions

View File

@@ -30,6 +30,8 @@ type DefaultInterfaceMonitor interface {
AndroidVPNEnabled() bool AndroidVPNEnabled() bool
RegisterCallback(callback DefaultInterfaceUpdateCallback) *list.Element[DefaultInterfaceUpdateCallback] RegisterCallback(callback DefaultInterfaceUpdateCallback) *list.Element[DefaultInterfaceUpdateCallback]
UnregisterCallback(element *list.Element[DefaultInterfaceUpdateCallback]) UnregisterCallback(element *list.Element[DefaultInterfaceUpdateCallback])
RegisterMyInterface(interfaceName string)
MyInterface() string
} }
type DefaultInterfaceMonitorOptions struct { type DefaultInterfaceMonitorOptions struct {

View File

@@ -42,11 +42,12 @@ type defaultInterfaceMonitor struct {
androidVPNEnabled bool androidVPNEnabled bool
noRoute bool noRoute bool
networkMonitor NetworkUpdateMonitor networkMonitor NetworkUpdateMonitor
logger logger.Logger
checkUpdateTimer *time.Timer checkUpdateTimer *time.Timer
element *list.Element[NetworkUpdateCallback] element *list.Element[NetworkUpdateCallback]
access sync.Mutex access sync.Mutex
callbacks list.List[DefaultInterfaceUpdateCallback] callbacks list.List[DefaultInterfaceUpdateCallback]
logger logger.Logger myInterface string
} }
func NewDefaultInterfaceMonitor(networkMonitor NetworkUpdateMonitor, logger logger.Logger, options DefaultInterfaceMonitorOptions) (DefaultInterfaceMonitor, error) { func NewDefaultInterfaceMonitor(networkMonitor NetworkUpdateMonitor, logger logger.Logger, options DefaultInterfaceMonitorOptions) (DefaultInterfaceMonitor, error) {
@@ -132,3 +133,15 @@ func (m *defaultInterfaceMonitor) emit(defaultInterface *control.Interface, flag
callback(defaultInterface, flags) callback(defaultInterface, flags)
} }
} }
func (m *defaultInterfaceMonitor) RegisterMyInterface(interfaceName string) {
m.access.Lock()
defer m.access.Unlock()
m.myInterface = interfaceName
}
func (m *defaultInterfaceMonitor) MyInterface() string {
m.access.Lock()
defer m.access.Unlock()
return m.myInterface
}

View File

@@ -82,6 +82,7 @@ func New(options Options) (Tun, error) {
} }
func (t *NativeTun) Start() error { func (t *NativeTun) Start() error {
t.options.InterfaceMonitor.RegisterMyInterface(t.options.Name)
return t.setRoutes() return t.setRoutes()
} }

View File

@@ -264,7 +264,7 @@ func (t *NativeTun) Start() error {
if t.options.FileDescriptor != 0 { if t.options.FileDescriptor != 0 {
return nil return nil
} }
t.options.InterfaceMonitor.RegisterMyInterface(t.options.Name)
tunLink, err := netlink.LinkByName(t.options.Name) tunLink, err := netlink.LinkByName(t.options.Name)
if err != nil { if err != nil {
return err return err

View File

@@ -163,6 +163,7 @@ func (t *NativeTun) Name() (string, error) {
} }
func (t *NativeTun) Start() error { func (t *NativeTun) Start() error {
t.options.InterfaceMonitor.RegisterMyInterface(t.options.Name)
if !t.options.AutoRoute { if !t.options.AutoRoute {
return nil return nil
} }