Skip to content

release: bump to v0.2.6#47

Merged
lunarthegrey merged 1 commit into
mainfrom
release-v0.2.6
May 5, 2026
Merged

release: bump to v0.2.6#47
lunarthegrey merged 1 commit into
mainfrom
release-v0.2.6

Conversation

@lunarthegrey
Copy link
Copy Markdown
Contributor

Summary

Cuts v0.2.6 so operators have an unambiguous "use this, not v0.2.5" version after the UniFi load-failure fix in #46.

v0.2.5 was tagged at the merge of #45, which included the tail-call architecture but not the bpf-to-bpf-call removal that #46 added. On non-JIT-friendly kernels (notably UniFi 5.15.72-ui-cn9670 aarch64), v0.2.5's fast_path was rejected at load:

```
tail_calls are not allowed in non-JITed programs with bpf-to-bpf calls
```

Re-cutting the tag in place would force-push a published artifact. Bumping to v0.2.6 is cleaner — the broken v0.2.5 release stays as a historical artifact (its release notes can point at v0.2.6).

Files

  • `VERSION`: 0.2.5 → 0.2.6
  • `Cargo.toml`: workspace version 0.2.5 → 0.2.6
  • `Cargo.lock`: regenerated (4 packetframe-* crates bumped)
  • `README.md`: install-snippet `VERSION=v0.2.5` → `VERSION=v0.2.6` (×2). Status-table mentions of "v0.2.5+" left intact — those describe when each feature was introduced.

Test plan

  • CI green on this PR.
  • After merge: tag `v0.2.6` at the resulting main HEAD; release workflow auto-builds and publishes assets.
  • Edit v0.2.5 release notes to add a "⚠️ broken on UniFi 5.15 — use v0.2.6" banner with a link to fast-path: fix BPF load on non-JIT kernels (UniFi 5.15) #46.
  • Install `packetframe_0.2.6_arm64.deb` on the UniFi router; `sudo packetframe feasibility --human` should show all xdp.attach.ethN PASS.

🤖 Generated with Claude Code

v0.2.5 shipped broken on UniFi-style non-JIT-friendly kernels: the
verifier rejected fast_path with "tail_calls are not allowed in
non-JITed programs with bpf-to-bpf calls" because LLVM lowered
`mem::zeroed::<bpf_fib_lookup>()` into a 60-byte memset emitted as a
separate bpf-to-bpf subprogram, and UniFi's arm64 JIT doesn't
implement the tail-call + subprog combination.

PR #46 fixed the load failure by replacing the `mem::zeroed` with a
struct literal that initializes every byte directly — no memset
libcall, no subprogram. Cutting v0.2.6 so operators have an
unambiguous "use this, not v0.2.5" pointer.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@lunarthegrey lunarthegrey merged commit c566f62 into main May 5, 2026
10 checks passed
@lunarthegrey lunarthegrey deleted the release-v0.2.6 branch May 5, 2026 14:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant