Checksum calculation helpers for eBPF programs.
These helpers use BPF kernel helper functions for efficient checksum updates. Most are designed for TC/SKB programs.
Checksum calculation helpers for eBPF programs. These helpers use BPF kernel helper functions for efficient checksum updates. Most are designed for TC/SKB programs.
(csum-diff from-ptr-reg from-size to-ptr-reg to-size seed-reg)Generate instructions to compute checksum difference. Uses bpf_csum_diff kernel helper.
Works in both XDP and TC programs.
from-ptr-reg: Pointer to old data (can be stack or map value) from-size: Size of old data in bytes (must be multiple of 4) to-ptr-reg: Pointer to new data to-size: Size of new data in bytes (must be multiple of 4) seed-reg: Initial checksum value (0 for new calculation)
Returns: Checksum difference in r0
Clobbers: r1-r5, r0
Generate instructions to compute checksum difference. Uses bpf_csum_diff kernel helper. Works in both XDP and TC programs. from-ptr-reg: Pointer to old data (can be stack or map value) from-size: Size of old data in bytes (must be multiple of 4) to-ptr-reg: Pointer to new data to-size: Size of new data in bytes (must be multiple of 4) seed-reg: Initial checksum value (0 for new calculation) Returns: Checksum difference in r0 Clobbers: r1-r5, r0
(fold-csum-32 csum-reg scratch-reg)Fold a 32-bit checksum value into 16 bits. Used after accumulating checksum values.
csum-reg: Register containing 32-bit checksum (will be modified to 16-bit)
Fold a 32-bit checksum value into 16 bits. Used after accumulating checksum values. csum-reg: Register containing 32-bit checksum (will be modified to 16-bit)
(l3-csum-replace-2 skb-reg csum-offset old-val-reg new-val-reg)Generate instructions to update L3 checksum for a 2-byte value change.
skb-reg: SKB pointer register csum-offset: Offset to checksum field from packet start old-val-reg: Register with old 2-byte value new-val-reg: Register with new 2-byte value
Clobbers: r1-r5, r0
Generate instructions to update L3 checksum for a 2-byte value change. skb-reg: SKB pointer register csum-offset: Offset to checksum field from packet start old-val-reg: Register with old 2-byte value new-val-reg: Register with new 2-byte value Clobbers: r1-r5, r0
(l3-csum-replace-4 skb-reg csum-offset old-val-reg new-val-reg)Generate instructions to update L3 (IP) checksum for a 4-byte value change. Uses bpf_l3_csum_replace kernel helper.
For TC programs only (requires SKB).
skb-reg: SKB pointer register (typically :r1 saved to callee-saved reg) csum-offset: Offset to checksum field from packet start old-val-reg: Register with old 4-byte value new-val-reg: Register with new 4-byte value
Clobbers: r1-r5, r0 (return value)
Generate instructions to update L3 (IP) checksum for a 4-byte value change. Uses bpf_l3_csum_replace kernel helper. For TC programs only (requires SKB). skb-reg: SKB pointer register (typically :r1 saved to callee-saved reg) csum-offset: Offset to checksum field from packet start old-val-reg: Register with old 4-byte value new-val-reg: Register with new 4-byte value Clobbers: r1-r5, r0 (return value)
(l4-csum-replace-2 skb-reg csum-offset old-val-reg new-val-reg pseudo-hdr?)Generate instructions to update L4 checksum for a 2-byte value change.
skb-reg: SKB pointer register csum-offset: Offset to checksum field from packet start old-val-reg: Register with old 2-byte value new-val-reg: Register with new 2-byte value pseudo-hdr?: If true, include BPF_F_PSEUDO_HDR flag
Clobbers: r1-r5, r0
Generate instructions to update L4 checksum for a 2-byte value change. skb-reg: SKB pointer register csum-offset: Offset to checksum field from packet start old-val-reg: Register with old 2-byte value new-val-reg: Register with new 2-byte value pseudo-hdr?: If true, include BPF_F_PSEUDO_HDR flag Clobbers: r1-r5, r0
(l4-csum-replace-4 skb-reg csum-offset old-val-reg new-val-reg pseudo-hdr?)Generate instructions to update L4 (TCP/UDP) checksum for a 4-byte value change. Uses bpf_l4_csum_replace kernel helper.
For TC programs only (requires SKB).
skb-reg: SKB pointer register csum-offset: Offset to checksum field from packet start old-val-reg: Register with old 4-byte value new-val-reg: Register with new 4-byte value pseudo-hdr?: If true, include BPF_F_PSEUDO_HDR flag (for IP address changes)
Clobbers: r1-r5, r0
Generate instructions to update L4 (TCP/UDP) checksum for a 4-byte value change. Uses bpf_l4_csum_replace kernel helper. For TC programs only (requires SKB). skb-reg: SKB pointer register csum-offset: Offset to checksum field from packet start old-val-reg: Register with old 4-byte value new-val-reg: Register with new 4-byte value pseudo-hdr?: If true, include BPF_F_PSEUDO_HDR flag (for IP address changes) Clobbers: r1-r5, r0
(negate-csum csum-reg)Negate checksum (one's complement).
csum-reg: Register containing checksum (will be negated)
Negate checksum (one's complement). csum-reg: Register containing checksum (will be negated)
(update-ip-checksum skb-reg ip-hdr-offset old-val-reg new-val-reg)Update IP checksum after changing a 4-byte field (e.g., saddr or daddr).
skb-reg: SKB pointer register ip-hdr-offset: Offset to IP header from packet start (typically 14) old-val-reg: Register with old value new-val-reg: Register with new value
Clobbers: r1-r5, r0
Update IP checksum after changing a 4-byte field (e.g., saddr or daddr). skb-reg: SKB pointer register ip-hdr-offset: Offset to IP header from packet start (typically 14) old-val-reg: Register with old value new-val-reg: Register with new value Clobbers: r1-r5, r0
(update-tcp-checksum-for-ip skb-reg l4-hdr-offset old-ip-reg new-ip-reg)Update TCP checksum after IP address change. TCP checksum includes pseudo-header with IP addresses.
skb-reg: SKB pointer register l4-hdr-offset: Offset to TCP header from packet start old-ip-reg: Register with old IP address new-ip-reg: Register with new IP address
Clobbers: r1-r5, r0
Update TCP checksum after IP address change. TCP checksum includes pseudo-header with IP addresses. skb-reg: SKB pointer register l4-hdr-offset: Offset to TCP header from packet start old-ip-reg: Register with old IP address new-ip-reg: Register with new IP address Clobbers: r1-r5, r0
(update-tcp-checksum-for-port skb-reg l4-hdr-offset old-port-reg new-port-reg)Update TCP checksum after port change.
skb-reg: SKB pointer register l4-hdr-offset: Offset to TCP header from packet start old-port-reg: Register with old port (network order) new-port-reg: Register with new port (network order)
Clobbers: r1-r5, r0
Update TCP checksum after port change. skb-reg: SKB pointer register l4-hdr-offset: Offset to TCP header from packet start old-port-reg: Register with old port (network order) new-port-reg: Register with new port (network order) Clobbers: r1-r5, r0
(update-udp-checksum-for-ip skb-reg l4-hdr-offset old-ip-reg new-ip-reg)Update UDP checksum after IP address change. UDP checksum includes pseudo-header with IP addresses.
skb-reg: SKB pointer register l4-hdr-offset: Offset to UDP header from packet start old-ip-reg: Register with old IP address new-ip-reg: Register with new IP address
Clobbers: r1-r5, r0
Update UDP checksum after IP address change. UDP checksum includes pseudo-header with IP addresses. skb-reg: SKB pointer register l4-hdr-offset: Offset to UDP header from packet start old-ip-reg: Register with old IP address new-ip-reg: Register with new IP address Clobbers: r1-r5, r0
(update-udp-checksum-for-port skb-reg l4-hdr-offset old-port-reg new-port-reg)Update UDP checksum after port change.
skb-reg: SKB pointer register l4-hdr-offset: Offset to UDP header from packet start old-port-reg: Register with old port (network order) new-port-reg: Register with new port (network order)
Clobbers: r1-r5, r0
Update UDP checksum after port change. skb-reg: SKB pointer register l4-hdr-offset: Offset to UDP header from packet start old-port-reg: Register with old port (network order) new-port-reg: Register with new port (network order) Clobbers: r1-r5, r0
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 |