...
1 package link
2
3 import (
4 "os"
5 "testing"
6
7 "github.com/cilium/ebpf"
8 "github.com/cilium/ebpf/asm"
9 "github.com/cilium/ebpf/internal/testutils"
10 )
11
12 func TestSkLookup(t *testing.T) {
13 testutils.SkipOnOldKernel(t, "5.8", "sk_lookup program")
14
15 prog := mustLoadProgram(t, ebpf.SkLookup, ebpf.AttachSkLookup, "")
16
17 netns, err := os.Open("/proc/self/ns/net")
18 if err != nil {
19 t.Fatal(err)
20 }
21 defer netns.Close()
22
23 link, err := AttachNetNs(int(netns.Fd()), prog)
24 if err != nil {
25 t.Fatal("Can't attach link:", err)
26 }
27
28 testLink(t, link, prog)
29 }
30
31 func createSkLookupProgram() (*ebpf.Program, error) {
32 prog, err := ebpf.NewProgram(&ebpf.ProgramSpec{
33 Type: ebpf.SkLookup,
34 AttachType: ebpf.AttachSkLookup,
35 License: "MIT",
36 Instructions: asm.Instructions{
37 asm.Mov.Imm(asm.R0, 0),
38 asm.Return(),
39 },
40 })
41 if err != nil {
42 return nil, err
43 }
44 return prog, nil
45 }
46
47 func ExampleAttachNetNs() {
48 prog, err := createSkLookupProgram()
49 if err != nil {
50 panic(err)
51 }
52 defer prog.Close()
53
54
55 netns, err := os.Open("/proc/self/ns/net")
56 if err != nil {
57 panic(err)
58 }
59 defer netns.Close()
60
61 link, err := AttachNetNs(int(netns.Fd()), prog)
62 if err != nil {
63 panic(err)
64 }
65
66
67 link.Close()
68 }
69
View as plain text