Skip to content
Library to work with eBPF programs from Go
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github [AutoAssign] add belyalov to reviewers list Jul 19, 2019
examples [SocketFilter] Add support for SocketFilter eBPF programs (#6) Jul 1, 2019
goebpf_mock Fix golint issues May 21, 2019
itest [SocketFilter] Add support for SocketFilter eBPF programs (#6) Jul 1, 2019
.gitignore [SocketFilter] Add support for SocketFilter eBPF programs (#6) Jul 1, 2019
.travis.yml Use the latest Go release (#9) Jul 13, 2019
LICENSE Initial commit of goebpf library. Apr 17, 2019
README.md [readme] Fix quick start example Jul 3, 2019
bpf.h Initial commit of goebpf library. Apr 17, 2019
bpf_helpers.h [bpf map/funcs] updated maps and bpf functions to kernel 5.2 (#11) Jul 19, 2019
doc.go [doc] Fix example. Jul 2, 2019
ebpf.go [SocketFilter] Add support for SocketFilter eBPF programs (#6) Jul 1, 2019
loader.go [SocketFilter] Add support for SocketFilter eBPF programs (#6) Jul 1, 2019
loader_test.go Initial commit of goebpf library. Apr 17, 2019
map.go [bpf map/funcs] updated maps and bpf functions to kernel 5.2 (#11) Jul 19, 2019
map_test.go Initial commit of goebpf library. Apr 17, 2019
program_base.go [SocketFilter] Add support for SocketFilter eBPF programs (#6) Jul 1, 2019
program_socket_filter.go [SocketFilter] Add support for SocketFilter eBPF programs (#6) Jul 1, 2019
program_xdp.go Change "Program" interface: Attach() to accept interface{} instead of… Jun 20, 2019
utils.go [utils/parseNumOfPossibleCpus] Add support for single CPU VM Jul 19, 2019
utils_test.go [utils/parseNumOfPossibleCpus] Add support for single CPU VM Jul 19, 2019

README.md

Go eBPF

Build Status Go Report Card Documentation

A nice and convenient way to work with eBPF programs from Go.

Requirements

  • Go 1.9+
  • Linux Kernel 4.15+

Supported eBPF program types

List of currently supported eBPF programs:

  • SocketFilter
  • XDP

Support for other types of program can be added in future. Feel free to contribute :)

Installation

# Main library
go get github.com/dropbox/goebpf

# Mock version (if needed)
go get github.com/dropbox/goebpf/goebpf_mock

Quick start

Consider very simple example of Read / Load / Attach

    // In order to be simple this examples does not handle errors
    bpf := goebpf.NewDefaultEbpfSystem()
    // Read clang compiled binary
    bpf.LoadElf("test.elf")
    // Load XDP program into kernel (name matches function name in C)
    xdp := bpf.GetProgramByName("xdp_test")
    xdp.Load()
    // Attach to interface
    xdp.Attach("eth0")
    defer xdp.Detach()
    // Work with maps
    test := bpf.GetMapByName("test")
    value, _ := test.LookupInt(0)
    fmt.Printf("Value at index 0 of map 'test': %d\n", )

Like it? Check our examples

Good readings

You can’t perform that action at this time.