mirror of
https://github.com/XTLS/Xray-core.git
synced 2026-07-02 01:43:25 +00:00
52 lines
1012 B
Go
52 lines
1012 B
Go
package tun
|
|
|
|
import (
|
|
"context"
|
|
"net"
|
|
"sync"
|
|
|
|
"github.com/xtls/xray-core/common/errors"
|
|
)
|
|
|
|
type InterfaceUpdater struct {
|
|
sync.Mutex
|
|
|
|
tunIndex int
|
|
fixedName string
|
|
iface *net.Interface
|
|
}
|
|
|
|
var updater *InterfaceUpdater
|
|
|
|
func (updater *InterfaceUpdater) Get() *net.Interface {
|
|
updater.Lock()
|
|
defer updater.Unlock()
|
|
|
|
return updater.iface
|
|
}
|
|
|
|
func (updater *InterfaceUpdater) Update() {
|
|
updater.Lock()
|
|
defer updater.Unlock()
|
|
|
|
got, err := findOutboundInterface(updater.tunIndex, updater.fixedName)
|
|
if err != nil {
|
|
errors.LogInfoInner(context.Background(), err, "[tun] failed to update interface")
|
|
updater.iface = nil
|
|
return
|
|
}
|
|
|
|
if got == nil {
|
|
errors.LogInfo(context.Background(), "[tun] failed to update interface > got == nil")
|
|
updater.iface = nil
|
|
return
|
|
}
|
|
|
|
if updater.iface != nil && updater.iface.Index == got.Index && updater.iface.Name == got.Name {
|
|
return
|
|
}
|
|
|
|
updater.iface = got
|
|
errors.LogInfo(context.Background(), "[tun] update interface ", got.Name, " ", got.Index)
|
|
}
|