in internal/ip/ip_bpf_linux.go [31:50]
func (r *recvSource) attachBPF(filter []bpf.RawInstruction) error {
prog := syscall.SockFprog{
Len: uint16(len(filter)),
Filter: (*syscall.SockFilter)(unsafe.Pointer(&filter[0])),
}
_, _, err := syscall.Syscall6(
syscall.SYS_SETSOCKOPT,
uintptr(r.fd),
uintptr(syscall.SOL_SOCKET),
uintptr(syscall.SO_ATTACH_FILTER),
uintptr(unsafe.Pointer(&prog)),
uintptr(uint32(unsafe.Sizeof(prog))),
0,
)
if err != 0 {
return err
}
return nil
}