mirror of
https://github.com/slackhq/nebula.git
synced 2026-05-16 21:07:36 +02:00
34 lines
1.2 KiB
Go
34 lines
1.2 KiB
Go
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)
|
|
}
|