fix: macos's tunName

This commit is contained in:
wwqgtxx 2022-10-07 06:57:03 +08:00
parent 6c82e98bbc
commit 8d74a86bf1

View file

@ -2,6 +2,7 @@ package sing_tun
import ( import (
"context" "context"
"net"
"net/netip" "net/netip"
"runtime" "runtime"
"strconv" "strconv"
@ -18,6 +19,7 @@ import (
tun "github.com/sagernet/sing-tun" tun "github.com/sagernet/sing-tun"
"github.com/sagernet/sing/common" "github.com/sagernet/sing/common"
E "github.com/sagernet/sing/common/exceptions" E "github.com/sagernet/sing/common/exceptions"
F "github.com/sagernet/sing/common/format"
"github.com/sagernet/sing/common/ranges" "github.com/sagernet/sing/common/ranges"
) )
@ -41,9 +43,24 @@ func CalculateInterfaceName(name string) (tunName string) {
tunName = "utun" tunName = "utun"
} else if name != "" { } else if name != "" {
tunName = name tunName = name
return
} else { } else {
tunName = "tun" tunName = "tun"
} }
interfaces, err := net.Interfaces()
if err != nil {
return
}
var tunIndex int
for _, netInterface := range interfaces {
if strings.HasPrefix(netInterface.Name, tunName) {
index, parseErr := strconv.ParseInt(netInterface.Name[len(tunName):], 10, 16)
if parseErr == nil {
tunIndex = int(index) + 1
}
}
}
tunName = F.ToString(tunName, tunIndex)
return return
} }