Files
Xray-core/proxy/tun/config.go
T

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)
}