mirror of
https://github.com/slackhq/nebula.git
synced 2026-05-16 04:47:38 +02:00
better and batched tun interface
This commit is contained in:
33
overlay/batch/batch.go
Normal file
33
overlay/batch/batch.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package batch
|
||||
|
||||
import "net/netip"
|
||||
|
||||
type RxBatcher interface {
|
||||
// Reserve creates a pkt to borrow
|
||||
Reserve(sz int) []byte
|
||||
// Commit borrows pkt. The caller must keep pkt valid until the next Flush
|
||||
Commit(pkt []byte) error
|
||||
// Flush emits every queued packet in arrival order. Returns the
|
||||
// first error observed; keeps draining so one bad packet doesn't hold up
|
||||
// the rest. After Flush returns, borrowed payload slices may be recycled.
|
||||
Flush() error
|
||||
}
|
||||
|
||||
type TxBatcher interface {
|
||||
// Next returns a zero-length slice with slotCap capacity over the next unused
|
||||
// slot's backing bytes. The caller writes into the returned slice and then
|
||||
// calls Commit with the final length and destination. Next returns nil when
|
||||
// the batch is full.
|
||||
Next() []byte
|
||||
// Commit records the slot just returned by Next as a packet of length n
|
||||
// destined for dst.
|
||||
Commit(n int, dst netip.AddrPort)
|
||||
// Reset clears committed slots; backing storage is retained for reuse.
|
||||
Reset()
|
||||
// Len returns the number of committed packets.
|
||||
Len() int
|
||||
// Cap returns the maximum number of slots in the batch.
|
||||
Cap() int
|
||||
// Get returns the buffers needed to send the batch
|
||||
Get() ([][]byte, []netip.AddrPort)
|
||||
}
|
||||
Reference in New Issue
Block a user