replace xnet.Transport by xnet.Pipe

This commit is contained in:
ginuerzh
2025-07-28 20:52:15 +08:00
parent 35a049fb03
commit 208d18125c
52 changed files with 468 additions and 104 deletions
+1 -1
View File
@@ -90,7 +90,7 @@ func (l *tunListener) listenLoop(ready context.CancelCauseFunc) {
addrs, _ := itf.Addrs()
l.log.Infof("name: %s, net: %s, mtu: %d, addrs: %s",
itf.Name, ip, itf.MTU, addrs)
itf.Name, ip, l.md.config.MTU, addrs)
var c net.Conn
c = &conn{
+12 -1
View File
@@ -16,6 +16,7 @@ type tunDevice struct {
sizes []int
rbufs [][]byte
wbufs [][]byte
rbuf []byte
wbuf []byte
}
@@ -32,13 +33,22 @@ func (d *tunDevice) Read(p []byte) (n int, err error) {
}
}
d.rbufs[0] = p
if readOffset > 0 {
d.rbufs[0] = d.rbuf
} else {
d.rbufs[0] = p
}
packets, err := d.dev.Read(d.rbufs, d.sizes, readOffset)
if err != nil && err != tun.ErrTooManySegments {
return
}
n = d.sizes[0]
if readOffset > 0 {
copy(p, d.rbuf[readOffset:n+readOffset])
}
d.sizes[0] = 0
d.packets = packets - 1
@@ -80,6 +90,7 @@ func (l *tunListener) createTunDevice() (dev io.ReadWriteCloser, name string, er
sizes: make([]int, batchSize),
rbufs: rbufs,
wbufs: make([][]byte, 1),
rbuf: make([]byte, maxBufSize+readOffset),
wbuf: make([]byte, maxBufSize+writeOffset),
}
name, err = ifce.Name()
+5 -5
View File
@@ -23,13 +23,13 @@ func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.
return
}
peer := l.md.config.Peer
if peer == "" {
peer = ip.String()
}
if len(l.md.config.Net) > 0 {
peer := l.md.config.Peer
if peer == "" {
peer = l.md.config.Net[0].IP.String()
}
cmd := fmt.Sprintf("ifconfig %s inet %s %s mtu %d up",
name, l.md.config.Net[0].String(), l.md.config.Peer, l.md.config.MTU)
name, l.md.config.Net[0].String(), peer, l.md.config.MTU)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
if err = exec.Command(args[0], args[1:]...).Run(); err != nil {
+1 -1
View File
@@ -83,7 +83,7 @@ func (l *tunListener) listenLoop(ready context.CancelCauseFunc) {
addrs, _ := itf.Addrs()
l.log.Infof("name: %s, net: %s, mtu: %d, addrs: %s",
itf.Name, ip, itf.MTU, addrs)
itf.Name, ip, l.md.config.MTU, addrs)
var c net.Conn
c = &conn{
+1 -1
View File
@@ -30,7 +30,7 @@ func (l *tunListener) parseMetadata(md mdata.Metadata) (err error) {
config.MTU = defaultMTU
}
if config.Name == "" {
config.Name = "tungo"
config.Name = defaultName
}
if gw := mdutil.GetString(md, "gw", "tun.gw"); gw != "" {
config.Gateway = net.ParseIP(gw)
+13 -8
View File
@@ -3,7 +3,6 @@ package tungo
import (
"io"
"github.com/go-gost/core/logger"
"golang.zx2c4.com/wireguard/tun"
)
@@ -12,15 +11,13 @@ const (
)
type tunDevice struct {
dev tun.Device
dev tun.Device
packets int
sizes []int
rbufs [][]byte
wbufs [][]byte
rbuf []byte
wbuf []byte
log logger.Logger
}
func (d *tunDevice) Read(p []byte) (n int, err error) {
@@ -36,17 +33,25 @@ func (d *tunDevice) Read(p []byte) (n int, err error) {
}
}
d.rbufs[0] = p
if readOffset > 0 {
d.rbufs[0] = d.rbuf
} else {
d.rbufs[0] = p
}
packets, err := d.dev.Read(d.rbufs, d.sizes, readOffset)
if err != nil && err != tun.ErrTooManySegments {
return
}
n = d.sizes[0]
if readOffset > 0 {
copy(p, d.rbuf[readOffset:n+readOffset])
}
d.sizes[0] = 0
d.packets = packets - 1
// d.log.Debugf("read tun: (%d), % x", n, p[:n])
return
}
@@ -85,8 +90,8 @@ func (l *tunListener) createTunDevice() (dev io.ReadWriteCloser, name string, er
sizes: make([]int, batchSize),
rbufs: rbufs,
wbufs: make([][]byte, 1),
rbuf: make([]byte, maxBufSize+readOffset),
wbuf: make([]byte, maxBufSize+writeOffset),
log: l.log,
}
name, err = ifce.Name()
+5 -5
View File
@@ -23,13 +23,13 @@ func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.
return
}
peer := l.md.config.Peer
if peer == "" {
peer = ip.String()
}
if len(l.md.config.Net) > 0 {
peer := l.md.config.Peer
if peer == "" {
peer = l.md.config.Net[0].IP.String()
}
cmd := fmt.Sprintf("ifconfig %s inet %s %s mtu %d up",
name, l.md.config.Net[0].String(), l.md.config.Peer, l.md.config.MTU)
name, l.md.config.Net[0].String(), peer, l.md.config.MTU)
l.log.Debug(cmd)
args := strings.Split(cmd, " ")
if err = exec.Command(args[0], args[1:]...).Run(); err != nil {
+1 -1
View File
@@ -26,7 +26,7 @@ func (l *tunListener) createTun() (ifce io.ReadWriteCloser, name string, ip net.
if len(l.md.config.Net) > 0 {
ipNet := l.md.config.Net[0]
cmd := fmt.Sprintf("netsh interface ip set address name=%s "+
"source=static addr=%s mask=%s gateway=none",
"source=static addr=%s mask=%s",
name, ipNet.IP.String(), ipMask(ipNet.Mask))
l.log.Debug(cmd)