mirror of
https://github.com/SagerNet/sing-tun.git
synced 2025-10-05 16:47:27 +08:00
Add DefaultInterfaceMonitor.MyInterface
This commit is contained in:
@@ -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 {
|
||||||
|
@@ -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
|
||||||
|
}
|
||||||
|
@@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user