mirror of
https://github.com/slackhq/nebula.git
synced 2025-11-22 08:24:25 +01:00
46 lines
608 B
Go
46 lines
608 B
Go
package packet
|
|
|
|
import (
|
|
"net/netip"
|
|
"sync"
|
|
|
|
"golang.org/x/sys/unix"
|
|
)
|
|
|
|
const Size = 0xffff
|
|
|
|
type Packet struct {
|
|
Payload []byte
|
|
Control []byte
|
|
SegSize int
|
|
Addr netip.AddrPort
|
|
}
|
|
|
|
func New() *Packet {
|
|
return &Packet{
|
|
Payload: make([]byte, Size),
|
|
Control: make([]byte, unix.CmsgSpace(2)),
|
|
}
|
|
}
|
|
|
|
type Pool struct {
|
|
pool sync.Pool
|
|
}
|
|
|
|
var bigPool = &Pool{
|
|
pool: sync.Pool{New: func() any { return New() }},
|
|
}
|
|
|
|
func GetPool() *Pool {
|
|
return bigPool
|
|
}
|
|
|
|
func (p *Pool) Get() *Packet {
|
|
return p.pool.Get().(*Packet)
|
|
}
|
|
|
|
func (p *Pool) Put(x *Packet) {
|
|
x.Payload = x.Payload[:Size]
|
|
p.pool.Put(x)
|
|
}
|