All notable changes to clj-ebpf will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
bpf-link-create-iter - Create BPF link for iterator programsbpf-iter-create - Create iterator file descriptor from linkclj-ebpf.dsl.iter):
iter-prologue, iter-prologue-with-meta - Standard iterator prologuesiter-load-ctx-ptr, iter-load-meta-field - Context field accessiter-check-null, iter-check-null-and-exit - NULL pointer handlingseq-write - Write raw bytes to output (bpf_seq_write helper)seq-printf-simple - Write formatted output (bpf_seq_printf helper)probe-read-kernel, probe-read-kernel-str - Safe kernel memory accessalloc-stack-buffer - Stack buffer allocation helperiter-return-continue, iter-return-stop - Return patternstask-load-pid, task-load-tgid - Task struct field helpersbuild-iter-program - Complete iterator program builderiter-section-name, make-iter-info - ELF section and metadataminimal-task-iterator, task-null-check-template - Templatesclj-ebpf.programs):
BpfIterator record for iterator lifecycle managementcreate-iterator, close-iterator - Iterator lifecyclewith-iterator macro - Automatic cleanupload-iterator-program - Load and prepare iterator programstutorials/quick-start-iterators.md):
docs/guides/iterators-guide.md):
examples/iter_task_dump.clj)tutorials/README.md with BPF Iterators sectiondocs/README.md with BPF Iterators guide entryattach-flow-dissector - Attach FLOW_DISSECTOR programs to network namespacedetach-flow-dissector - Detach FLOW_DISSECTOR programsclj-ebpf.dsl.flow-dissector):
flow-dissector-prologue - Standard prologue for FLOW_DISSECTOR programsflow-dissector-get-flow-keys-ptr - Get flow_keys output pointerflow-keys-set-nhoff, flow-keys-set-thoff - Set header offsetsflow-keys-set-addr-proto, flow-keys-set-ip-proto - Set protocol infoflow-keys-set-ports, flow-keys-set-ipv4-addrs - Set 5-tuple fieldsflow-dissector-parse-ethernet - Parse Ethernet headerflow-dissector-parse-ipv4 - Parse IPv4 headerflow-dissector-parse-tcp-ports, flow-dissector-parse-udp-ports - Parse transport portsflow-dissector-bounds-check - Packet bounds checking patternflow-dissector-ok, flow-dissector-drop - Return patternsbuild-flow-dissector-program - Program buildertutorials/quick-start-flow-dissector.md):
docs/guides/flow-dissector-guide.md):
examples/flow_dissector_custom.clj)tutorials/README.md with FLOW_DISSECTOR sectiondocs/README.md with FLOW_DISSECTOR guide entryattach-sk-lookup - Attach SK_LOOKUP programs to network namespacedetach-sk-lookup - Detach SK_LOOKUP programsclj-ebpf.dsl.sk-lookup):
sk-lookup-prologue - Standard prologue for SK_LOOKUP programssk-lookup-get-local-port, sk-lookup-get-remote-port - Load port fieldssk-lookup-get-protocol, sk-lookup-get-family - Load connection infosk-lookup-get-local-ip4, sk-lookup-get-remote-ip4 - Load IPv4 addressessk-lookup-check-port, sk-lookup-check-protocol - Common check patternssk-assign - Assign socket to handle connection (helper 124)sk-lookup-tcp, sk-lookup-udp - Lookup sockets (helpers 84, 85)sk-release - Release socket reference (helper 86)sk-lookup-pass, sk-lookup-drop - Return patternsbuild-sk-lookup-program - Program buildersyscall/bpf-link-create-netns):
tutorials/quick-start-sk-lookup.md):
docs/guides/sk-lookup-guide.md):
examples/sk_lookup_steering.clj)tutorials/README.md with SK_LOOKUP sectiondocs/README.md with SK_LOOKUP guide entrycreate-xsk-map - XDP Socket Map for AF_XDP (XSK) file descriptorsclj-ebpf.dsl.xdp):
xdp-redirect-to-xsk - Redirect packets to AF_XDP socket in XSKMAPxdp-redirect-to-xsk-by-queue - Redirect based on rx_queue_index (common pattern)tutorials/quick-start-xskmap.md):
docs/guides/xskmap-guide.md):
examples/xdp_xsk_redirect.clj)tutorials/README.md with XSKMAP sectiondocs/README.md with XSKMAP guide entrytutorials/quick-start-sockmap.md):
docs/guides/sockmap-guide.md):
tutorials/README.md with SOCKMAP sectiondocs/README.md with socket redirection guide entrycreate-sock-map - Array-based socket storage for SK_SKB/SK_MSG programscreate-sock-hash - Hash-based socket storage with custom keysclj-ebpf.dsl.socket):
sk-skb-prologue - Standard prologue for SK_SKB programssk-redirect-map - Redirect stream data to socket in SOCKMAPsk-redirect-hash - Redirect stream data to socket in SOCKHASHsk-skb-pass, sk-skb-drop - Return patternsclj-ebpf.dsl.socket):
sk-msg-prologue - Standard prologue for SK_MSG programsmsg-redirect-map - Redirect message to socket in SOCKMAPmsg-redirect-hash - Redirect message to socket in SOCKHASHsk-msg-pass, sk-msg-drop - Return patternssock-map-update - Add socket to SOCKMAP from BPF programsock-hash-update - Add socket to SOCKHASH from BPF programclj-ebpf.programs):
attach-sk-skb - Attach SK_SKB program to SOCKMAP/SOCKHASHattach-sk-msg - Attach SK_MSG program to SOCKMAP/SOCKHASHdetach-sk-skb, detach-sk-msg - Detach programs from mapsmsg-redirect-map (60), sock-hash-update (70)msg-redirect-hash (71), sk-redirect-hash (72)examples/sockmap_redirect.clj)create-dev-map - Array-based interface redirect map for L2 forwardingcreate-dev-map-hash - Hash-based interface redirect map for sparse mappingscreate-cpu-map - CPU steering map for custom RSS (Receive Side Scaling)clj-ebpf.dsl.xdp):
xdp-redirect - Direct interface index redirectxdp-redirect-map - Map-based redirect for DEVMAP/CPUMAP/XSKMAPxdp-redirect-to-interface - Convenience helper for DEVMAPxdp-redirect-to-cpu - Convenience helper for CPUMAPredirect-map (51), sk-redirect-map (52), sock-map-update (53), xdp-adjust-meta (54)examples/xdp_redirect_devmap.clj)clj-ebpf.macros) - New macro system that
reduces boilerplate by 60% and provides a more Clojure-idiomatic API:
defmap-spec - Define reusable BPF map specifications with sensible defaultsdefprogram - Define BPF programs declaratively with DSL instructionswith-bpf-script - Complete lifecycle management for maps, programs, and
attachments with automatic cleanupload-defprogram - Convenience function to load a defprogram speccreate-defmap - Convenience function to create a map from defmap-specclj-ebpf.core for convenient accesswith-bpf-script:
:xdp) with mode and flags options:tc) with direction and priority:kprobe, :kretprobe):tracepoint) with category and event:uprobe, :uretprobe) with binary and symbol/offset:cgroup-skb, :cgroup-sock) with cgroup path and direction:lsm) with hook namedocs/guides/macros.md)tutorials/quick-start-macros.md)examples/macro_dsl.clj)examples/simple_kprobe.clj to demonstrate both traditional and
macro approaches/proc filesystem files. The
get-current-cgroup function now uses java.nio.file.Files/readString
instead of slurp, which fails on /proc files in Java 25 due to
FileInputStream.available() returning EINVAL for special filesystem files.:inval but the syscall layer returns :einval.
Now map-lookup-batch, map-update-batch, map-delete-batch, and
map-lookup-and-delete-batch correctly fall back to individual operations
when the kernel doesn't support batch syscalls.examples/helpers_tutorial.clj)docs/guides/helpers-guide.md)bpf() syscall interface using Panama FFI (Java 25+)linux/bpf.hwith-map)with-program)Note: Many of these limitations have been addressed in later releases. See the full changelog for current capabilities.
See README.md for complete roadmap of planned features.
Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |