Liking cljdoc? Tell your friends :D

clj-ebpf.net.checksum

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.
raw docstring

BPF-F-MARK-ENFORCEclj

source

BPF-F-MARK-MANGLED-0clj

source

BPF-F-PSEUDO-HDRclj

source

BPF-F-RECOMPUTE-CSUMclj

source

BPF-FUNC-csum-diffclj

source

BPF-FUNC-csum-updateclj

source

BPF-FUNC-l3-csum-replaceclj

source

BPF-FUNC-l4-csum-replaceclj

source

build-csum-diffclj

(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)
sourceraw docstring

build-l3-csum-replaceclj

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)
sourceraw docstring

build-l4-csum-replaceclj

(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
sourceraw docstring

csum-diffclj

(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
sourceraw docstring

fold-csum-32clj

(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)
sourceraw docstring

l3-csum-replace-2clj

(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
sourceraw docstring

l3-csum-replace-4clj

(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)
sourceraw docstring

l4-csum-replace-2clj

(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
sourceraw docstring

l4-csum-replace-4clj

(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
sourceraw docstring

negate-csumclj

(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)
sourceraw docstring

update-ip-checksumclj

(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
sourceraw docstring

update-tcp-checksum-for-ipclj

(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
sourceraw docstring

update-tcp-checksum-for-portclj

(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
sourceraw docstring

update-udp-checksum-for-ipclj

(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
sourceraw docstring

update-udp-checksum-for-portclj

(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
sourceraw docstring

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close