| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- //go:build linux && !android && !e2e_testing
- package overlay
- import "fmt"
- func (t *tun) batchIO() (*wireguardTunIO, bool) {
- io, ok := t.ReadWriteCloser.(*wireguardTunIO)
- return io, ok
- }
- func (t *tun) ReadIntoBatch(pool *PacketPool) ([]*Packet, error) {
- io, ok := t.batchIO()
- if !ok {
- return nil, fmt.Errorf("wireguard batch I/O not enabled")
- }
- return io.ReadIntoBatch(pool)
- }
- func (t *tun) WriteBatch(packets []*Packet) (int, error) {
- io, ok := t.batchIO()
- if ok {
- return io.WriteBatch(packets)
- }
- for _, pkt := range packets {
- if pkt == nil {
- continue
- }
- if _, err := t.Write(pkt.Payload()[:pkt.Len]); err != nil {
- return 0, err
- }
- pkt.Release()
- }
- return len(packets), nil
- }
- func (t *tun) BatchHeadroom() int {
- if io, ok := t.batchIO(); ok {
- return io.BatchHeadroom()
- }
- return 0
- }
- func (t *tun) BatchPayloadCap() int {
- if io, ok := t.batchIO(); ok {
- return io.BatchPayloadCap()
- }
- return 0
- }
- func (t *tun) BatchSize() int {
- if io, ok := t.batchIO(); ok {
- return io.BatchSize()
- }
- return 1
- }
|