Skip to content

Measure UDP and TCP connection latency for IPv4 and IPv6 using eBPF and Go

License

Notifications You must be signed in to change notification settings

pouriyajamshidi/flat

Folders and files

NameName
Last commit message
Last commit date
Jan 27, 2025
Sep 30, 2023
May 5, 2024
Sep 24, 2023
Nov 8, 2024
Nov 8, 2024
Dec 9, 2023
Jul 29, 2023
Nov 8, 2024
Feb 17, 2025
Feb 17, 2025

Repository files navigation

flat

Measure UDP and TCP flow latency for both IPv4 and IPv6 using eBPF.

This repo is the companion to my blog posts about eBPF at https://thegraynode.io/tags/flat/.

flat in action

Running The Program

You can install flat in two ways.

  1. Download the pre-compiled binary
  2. Compile from source

Download The Pre-compiled Binary

wget https://github.com/pouriyajamshidi/flat/releases/latest/download/flat

Then check out the examples.

Compile From Source

Clone the repository:

git clone https://github.com/pouriyajamshidi/flat .

Change directory to flat:

cd flat

While at the root of project directory, to compile the C code and generate the helper functions, run:

go generate ./...

Compile the Go program:

go build -ldflags "-s -w" -o flat cmd/flat.go

Examples

Run it with elevated privileges:

# Replace eth0 with your desired interface name
sudo ./flat -i eth0
# Or
sudo ./flat -i eth0 -ip 1.1.1.1
# Or
sudo ./flat -i eth0 -port 53
# Or
sudo ./flat -i eth0 -ip 1.1.1.1 -port 53

Flags

flat supports four flags at the moment:

flag Description
-i interface to attach the probe to
-ip IP address to filter on (optional)
-port Port number to filter on (optional)
-h Show help message

Acknolegments

Heavily inspired by flowlat.