Materials by Teodor Janez Podobnik

Explore tutorials, challenges, courses, and more published by this author.

Tutorials by Teodor Janez Podobnik

See all →
Tutorial

Building an eBPF/XDP NAT-Based (Weighted) Round Robin Load Balancer from Scratch

In this lab, you’ll build a NAT-based eBPF/XDP load balancer from scratch and implement both round-robin and weighted round-robin backend selection. Along the way, you’ll learn how to manage state in eBPF maps and distribute traffic across backends based on simple and capacity-aware scheduling strategies.

Building an eBPF/XDP NAT-Based (Weighted) Round Robin Load Balancer from Scratch (cover image)
Tutorial

Transparent Ingress Proxy with eBPF and Envoy

This lab shows how to use eBPF to transparently redirect inbound traffic through an Envoy proxy on the server side, without modifying the application or client. You’ll learn how eBPF can intercept and restore connections so the service remains unaware of the proxy in the network path.

Transparent Ingress Proxy with eBPF and Envoy (cover image)
Tutorial

Transparent Egress Proxy with eBPF and Envoy

This lab teaches you how to use eBPF to transparently intercept and redirect a client's outgoing traffic to an Envoy proxy without requiring any changes to the application code. You will build a system that recovers original connection metadata via socket-level hooks and uses SO_MARK to prevent infinite routing loops, replacing traditional, complex iptables rules with a high-performance eBPF alternative.

Transparent Egress Proxy with eBPF and Envoy (cover image)
Tutorial

All The Ways To Loop and Iterate in eBPF

In this tutorial you will learn different ways to implement loops in eBPF, explaining how iteration evolved from manual loop unrolling to modern mechanisms like bounded loops, helper functions, and open-coded iterators. It walks through the limitations, kernel version requirements, and practical examples for each approach so you can choose the most appropriate looping method for your eBPF programs.

All The Ways To Loop and Iterate in eBPF (cover image)

Challenges by Teodor Janez Podobnik

See all →
Challenge,  Easy

eBPF Challenge for Beginners

In this challenge, you’ll debug and fix a deliberately “broken” eBPF program, then prove it’s running by identifying its program and map IDs. Along the way, you’ll explore bpftool, check which helpers are supported, and dig into details like the UID of the loader. Finally, you’ll test your knowledge of eBPF maps by recalling the flag that only inserts a key if it doesn’t already exist.

Submissions: 113/352

Skill Paths by Teodor Janez Podobnik

See all →
Skill Path

eBPF/XDP Network Skill Path

A hands-on learning path that teaches how to use eBPF and XDP for high-performance, in-kernel packet processing, from protocol parsing to advanced use cases like firewalling, rate limiting, and load balancing.

Skill Path

eBPF CO-RE Skill Path

In this learning path, you’ll go from comparing different tracing program types — tracepoints, raw tracepoints, kprobes, and fprobes — to writing portable eBPF programs that work reliably across environments. You’ll also understand the role of BTF and learn how to make your eBPF code portable even when BTF isn’t available on the target system.

Skill Path

eBPF Beginner Skill Path

Learn eBPF from the ground up — from writing and running your first program, to storing data in eBPF maps, inspecting and monitoring kernel activity using bpftool and bpftop, and understanding how the verifier ensures safe eBPF execution. Finish with a hands-on challenge to put your new skills to the test.

  • 4 Tutorials
  • 1 Challenge
  • Easy