60 lines
1.4 KiB
Markdown
60 lines
1.4 KiB
Markdown
# l3-l4-forwarding-in-xdp
|
|
|
|
L3/L4 XDP-based forwarding system for BIRD and Linux routers for achieving line-speed forwarding.
|
|
|
|
This project implements Layer 3 (IP) and Layer 4 (TCP/UDP) packet forwarding using eBPF and XDP (eXpress Data Path). It leverages the high-performance capabilities of XDP for efficient packet processing in the Linux kernel with bird or FRR.
|
|
|
|
**Note:** `xdp-tools` is highly recommended for loading and managing the XDP program.
|
|
|
|
## Installation
|
|
|
|
Install the necessary dependencies using `apt`:
|
|
|
|
```bash
|
|
apt update
|
|
apt install clang llvm libbpf-dev libelf-dev pkg-config make git bpftool xdp-tools
|
|
```
|
|
|
|
## Compilation
|
|
|
|
Compile the eBPF program from the source code:
|
|
|
|
```bash
|
|
clang -O2 -g -Wall -target bpf -D__BPF_TRACING__ -I /usr/src/linux-headers-$(uname -r)/include -c main.c -o main.o
|
|
```
|
|
|
|
This will generate the object file `main.o` which contains the compiled eBPF code.
|
|
|
|
## Usage
|
|
|
|
### Attach to the Interface
|
|
|
|
Load the XDP program onto a network interface (e.g., `eth0`):
|
|
|
|
```bash
|
|
xdp-loader load eth0 ./main.o
|
|
```
|
|
|
|
Check the status of loaded XDP programs:
|
|
|
|
```bash
|
|
xdp-loader status
|
|
```
|
|
|
|
### Monitoring and Debugging
|
|
|
|
Use `bpftool` to inspect maps and statistics:
|
|
|
|
```bash
|
|
bpftool map show
|
|
```
|
|
|
|
These commands will display information about the eBPF maps used in the program, such as flow statistics.
|
|
|
|
## Unloading the Program
|
|
|
|
To unload the XDP program from the interface:
|
|
|
|
```bash
|
|
xdp-loader unload eth0
|
|
``` |