less garbage

This commit is contained in:
JackDoan
2025-11-17 13:30:02 -06:00
parent f07275edff
commit 625acb7cc0
7 changed files with 16 additions and 15 deletions

View File

@@ -347,7 +347,8 @@ func (f *Interface) listenIn(reader overlay.TunDev, queueNum int) {
for i, pkt := range packets[:n] {
outPackets[i].OutLen = -1
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])
if err != nil {

View File

@@ -22,6 +22,7 @@ type TunDev interface {
AllocSeg(pkt *packet.OutPacket, q int) (int, error)
WriteOne(x *packet.OutPacket, kick bool, 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

View File

@@ -24,6 +24,10 @@ type disabledTun struct {
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 {
tun := &disabledTun{
vpnNetworks: vpnNetworks,

View File

@@ -767,3 +767,7 @@ func (t *tun) WriteMany(x []*packet.OutPacket, q int) (int, error) {
}
return maximum, nil
}
func (t *tun) RecycleRxSeg(pkt *packet.VirtIOPacket, kick bool, q int) error {
return t.vdev[q].ReceiveQueue.OfferDescriptorChains(pkt.Chains, kick)
}

View File

@@ -38,6 +38,10 @@ type UserDevice struct {
inboundWriter *io.PipeWriter
}
func (d *UserDevice) RecycleRxSeg(pkt *packet.VirtIOPacket, kick bool, q int) error {
return nil
}
func (d *UserDevice) Activate() error {
return nil
}

View File

@@ -354,7 +354,7 @@ func (dev *Device) processChains(pkt *packet.VirtIOPacket, chains []virtqueue.Us
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))
}
if chains[0].Length > 4000 {
if chains[0].Length > 16000 {
//todo!
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:
pkt.Payload = pkt.ChainRefs[0][virtio.NetHdrSize:chains[0].Length]
pkt.Chains = append(pkt.Chains, uint16(chains[0].DescriptorIndex))
pkt.Recycler = dev.ReceiveQueue.OfferDescriptorChains
return 1, nil
//cursor := n - virtio.NetHdrSize

View File

@@ -10,7 +10,6 @@ type VirtIOPacket struct {
Chains []uint16
ChainRefs [][]byte
// OfferDescriptorChains(chains []uint16, kick bool) error
Recycler func([]uint16, bool) error
}
func NewVIO() *VirtIOPacket {
@@ -27,17 +26,6 @@ func (v *VirtIOPacket) Reset() {
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 {
VirtIOPacket
}