Skip to content

Commit

Permalink
Refactor code of attaching skb-tracking kprobe
Browse files Browse the repository at this point in the history
Hide the attaching details of tracking skb from `main.go`.

Signed-off-by: Leon Hwang <hffilwlqm@gmail.com>
  • Loading branch information
Asphaltt committed Mar 4, 2024
1 parent 86cca67 commit f430afd
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 31 deletions.
60 changes: 60 additions & 0 deletions internal/pwru/skb_tracker.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// SPDX-License-Identifier: Apache-2.0
/* Copyright 2024 Authors of Cilium */

package pwru

import (
"errors"
"log"
"os"

"github.com/cilium/ebpf"
"github.com/cilium/ebpf/link"
)

type skbTracker struct {
links []link.Link
}

func (t *skbTracker) Close() {
for _, l := range t.links {
_ = l.Close()
}
t.links = nil
}

func TrackSkb(coll *ebpf.Collection, haveFexit bool) *skbTracker {
var t skbTracker

kp, err := link.Kprobe("kfree_skbmem", coll.Programs["kprobe_skb_lifetime_termination"], nil)
if err != nil {
if !errors.Is(err, os.ErrNotExist) {
log.Fatalf("Opening kprobe kfree_skbmem: %s\n", err)
} else {
log.Printf("Warn: kfree_skbmem not found, pwru is likely to mismatch skb due to lack of skb lifetime management\n")
}
} else {
t.links = append(t.links, kp)
}

if haveFexit {
progs := []*ebpf.Program{
coll.Programs["fexit_skb_clone"],
coll.Programs["fexit_skb_copy"],
}
for _, prog := range progs {
fexit, err := link.AttachTracing(link.TracingOptions{
Program: prog,
})
if err != nil {
if !errors.Is(err, os.ErrNotExist) {
log.Fatalf("Opening tracing(%s): %s\n", prog, err)
}
} else {
t.links = append(t.links, fexit)
}
}
}

return &t
}
34 changes: 3 additions & 31 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import (

"github.com/cilium/ebpf"
"github.com/cilium/ebpf/btf"
"github.com/cilium/ebpf/link"
"github.com/cilium/ebpf/rlimit"
"golang.org/x/sys/unix"

Expand Down Expand Up @@ -196,36 +195,9 @@ func main() {
defer close()
}

if flags.FilterTrackSkb {
kp, err := link.Kprobe("kfree_skbmem", coll.Programs["kprobe_skb_lifetime_termination"], nil)
if err != nil {
if !errors.Is(err, os.ErrNotExist) {
log.Fatalf("Opening kprobe kfree_skbmem: %s\n", err)
} else {
log.Printf("Warn: kfree_skbmem not found, pwru is likely to mismatch skb due to lack of skb lifetime management\n")
}
} else {
defer kp.Close()
}

if haveFexit {
progs := []*ebpf.Program{
coll.Programs["fexit_skb_clone"],
coll.Programs["fexit_skb_copy"],
}
for _, prog := range progs {
fexit, err := link.AttachTracing(link.TracingOptions{
Program: prog,
})
if err != nil {
if !errors.Is(err, os.ErrNotExist) {
log.Fatalf("Opening tracing(%s): %s\n", prog, err)
}
} else {
defer fexit.Close()
}
}
}
if flags.FilterTrackSkb && len(funcs) != 0 {
t := pwru.TrackSkb(coll, haveFexit)
defer t.Close()
}

if len(funcs) != 0 {
Expand Down

0 comments on commit f430afd

Please sign in to comment.