Skip to content
Library to work with eBPF programs from Go
Go C Makefile
Branch: master
Clone or download
Konstantin Belyalov
Latest commit b4a5d62 Nov 2, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github
examples
goebpf_mock Added Upsert method to map types, which will update an existing entry… Aug 8, 2019
itest Added Upsert method to map types, which will update an existing entry… Aug 8, 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
bpf.h
bpf_helpers.h
doc.go
ebpf.go
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 Added Upsert method to map types, which will update an existing entry… Aug 8, 2019
map_test.go
program_base.go
program_socket_filter.go
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.