replace xnet.Transport by xnet.Pipe
This commit is contained in:
@@ -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
@@ -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()
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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
@@ -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()
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user