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.
(build-csum-diff old-ptr-reg old-size new-ptr-reg new-size seed)Generate bpf_csum_diff call for computing checksum difference.
Lower-level helper for complex checksum updates (e.g., when replacing multiple fields or entire headers).
Args: old-ptr-reg: Register with pointer to old data (or 0) old-size: Size of old data (or 0) new-ptr-reg: Register with pointer to new data (or 0) new-size: Size of new data (or 0) seed: Initial checksum value (0 for new calculation)
Returns: Vector of instructions, result in r0 (checksum delta)
Generate bpf_csum_diff call for computing checksum difference. Lower-level helper for complex checksum updates (e.g., when replacing multiple fields or entire headers). Args: old-ptr-reg: Register with pointer to old data (or 0) old-size: Size of old data (or 0) new-ptr-reg: Register with pointer to new data (or 0) new-size: Size of new data (or 0) seed: Initial checksum value (0 for new calculation) Returns: Vector of instructions, result in r0 (checksum delta)
Alias for l3-csum-replace-4. Generate incremental IP header checksum update.
Used when modifying IP header fields (e.g., TTL, addresses for NAT).
Args: ctx-reg: Register containing skb pointer csum-off: Byte offset of checksum field in packet old-reg: Register containing old value new-reg: Register containing new value
Returns: Vector of instructions, result in r0 (0 on success)
Alias for l3-csum-replace-4. Generate incremental IP header checksum update. Used when modifying IP header fields (e.g., TTL, addresses for NAT). Args: ctx-reg: Register containing skb pointer csum-off: Byte offset of checksum field in packet old-reg: Register containing old value new-reg: Register containing new value Returns: Vector of instructions, result in r0 (0 on success)
(build-l4-csum-replace ctx-reg csum-off old-reg new-reg flags)Generate incremental L4 (TCP/UDP) checksum update.
Used when modifying IP addresses or L4 ports. For IP address changes, use BPF-F-PSEUDO-HDR flag to account for pseudo-header.
Args: ctx-reg: Register containing skb pointer csum-off: Byte offset of L4 checksum field in packet old-reg: Register containing old value new-reg: Register containing new value flags: BPF_F flags: - 0: Simple value replacement - BPF-F-PSEUDO-HDR (0x10): Account for IP pseudo-header - BPF-F-RECOMPUTE-CSUM (0x01): Recompute full checksum
Returns: Vector of instructions
Generate incremental L4 (TCP/UDP) checksum update.
Used when modifying IP addresses or L4 ports. For IP address changes,
use BPF-F-PSEUDO-HDR flag to account for pseudo-header.
Args:
ctx-reg: Register containing skb pointer
csum-off: Byte offset of L4 checksum field in packet
old-reg: Register containing old value
new-reg: Register containing new value
flags: BPF_F flags:
- 0: Simple value replacement
- BPF-F-PSEUDO-HDR (0x10): Account for IP pseudo-header
- BPF-F-RECOMPUTE-CSUM (0x01): Recompute full checksum
Returns: Vector of instructions(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 |