mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Merge pull request #10188 from kevinGC:xdptcpbench
PiperOrigin-RevId: 618246127
This commit is contained in:
@@ -18,6 +18,7 @@ import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"net"
|
||||
"runtime"
|
||||
|
||||
"github.com/cilium/ebpf"
|
||||
"github.com/cilium/ebpf/link"
|
||||
@@ -74,7 +75,7 @@ func newXDPEndpoint(ifaceName string, mac net.HardwareAddr) (stack.LinkEndpoint,
|
||||
return nil, fmt.Errorf("failed to load program: %v", err)
|
||||
}
|
||||
|
||||
_, err = link.AttachRawLink(link.RawLinkOptions{
|
||||
rawLink, err := link.AttachRawLink(link.RawLinkOptions{
|
||||
Program: objects.Program,
|
||||
Attach: ebpf.AttachXDP,
|
||||
Target: iface.Index,
|
||||
@@ -97,6 +98,17 @@ func newXDPEndpoint(ifaceName string, mac net.HardwareAddr) (stack.LinkEndpoint,
|
||||
return nil, fmt.Errorf("failed to insert socket into BPF map: %v", err)
|
||||
}
|
||||
|
||||
// Ensure that none of the XDP bits are removed by GC'ing the
|
||||
// os.File-wrapped descriptors.
|
||||
for i, fd := range []int{fd, objects.Program.FD(), objects.SockMap.FD(), rawLink.FD()} {
|
||||
if _, err := unix.Dup(fd); err != nil {
|
||||
return nil, fmt.Errorf("failed to dup fd with index %d (%d): %v", i, fd, err)
|
||||
}
|
||||
}
|
||||
|
||||
runtime.KeepAlive(objects)
|
||||
runtime.KeepAlive(rawLink)
|
||||
|
||||
return xdp.New(&xdp.Options{
|
||||
FD: fd,
|
||||
Address: tcpip.LinkAddress(mac),
|
||||
|
||||
Reference in New Issue
Block a user