github.com/cilium/ebpf@v0.15.1-0.20240517100537-8079b37aa138/README.md (about)

     1  # eBPF
     2  
     3  [![PkgGoDev](https://pkg.go.dev/badge/github.com/cilium/ebpf)](https://pkg.go.dev/github.com/cilium/ebpf)
     4  
     5  ![HoneyGopher](docs/ebpf/ebpf-go.png)
     6  
     7  ebpf-go is a pure Go library that provides utilities for loading, compiling, and
     8  debugging eBPF programs. It has minimal external dependencies and is intended to
     9  be used in long running processes.
    10  
    11  See [ebpf.io](https://ebpf.io) for complementary projects from the wider eBPF
    12  ecosystem.
    13  
    14  ## Getting Started
    15  
    16  Please take a look at our [Getting Started] guide.
    17  
    18  [Contributions](https://ebpf-go.dev/contributing) are highly encouraged, as they highlight certain use cases of
    19  eBPF and the library, and help shape the future of the project.
    20  
    21  ## Getting Help
    22  
    23  The community actively monitors our [GitHub Discussions](https://github.com/cilium/ebpf/discussions) page.
    24  Please search for existing threads before starting a new one. Refrain from
    25  opening issues on the bug tracker if you're just starting out or if you're not
    26  sure if something is a bug in the library code.
    27  
    28  Alternatively, [join](https://ebpf.io/slack) the
    29  [#ebpf-go](https://cilium.slack.com/messages/ebpf-go) channel on Slack if you
    30  have other questions regarding the project. Note that this channel is ephemeral
    31  and has its history erased past a certain point, which is less helpful for
    32  others running into the same problem later.
    33  
    34  ## Packages
    35  
    36  This library includes the following packages:
    37  
    38  * [asm](https://pkg.go.dev/github.com/cilium/ebpf/asm) contains a basic
    39    assembler, allowing you to write eBPF assembly instructions directly
    40    within your Go code. (You don't need to use this if you prefer to write your eBPF program in C.)
    41  * [cmd/bpf2go](https://pkg.go.dev/github.com/cilium/ebpf/cmd/bpf2go) allows
    42    compiling and embedding eBPF programs written in C within Go code. As well as
    43    compiling the C code, it auto-generates Go code for loading and manipulating
    44    the eBPF program and map objects.
    45  * [link](https://pkg.go.dev/github.com/cilium/ebpf/link) allows attaching eBPF
    46    to various hooks
    47  * [perf](https://pkg.go.dev/github.com/cilium/ebpf/perf) allows reading from a
    48    `PERF_EVENT_ARRAY`
    49  * [ringbuf](https://pkg.go.dev/github.com/cilium/ebpf/ringbuf) allows reading from a
    50    `BPF_MAP_TYPE_RINGBUF` map
    51  * [features](https://pkg.go.dev/github.com/cilium/ebpf/features) implements the equivalent
    52    of `bpftool feature probe` for discovering BPF-related kernel features using native Go.
    53  * [rlimit](https://pkg.go.dev/github.com/cilium/ebpf/rlimit) provides a convenient API to lift
    54    the `RLIMIT_MEMLOCK` constraint on kernels before 5.11.
    55  * [btf](https://pkg.go.dev/github.com/cilium/ebpf/btf) allows reading the BPF Type Format.
    56  
    57  ## Requirements
    58  
    59  * A version of Go that is [supported by
    60    upstream](https://golang.org/doc/devel/release.html#policy)
    61  * CI is run against kernel.org LTS releases. >= 4.4 should work but EOL'ed versions
    62    are not supported.
    63  
    64  ## License
    65  
    66  MIT
    67  
    68  ### eBPF Gopher
    69  
    70  The eBPF honeygopher is based on the Go gopher designed by Renee French.
    71  
    72  [Getting Started]: https://ebpf-go.dev/guides/getting-started/