mirror of
https://github.com/slackhq/nebula.git
synced 2026-08-15 08:27:01 +02:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 334dd7a85d | |||
| c9d5a6e35a |
@@ -263,13 +263,12 @@ func (r *Offload) writeWithScratch(buf []byte, iovs *[2]unix.Iovec) (int, error)
|
|||||||
// to validVnetHdr during Offload construction so we don't rebuild it here.
|
// to validVnetHdr during Offload construction so we don't rebuild it here.
|
||||||
iovs[1].Base = &buf[0]
|
iovs[1].Base = &buf[0]
|
||||||
iovs[1].SetLen(len(buf))
|
iovs[1].SetLen(len(buf))
|
||||||
iovPtr := unsafe.Pointer(&iovs[0])
|
return r.rawWrite(unsafe.Slice(&iovs[0], len(iovs)))
|
||||||
return r.rawWrite(iovPtr, 2)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Offload) rawWrite(iovs unsafe.Pointer, iovcnt int) (int, error) {
|
func (r *Offload) rawWrite(iovs []unix.Iovec) (int, error) {
|
||||||
for {
|
for {
|
||||||
n, _, errno := syscall.Syscall(unix.SYS_WRITEV, uintptr(r.fd), uintptr(iovs), uintptr(iovcnt))
|
n, _, errno := syscall.Syscall(unix.SYS_WRITEV, uintptr(r.fd), uintptr(unsafe.Pointer(&iovs[0])), uintptr(len(iovs)))
|
||||||
if errno == 0 {
|
if errno == 0 {
|
||||||
if int(n) < virtioNetHdrLen {
|
if int(n) < virtioNetHdrLen {
|
||||||
return 0, io.ErrShortWrite
|
return 0, io.ErrShortWrite
|
||||||
@@ -352,9 +351,7 @@ func (r *Offload) WriteGSO(hdr []byte, pays [][]byte, gsoSize uint16, isV6 bool,
|
|||||||
r.gsoIovs[2+i].SetLen(len(p))
|
r.gsoIovs[2+i].SetLen(len(p))
|
||||||
}
|
}
|
||||||
|
|
||||||
iovPtr := unsafe.Pointer(&r.gsoIovs[0])
|
_, err := r.rawWrite(r.gsoIovs)
|
||||||
iovCnt := len(r.gsoIovs)
|
|
||||||
_, err := r.rawWrite(iovPtr, iovCnt)
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ func newTun(c *config.C, l *logrus.Logger, vpnNetworks []netip.Prefix, multiqueu
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
vnetHdr := true
|
vnetHdr := true
|
||||||
name, err := tunSetIff(fd, nameStr, baseFlags|unix.IFF_VNET_HDR|unix.IFF_NAPI)
|
name, err := tunSetIff(fd, nameStr, baseFlags|unix.IFF_VNET_HDR)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = unix.Close(fd)
|
_ = unix.Close(fd)
|
||||||
vnetHdr = false
|
vnetHdr = false
|
||||||
@@ -307,7 +307,7 @@ func (t *tun) NewMultiQueueReader() error {
|
|||||||
|
|
||||||
flags := uint16(unix.IFF_TUN | unix.IFF_NO_PI | unix.IFF_MULTI_QUEUE)
|
flags := uint16(unix.IFF_TUN | unix.IFF_NO_PI | unix.IFF_MULTI_QUEUE)
|
||||||
if t.vnetHdr {
|
if t.vnetHdr {
|
||||||
flags |= unix.IFF_VNET_HDR | unix.IFF_NAPI
|
flags |= unix.IFF_VNET_HDR
|
||||||
}
|
}
|
||||||
if _, err = tunSetIff(fd, t.Device, flags); err != nil {
|
if _, err = tunSetIff(fd, t.Device, flags); err != nil {
|
||||||
_ = unix.Close(fd)
|
_ = unix.Close(fd)
|
||||||
|
|||||||
Reference in New Issue
Block a user