github.com/kubeshark/ebpf@v0.9.2/link/tracing_test.go (about) 1 package link 2 3 import ( 4 "testing" 5 6 "github.com/kubeshark/ebpf" 7 "github.com/kubeshark/ebpf/internal" 8 "github.com/kubeshark/ebpf/internal/testutils" 9 ) 10 11 func TestFreplace(t *testing.T) { 12 testutils.SkipOnOldKernel(t, "5.10", "freplace") 13 14 testutils.Files(t, testutils.Glob(t, "../testdata/freplace-*.elf"), func(t *testing.T, file string) { 15 spec, err := ebpf.LoadCollectionSpec(file) 16 if err != nil { 17 t.Fatal("Can't parse ELF:", err) 18 } 19 20 if spec.ByteOrder != internal.NativeEndian { 21 return 22 } 23 24 target, err := ebpf.NewProgram(spec.Programs["sched_process_exec"]) 25 testutils.SkipIfNotSupported(t, err) 26 if err != nil { 27 t.Fatal("Can't create target program:", err) 28 } 29 defer target.Close() 30 31 // Test attachment specified at load time 32 spec.Programs["replacement"].AttachTarget = target 33 replacement, err := ebpf.NewProgram(spec.Programs["replacement"]) 34 testutils.SkipIfNotSupported(t, err) 35 if err != nil { 36 t.Fatal("Can't create replacement program:", err) 37 } 38 defer replacement.Close() 39 40 freplace, err := AttachFreplace(nil, "", replacement) 41 if err != nil { 42 t.Fatal("Can't create freplace:", err) 43 } 44 45 testLink(t, freplace, replacement) 46 }) 47 } 48 49 func TestTracing(t *testing.T) { 50 testutils.SkipOnOldKernel(t, "5.11", "BPF_LINK_TYPE_TRACING") 51 tests := []struct { 52 name string 53 attachTo string 54 programType ebpf.ProgramType 55 attachType ebpf.AttachType 56 }{ 57 { 58 name: "AttachTraceFEntry", 59 attachTo: "inet_dgram_connect", 60 programType: ebpf.Tracing, 61 attachType: ebpf.AttachTraceFEntry, 62 }, 63 { 64 name: "AttachTraceFExit", 65 attachTo: "inet_dgram_connect", 66 programType: ebpf.Tracing, 67 attachType: ebpf.AttachTraceFExit, 68 }, 69 { 70 name: "AttachModifyReturn", 71 attachTo: "bpf_modify_return_test", 72 programType: ebpf.Tracing, 73 attachType: ebpf.AttachModifyReturn, 74 }, 75 { 76 name: "AttachTraceRawTp", 77 attachTo: "kfree_skb", 78 programType: ebpf.Tracing, 79 attachType: ebpf.AttachTraceRawTp, 80 }, 81 } 82 83 for _, tt := range tests { 84 t.Run(tt.name, func(t *testing.T) { 85 prog := mustLoadProgram(t, tt.programType, tt.attachType, tt.attachTo) 86 87 link, err := AttachTracing(TracingOptions{Program: prog}) 88 if err != nil { 89 t.Fatal(err) 90 } 91 92 testLink(t, link, prog) 93 }) 94 } 95 } 96 97 func TestLSM(t *testing.T) { 98 testutils.SkipOnOldKernel(t, "5.11", "BPF_LINK_TYPE_TRACING") 99 100 prog := mustLoadProgram(t, ebpf.LSM, ebpf.AttachLSMMac, "file_mprotect") 101 102 link, err := AttachLSM(LSMOptions{Program: prog}) 103 if err != nil { 104 t.Fatal(err) 105 } 106 107 testLink(t, link, prog) 108 }