No description
Find a file
2025-12-12 18:23:24 +02:00
.github/workflows Use eBPF 2025-12-12 14:16:20 +02:00
tcbpf Increase resource limits 2025-12-12 18:23:24 +02:00
.gitignore Initial commit 2023-03-06 20:31:23 +02:00
colorping.service Increase resource limits 2025-12-12 18:23:24 +02:00
go.mod Use eBPF 2025-12-12 14:16:20 +02:00
go.sum Use eBPF 2025-12-12 14:16:20 +02:00
http.go Use eBPF 2025-12-12 14:16:20 +02:00
main.go Increase resource limits 2025-12-12 18:23:24 +02:00
Makefile Use eBPF 2025-12-12 14:16:20 +02:00
processing.go Use eBPF 2025-12-12 14:16:20 +02:00
README.md Increase resource limits 2025-12-12 18:23:24 +02:00
screenshot.png Initial commit 2023-03-06 20:31:23 +02:00
statistics.go Use eBPF 2025-12-12 14:16:20 +02:00
template.html Use eBPF 2025-12-12 14:16:20 +02:00
util.go Use eBPF 2025-12-12 14:16:20 +02:00

ColorPing

ColorPing screenshot

How does it work?

Each IPv6 address in a /64 IPv6 subnet is associated to one pixel with color (RGB) information.
When an address is pinged, the corresponding pixel is changed on the canvas and displayed to all viewers via a webpage.

Speed / Max packet rate

The program uses an eBPF program running in the Linux kernel eBPF sandbox. Since userspace is not involved, except for periodically polling the pixel array from the kernel, speed is not limited by this program.

Setup

Create a dummy interface and assign a /64 IPv6 subnet to it. The program needs to be run as root or with the CAP_NET_ADMIN, CAP_BPF, (CAP_SYS_RESOURCE) capabilities.

Access the webpage where the canvas is displayed at: http://localhost:9090/

Example setup

# ip link add canvas type dummy 
# ip addr add fdcf:8538:9ad5:3333::1/64 dev canvas
# ip link set up canvas
# ./ColorPing -i canvas

Ping format

ping ????:????:????:????:XXXX:YYYY:11RR:GGBB

Where:

  • ???? can be anything
  • XXXX must be the target X coordinate of the canvas, encoded as hexadecimal
  • YYYY must be the target Y coordinate of the canvas, encoded as hexadecimal
  • RR target "red" value (0255), encoded as hexadecimal
  • GG target "green" value (0255), encoded as hexadecimal
  • BB target "blue" value (0255), encoded as hexadecimal