bpf2go

command
v0.9.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 19, 2022 License: MIT Imports: 21 Imported by: 1

README

bpf2go

bpf2go compiles a C source file into eBPF bytecode and then emits a Go file containing the eBPF. The goal is to avoid loading the eBPF from disk at runtime and to minimise the amount of manual work required to interact with eBPF programs. It takes inspiration from bpftool gen skeleton.

Invoke the program using go generate:

//go:generate go run github.com/cilium/ebpf/cmd/bpf2go foo path/to/src.c -- -I/path/to/include

This will emit foo_bpfel.go and foo_bpfeb.go, with types using foo as a stem. The two files contain compiled BPF for little and big endian systems, respectively.

You can use environment variables to affect all bpf2go invocations across a project, e.g. to set specific C flags:

//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -cflags "$BPF_CFLAGS" foo path/to/src.c

By exporting $BPF_CFLAGS from your build system you can then control all builds from a single location.

Generated types

bpf2go generates Go types for all map keys and values by default. You can disable this behaviour using -no-global-types. You can add to the set of types by specifying -type foo for each type you'd like to generate.

Examples

See examples/kprobe for a fully worked out example.

Documentation

Overview

Program bpf2go embeds eBPF in Go.

Please see the README for details how to use it.

Directories

Path Synopsis
Package test checks that the code generated by bpf2go conforms to a specific API.
Package test checks that the code generated by bpf2go conforms to a specific API.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL