mirror of
https://github.com/aljazceru/kata-containers.git
synced 2026-01-01 21:44:22 +01:00
We need to be able to get the IP family from the netlink route meesages, and the Route.Family field only got recently added to the netlink package. The update generates static check warnings about the call for nethandler.Delete() being deprecated in favor of a Close() call instead. So we include the s/Delete()/Close()/ change as part of this PR. Signed-off-by: Samuel Ortiz <s.ortiz@apple.com>
78 lines
1.7 KiB
Go
78 lines
1.7 KiB
Go
package netlink
|
|
|
|
import (
|
|
"unsafe"
|
|
|
|
"golang.org/x/sys/unix"
|
|
)
|
|
|
|
type BpfProgType uint32
|
|
|
|
const (
|
|
BPF_PROG_TYPE_UNSPEC BpfProgType = iota
|
|
BPF_PROG_TYPE_SOCKET_FILTER
|
|
BPF_PROG_TYPE_KPROBE
|
|
BPF_PROG_TYPE_SCHED_CLS
|
|
BPF_PROG_TYPE_SCHED_ACT
|
|
BPF_PROG_TYPE_TRACEPOINT
|
|
BPF_PROG_TYPE_XDP
|
|
BPF_PROG_TYPE_PERF_EVENT
|
|
BPF_PROG_TYPE_CGROUP_SKB
|
|
BPF_PROG_TYPE_CGROUP_SOCK
|
|
BPF_PROG_TYPE_LWT_IN
|
|
BPF_PROG_TYPE_LWT_OUT
|
|
BPF_PROG_TYPE_LWT_XMIT
|
|
BPF_PROG_TYPE_SOCK_OPS
|
|
BPF_PROG_TYPE_SK_SKB
|
|
BPF_PROG_TYPE_CGROUP_DEVICE
|
|
BPF_PROG_TYPE_SK_MSG
|
|
BPF_PROG_TYPE_RAW_TRACEPOINT
|
|
BPF_PROG_TYPE_CGROUP_SOCK_ADDR
|
|
BPF_PROG_TYPE_LWT_SEG6LOCAL
|
|
BPF_PROG_TYPE_LIRC_MODE2
|
|
BPF_PROG_TYPE_SK_REUSEPORT
|
|
BPF_PROG_TYPE_FLOW_DISSECTOR
|
|
BPF_PROG_TYPE_CGROUP_SYSCTL
|
|
BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE
|
|
BPF_PROG_TYPE_CGROUP_SOCKOPT
|
|
BPF_PROG_TYPE_TRACING
|
|
BPF_PROG_TYPE_STRUCT_OPS
|
|
BPF_PROG_TYPE_EXT
|
|
BPF_PROG_TYPE_LSM
|
|
BPF_PROG_TYPE_SK_LOOKUP
|
|
)
|
|
|
|
type BPFAttr struct {
|
|
ProgType uint32
|
|
InsnCnt uint32
|
|
Insns uintptr
|
|
License uintptr
|
|
LogLevel uint32
|
|
LogSize uint32
|
|
LogBuf uintptr
|
|
KernVersion uint32
|
|
}
|
|
|
|
// loadSimpleBpf loads a trivial bpf program for testing purposes.
|
|
func loadSimpleBpf(progType BpfProgType, ret uint32) (int, error) {
|
|
insns := []uint64{
|
|
0x00000000000000b7 | (uint64(ret) << 32),
|
|
0x0000000000000095,
|
|
}
|
|
license := []byte{'A', 'S', 'L', '2', '\x00'}
|
|
attr := BPFAttr{
|
|
ProgType: uint32(progType),
|
|
InsnCnt: uint32(len(insns)),
|
|
Insns: uintptr(unsafe.Pointer(&insns[0])),
|
|
License: uintptr(unsafe.Pointer(&license[0])),
|
|
}
|
|
fd, _, errno := unix.Syscall(unix.SYS_BPF,
|
|
5, /* bpf cmd */
|
|
uintptr(unsafe.Pointer(&attr)),
|
|
unsafe.Sizeof(attr))
|
|
if errno != 0 {
|
|
return 0, errno
|
|
}
|
|
return int(fd), nil
|
|
}
|