eBIERpf is a transparent BIER extension for linux hosts.
Outgoing IPMC packets are mapped to a BIER header (if configured) which is then pushed in the egress processing.
Incoming BIER packets are decpasulated if the corresponding local decap bits are set.
The program is configured using a JSON file that sets a static BIER header for a given IPMC address.
Further, a wireshark dissector for analysing packets is provided in bier.lua.
See config.json for an example config.
local defines the local decap bits, entries is a dictionary of mappings from IPMC to BIER header.
Once built, you can run the program as follows
cargo run --release --config 'target."cfg(all())".runner="sudo -E"' -- --iface eth0 --config config.json
Currently the program can only bind to a single interface for receiving/sending BIER traffic.
- stable rust toolchains:
rustup toolchain install stable - nightly rust toolchains:
rustup toolchain install nightly --component rust-src - (if cross-compiling) rustup target:
rustup target add ${ARCH}-unknown-linux-musl - (if cross-compiling) LLVM: (e.g.)
brew install llvm(on macOS) - (if cross-compiling) C toolchain: (e.g.)
brew install filosottile/musl-cross/musl-cross(on macOS) - bpf-linker:
cargo install bpf-linker(--no-default-featureson macOS)
Use cargo build, cargo check, etc. as normal. Run your program with:
cargo run --release --config 'target."cfg(all())".runner="sudo -E"'Cargo build scripts are used to automatically build the eBPF correctly and include it in the program.
Cross compilation should work on both Intel and Apple Silicon Macs.
CC=${ARCH}-linux-musl-gcc cargo build --package testxdp --release \
--target=${ARCH}-unknown-linux-musl \
--config=target.${ARCH}-unknown-linux-musl.linker=\"${ARCH}-linux-musl-gcc\"The cross-compiled program target/${ARCH}-unknown-linux-musl/release/testxdp can be
copied to a Linux server or VM and run there.
With the exception of eBPF code, ebpf-bier is distributed under the terms of either the MIT license or the Apache License (version 2.0), at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
All eBPF code is distributed under either the terms of the GNU General Public License, Version 2 or the MIT license, at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the GPL-2 license, shall be dual licensed as above, without any additional terms or conditions.

