Files
MWClash/core/tun/tun.go
chen08209 ed7868282a Add android separates the core process
Support core status check and force restart

Optimize proxies page and access page

Update flutter and pub dependencies

Update go version

Optimize more details
2025-09-23 15:23:58 +08:00

72 lines
1.5 KiB
Go

//go:build android && cgo
package tun
import "C"
import (
"github.com/metacubex/mihomo/constant"
LC "github.com/metacubex/mihomo/listener/config"
"github.com/metacubex/mihomo/listener/sing_tun"
"github.com/metacubex/mihomo/log"
"github.com/metacubex/mihomo/tunnel"
"net"
"net/netip"
"strings"
)
func Start(fd int, stack string, address, dns string) *sing_tun.Listener {
var prefix4 []netip.Prefix
var prefix6 []netip.Prefix
tunStack, ok := constant.StackTypeMapping[strings.ToLower(stack)]
if !ok {
tunStack = constant.TunSystem
}
for _, a := range strings.Split(address, ",") {
a = strings.TrimSpace(a)
if len(a) == 0 {
continue
}
prefix, err := netip.ParsePrefix(a)
if err != nil {
log.Errorln("TUN:", err)
return nil
}
if prefix.Addr().Is4() {
prefix4 = append(prefix4, prefix)
} else {
prefix6 = append(prefix6, prefix)
}
}
var dnsHijack []string
for _, d := range strings.Split(dns, ",") {
d = strings.TrimSpace(d)
if len(d) == 0 {
continue
}
dnsHijack = append(dnsHijack, net.JoinHostPort(d, "53"))
}
options := LC.Tun{
Enable: true,
Device: "FlClash",
Stack: tunStack,
DNSHijack: dnsHijack,
AutoRoute: false,
AutoDetectInterface: false,
Inet4Address: prefix4,
Inet6Address: prefix6,
MTU: 9000,
FileDescriptor: fd,
}
listener, err := sing_tun.New(options, tunnel.Tunnel)
if err != nil {
log.Errorln("TUN:", err)
return nil
}
return listener
}