mirror of
https://github.com/slackhq/nebula.git
synced 2025-11-24 01:14:25 +01:00
less garbage
This commit is contained in:
@@ -347,7 +347,8 @@ func (f *Interface) listenIn(reader overlay.TunDev, queueNum int) {
|
|||||||
for i, pkt := range packets[:n] {
|
for i, pkt := range packets[:n] {
|
||||||
outPackets[i].OutLen = -1
|
outPackets[i].OutLen = -1
|
||||||
f.consumeInsidePacket(pkt.Payload, fwPacket, nb, outPackets[i], queueNum, conntrackCache.Get(f.l), now)
|
f.consumeInsidePacket(pkt.Payload, fwPacket, nb, outPackets[i], queueNum, conntrackCache.Get(f.l), now)
|
||||||
_ = pkt.Recycle(i == (n - 1))
|
reader.RecycleRxSeg(pkt, i == (n-1), queueNum) //todo handle err?
|
||||||
|
pkt.Reset()
|
||||||
}
|
}
|
||||||
_, err = f.writers[queueNum].WriteBatch(outPackets[:n])
|
_, err = f.writers[queueNum].WriteBatch(outPackets[:n])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ type TunDev interface {
|
|||||||
AllocSeg(pkt *packet.OutPacket, q int) (int, error)
|
AllocSeg(pkt *packet.OutPacket, q int) (int, error)
|
||||||
WriteOne(x *packet.OutPacket, kick bool, q int) (int, error)
|
WriteOne(x *packet.OutPacket, kick bool, q int) (int, error)
|
||||||
WriteMany(x []*packet.OutPacket, q int) (int, error)
|
WriteMany(x []*packet.OutPacket, q int) (int, error)
|
||||||
|
RecycleRxSeg(pkt *packet.VirtIOPacket, kick bool, q int) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: We may be able to remove routines
|
// TODO: We may be able to remove routines
|
||||||
|
|||||||
@@ -24,6 +24,10 @@ type disabledTun struct {
|
|||||||
l *logrus.Logger
|
l *logrus.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (*disabledTun) RecycleRxSeg(pkt *packet.VirtIOPacket, kick bool, q int) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func newDisabledTun(vpnNetworks []netip.Prefix, queueLen int, metricsEnabled bool, l *logrus.Logger) *disabledTun {
|
func newDisabledTun(vpnNetworks []netip.Prefix, queueLen int, metricsEnabled bool, l *logrus.Logger) *disabledTun {
|
||||||
tun := &disabledTun{
|
tun := &disabledTun{
|
||||||
vpnNetworks: vpnNetworks,
|
vpnNetworks: vpnNetworks,
|
||||||
|
|||||||
@@ -767,3 +767,7 @@ func (t *tun) WriteMany(x []*packet.OutPacket, q int) (int, error) {
|
|||||||
}
|
}
|
||||||
return maximum, nil
|
return maximum, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *tun) RecycleRxSeg(pkt *packet.VirtIOPacket, kick bool, q int) error {
|
||||||
|
return t.vdev[q].ReceiveQueue.OfferDescriptorChains(pkt.Chains, kick)
|
||||||
|
}
|
||||||
|
|||||||
@@ -38,6 +38,10 @@ type UserDevice struct {
|
|||||||
inboundWriter *io.PipeWriter
|
inboundWriter *io.PipeWriter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *UserDevice) RecycleRxSeg(pkt *packet.VirtIOPacket, kick bool, q int) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (d *UserDevice) Activate() error {
|
func (d *UserDevice) Activate() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -354,7 +354,7 @@ func (dev *Device) processChains(pkt *packet.VirtIOPacket, chains []virtqueue.Us
|
|||||||
if int(pkt.Header.NumBuffers) != 1 {
|
if int(pkt.Header.NumBuffers) != 1 {
|
||||||
return 0, fmt.Errorf("too smol-brain to handle more than one chain right now: %d chains", len(chains))
|
return 0, fmt.Errorf("too smol-brain to handle more than one chain right now: %d chains", len(chains))
|
||||||
}
|
}
|
||||||
if chains[0].Length > 4000 {
|
if chains[0].Length > 16000 {
|
||||||
//todo!
|
//todo!
|
||||||
return 1, fmt.Errorf("too big packet length: %d", chains[0].Length)
|
return 1, fmt.Errorf("too big packet length: %d", chains[0].Length)
|
||||||
}
|
}
|
||||||
@@ -362,7 +362,6 @@ func (dev *Device) processChains(pkt *packet.VirtIOPacket, chains []virtqueue.Us
|
|||||||
//shift the buffer out of out:
|
//shift the buffer out of out:
|
||||||
pkt.Payload = pkt.ChainRefs[0][virtio.NetHdrSize:chains[0].Length]
|
pkt.Payload = pkt.ChainRefs[0][virtio.NetHdrSize:chains[0].Length]
|
||||||
pkt.Chains = append(pkt.Chains, uint16(chains[0].DescriptorIndex))
|
pkt.Chains = append(pkt.Chains, uint16(chains[0].DescriptorIndex))
|
||||||
pkt.Recycler = dev.ReceiveQueue.OfferDescriptorChains
|
|
||||||
return 1, nil
|
return 1, nil
|
||||||
|
|
||||||
//cursor := n - virtio.NetHdrSize
|
//cursor := n - virtio.NetHdrSize
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ type VirtIOPacket struct {
|
|||||||
Chains []uint16
|
Chains []uint16
|
||||||
ChainRefs [][]byte
|
ChainRefs [][]byte
|
||||||
// OfferDescriptorChains(chains []uint16, kick bool) error
|
// OfferDescriptorChains(chains []uint16, kick bool) error
|
||||||
Recycler func([]uint16, bool) error
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewVIO() *VirtIOPacket {
|
func NewVIO() *VirtIOPacket {
|
||||||
@@ -27,17 +26,6 @@ func (v *VirtIOPacket) Reset() {
|
|||||||
v.Chains = v.Chains[:0]
|
v.Chains = v.Chains[:0]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *VirtIOPacket) Recycle(lastOne bool) error {
|
|
||||||
if v.Recycler != nil {
|
|
||||||
err := v.Recycler(v.Chains, lastOne)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
v.Reset()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type VirtIOTXPacket struct {
|
type VirtIOTXPacket struct {
|
||||||
VirtIOPacket
|
VirtIOPacket
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user