Style: code style
This commit is contained in:
@ -6,6 +6,7 @@ import (
|
||||
"fmt"
|
||||
"runtime"
|
||||
|
||||
"github.com/Dreamacro/clash/common/pool"
|
||||
"github.com/Dreamacro/clash/listener/tun/device"
|
||||
"github.com/Dreamacro/clash/listener/tun/device/iobased"
|
||||
|
||||
@ -19,6 +20,7 @@ type TUN struct {
|
||||
mtu uint32
|
||||
name string
|
||||
offset int
|
||||
buff []byte
|
||||
}
|
||||
|
||||
func Open(name string, mtu uint32) (_ device.Device, err error) {
|
||||
@ -37,7 +39,12 @@ func Open(name string, mtu uint32) (_ device.Device, err error) {
|
||||
defaultMTU = 0 /* auto */
|
||||
}
|
||||
|
||||
t := &TUN{name: name, mtu: mtu, offset: offset}
|
||||
t := &TUN{
|
||||
name: name,
|
||||
mtu: mtu,
|
||||
offset: offset,
|
||||
buff: make([]byte, offset+pool.RelayBufferSize),
|
||||
}
|
||||
|
||||
forcedMTU := defaultMTU
|
||||
if t.mtu > 0 {
|
||||
@ -64,14 +71,14 @@ func (t *TUN) Read(packet []byte) (int, error) {
|
||||
return t.nt.Read(packet, t.offset)
|
||||
}
|
||||
|
||||
buff := make([]byte, t.offset+cap(packet))
|
||||
|
||||
n, err := t.nt.Read(buff, t.offset)
|
||||
n, err := t.nt.Read(t.buff, t.offset)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
copy(packet, buff[t.offset:t.offset+n])
|
||||
_ = t.buff[:t.offset]
|
||||
|
||||
copy(packet, t.buff[t.offset:t.offset+n])
|
||||
|
||||
return n, err
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ import (
|
||||
"net"
|
||||
)
|
||||
|
||||
var ROUTES = []string{"1.0.0.0/8", "2.0.0.0/7", "4.0.0.0/6", "8.0.0.0/5", "16.0.0.0/4", "32.0.0.0/3", "64.0.0.0/2", "128.0.0.0/1"}
|
||||
var Routes = []string{"1.0.0.0/8", "2.0.0.0/7", "4.0.0.0/6", "8.0.0.0/5", "16.0.0.0/4", "32.0.0.0/3", "64.0.0.0/2", "128.0.0.0/1"}
|
||||
|
||||
func IPv4MaskString(bits int) string {
|
||||
m := net.CIDRMask(bits, 32)
|
||||
|
@ -43,7 +43,7 @@ func ConfigInterfaceAddress(dev device.Device, addr netip.Prefix, forceMTU int,
|
||||
}
|
||||
|
||||
func configInterfaceRouting(interfaceName string, addr netip.Prefix) error {
|
||||
routes := append(ROUTES, addr.String())
|
||||
routes := append(Routes, addr.String())
|
||||
|
||||
for _, route := range routes {
|
||||
if err := execRouterCmd("add", "-inet", route, interfaceName); err != nil {
|
||||
|
@ -36,7 +36,7 @@ func ConfigInterfaceAddress(dev device.Device, addr netip.Prefix, forceMTU int,
|
||||
|
||||
func configInterfaceRouting(interfaceName string, addr netip.Prefix) error {
|
||||
linkIP := addr.Masked().Addr().Next()
|
||||
for _, route := range ROUTES {
|
||||
for _, route := range Routes {
|
||||
if err := execRouterCmd("add", route, interfaceName, linkIP.String()); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -26,8 +26,8 @@ func GetAutoDetectInterface() (string, error) {
|
||||
func ConfigInterfaceAddress(dev device.Device, addr netip.Prefix, forceMTU int, autoRoute bool) error {
|
||||
retryOnFailure := StartedAtBoot()
|
||||
tryTimes := 0
|
||||
startOver:
|
||||
var err error
|
||||
startOver:
|
||||
if tryTimes > 0 {
|
||||
log.Infoln("Retrying interface configuration after failure because system just booted (T+%v): %v", windows.DurationSinceBoot(), err)
|
||||
time.Sleep(time.Second)
|
||||
@ -35,12 +35,8 @@ startOver:
|
||||
}
|
||||
tryTimes++
|
||||
|
||||
luid := winipcfg.LUID(dev.(*tun.TUN).LUID())
|
||||
if guid, err1 := luid.GUID(); err1 == nil {
|
||||
log.Infoln("[wintun]: tun adapter GUID: %s", guid.String())
|
||||
}
|
||||
|
||||
var (
|
||||
luid = winipcfg.LUID(dev.(*tun.TUN).LUID())
|
||||
ip = addr.Masked().Addr().Next()
|
||||
addresses = []netip.Prefix{netip.PrefixFrom(ip, addr.Bits())}
|
||||
|
||||
@ -82,8 +78,12 @@ startOver:
|
||||
foundDefault6 := false
|
||||
|
||||
if autoRoute {
|
||||
var allowedIPs []netip.Prefix
|
||||
routeArr := ROUTES
|
||||
var (
|
||||
allowedIPs []netip.Prefix
|
||||
|
||||
// add default
|
||||
routeArr = []string{"0.0.0.0/0"}
|
||||
)
|
||||
|
||||
for _, route := range routeArr {
|
||||
allowedIPs = append(allowedIPs, netip.MustParsePrefix(route))
|
||||
@ -117,7 +117,7 @@ startOver:
|
||||
deduplicatedRoutes = append(deduplicatedRoutes, &r)
|
||||
}
|
||||
|
||||
// append the gateway
|
||||
// add gateway
|
||||
deduplicatedRoutes = append(deduplicatedRoutes, &winipcfg.RouteData{
|
||||
Destination: addr.Masked(),
|
||||
NextHop: addr.Addr(),
|
||||
@ -221,7 +221,7 @@ func cleanupAddressesOnDisconnectedInterfaces(family winipcfg.AddressFamily, add
|
||||
if ip, _ := netip.AddrFromSlice(address.Address.IP()); addrHash[ip] {
|
||||
prefix := netip.PrefixFrom(ip, int(address.OnLinkPrefixLength))
|
||||
log.Infoln("Cleaning up stale address %s from interface ‘%s’", prefix.String(), iface.FriendlyName())
|
||||
iface.LUID.DeleteIPAddress(prefix)
|
||||
_ = iface.LUID.DeleteIPAddress(prefix)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
"net"
|
||||
"net/netip"
|
||||
|
||||
"github.com/Dreamacro/clash/common/pool"
|
||||
"github.com/Dreamacro/clash/listener/tun/ipstack/system/mars/tcpip"
|
||||
)
|
||||
|
||||
@ -26,7 +27,7 @@ func Start(
|
||||
udp := &UDP{
|
||||
calls: map[*call]struct{}{},
|
||||
device: device,
|
||||
buf: [65535]byte{},
|
||||
buf: [pool.UDPBufferSize]byte{},
|
||||
}
|
||||
tcp := &TCP{
|
||||
listener: listener,
|
||||
@ -40,7 +41,7 @@ func Start(
|
||||
defer tcp.Close()
|
||||
defer udp.Close()
|
||||
|
||||
buf := make([]byte, 65535)
|
||||
buf := make([]byte, pool.RelayBufferSize)
|
||||
|
||||
for {
|
||||
n, err := device.Read(buf)
|
||||
@ -137,7 +138,6 @@ func Start(
|
||||
t.SetSourcePort(port)
|
||||
t.SetDestinationPort(gatewayPort)
|
||||
|
||||
ip.DecTimeToLive()
|
||||
ip.ResetChecksum()
|
||||
t.ResetChecksum(ip.PseudoSum())
|
||||
|
||||
@ -164,7 +164,6 @@ func Start(
|
||||
ip.SetSourceIP(destination)
|
||||
ip.SetDestinationIP(source)
|
||||
|
||||
ip.DecTimeToLive()
|
||||
ip.ResetChecksum()
|
||||
i.ResetChecksum()
|
||||
|
||||
@ -183,7 +182,6 @@ func Start(
|
||||
ip.SetSourceIP(destination)
|
||||
ip.SetDestinationIP(source)
|
||||
|
||||
ip.DecTimeToLive()
|
||||
ip.ResetChecksum()
|
||||
i.ResetChecksum(ip.PseudoSum())
|
||||
|
||||
|
@ -7,6 +7,7 @@ import (
|
||||
"net/netip"
|
||||
"sync"
|
||||
|
||||
"github.com/Dreamacro/clash/common/pool"
|
||||
"github.com/Dreamacro/clash/listener/tun/ipstack/system/mars/tcpip"
|
||||
)
|
||||
|
||||
@ -24,7 +25,7 @@ type UDP struct {
|
||||
calls map[*call]struct{}
|
||||
device io.Writer
|
||||
bufLock sync.Mutex
|
||||
buf [65535]byte
|
||||
buf [pool.UDPBufferSize]byte
|
||||
}
|
||||
|
||||
func (u *UDP) ReadFrom(buf []byte) (int, net.Addr, net.Addr, error) {
|
||||
|
@ -23,22 +23,24 @@ import (
|
||||
|
||||
// New TunAdapter
|
||||
func New(tunConf *config.Tun, tcpIn chan<- C.ConnContext, udpIn chan<- *inbound.PacketAdapter) (ipstack.Stack, error) {
|
||||
devName := tunConf.Device
|
||||
var (
|
||||
tunAddress = netip.MustParsePrefix("198.18.255.254/16")
|
||||
devName = tunConf.Device
|
||||
stackType = tunConf.Stack
|
||||
autoRoute = tunConf.AutoRoute
|
||||
mtu = 9000
|
||||
|
||||
tunDevice device.Device
|
||||
tunStack ipstack.Stack
|
||||
|
||||
err error
|
||||
)
|
||||
|
||||
if devName == "" {
|
||||
devName = generateDeviceName()
|
||||
}
|
||||
|
||||
tunAddress := netip.MustParsePrefix("198.18.255.254/16")
|
||||
autoRoute := tunConf.AutoRoute
|
||||
stackType := tunConf.Stack
|
||||
mtu := 9000
|
||||
|
||||
var tunDevice device.Device
|
||||
var tunStack ipstack.Stack
|
||||
|
||||
var err error
|
||||
|
||||
// new tun device
|
||||
// open tun device
|
||||
tunDevice, err = parseDevice(devName, uint32(mtu))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("can't open tun: %w", err)
|
||||
@ -58,7 +60,8 @@ func New(tunConf *config.Tun, tcpIn chan<- C.ConnContext, udpIn chan<- *inbound.
|
||||
DNSAdds: tunConf.DNSHijack,
|
||||
TCPIn: tcpIn, UDPIn: udpIn,
|
||||
},
|
||||
gvisor.WithDefault())
|
||||
gvisor.WithDefault(),
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
_ = tunDevice.Close()
|
||||
@ -68,7 +71,7 @@ func New(tunConf *config.Tun, tcpIn chan<- C.ConnContext, udpIn chan<- *inbound.
|
||||
err = tunDevice.UseIOBased()
|
||||
if err != nil {
|
||||
_ = tunDevice.Close()
|
||||
return nil, fmt.Errorf("can't attach endpoint to tun: %w", err)
|
||||
return nil, fmt.Errorf("can't New system stack: %w", err)
|
||||
}
|
||||
|
||||
tunStack, err = system.New(tunDevice, tunConf.DNSHijack, tunAddress, tcpIn, udpIn)
|
||||
@ -77,7 +80,7 @@ func New(tunConf *config.Tun, tcpIn chan<- C.ConnContext, udpIn chan<- *inbound.
|
||||
return nil, fmt.Errorf("can't New system stack: %w", err)
|
||||
}
|
||||
default:
|
||||
// ignore it, should never happen
|
||||
// never happen
|
||||
}
|
||||
|
||||
// setting address and routing
|
||||
|
Reference in New Issue
Block a user