mirror of
https://github.com/lgcosta/pf-linux-port.git
synced 2026-11-13 05:48:03 -03:00
changelog: v0.5.0 (binat, route-to/dup-to, checksum correctness)
This commit is contained in:
1 parent
e7e941047f
commit
e26c6d4a36
1 file changed
+40
@@ -1,5 +1,45 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v0.5.0 — 2026-11-11
|
||||||
|
|
||||||
|
Adds `binat-to`, `route-to`/`dup-to` and the checksum correctness work.
|
||||||
|
Suite: 11 gates, all green in the libvirt lab.
|
||||||
|
|
||||||
|
### Verified in the lab (new since v0.4.0)
|
||||||
|
|
||||||
|
| Capability | Gate | What it proves |
|
||||||
|
|---|---|---|
|
||||||
|
| `binat-to` (1:1 bidirectional NAT) | `07-binat` | pfctl's expansion into `nat-to … static-port` + `rdr-to` both work: the peer sees the mapped address, the original never leaks, the reply is translated back |
|
||||||
|
| `route-to` (forced nexthop) | `08-routeto` | the packet leaves through the gateway's link instead of the normal egress (proved on the firewall's own interfaces) |
|
||||||
|
| `dup-to` (packet duplication) | `08-routeto` | the original path keeps working and a copy is emitted to the gateway |
|
||||||
|
| bulk data through translated flows | `06-rdr` | 2 MB pulled through a redirect, byte-identical, firewall still responsive afterwards |
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- **Neighbour resolution for forced routes**: Linux only ARPs the gateway when
|
||||||
|
the route declares one, so `route-to` ARPed the *final* destination on the
|
||||||
|
gateway's link. The port now sets `rt_gw4`/`rt_gw_family` on the looked-up
|
||||||
|
route (the same pattern OVS uses).
|
||||||
|
- **`route-to` looked the route up with the packet's source**, which is not
|
||||||
|
local for transit traffic → `ENETUNREACH` → silent drop. Destination-only
|
||||||
|
lookup now.
|
||||||
|
- **`if_output_tso` reference imbalance**: the stack's output path consumed the
|
||||||
|
hook queue's skb reference, so the work queue's cleanup double-freed the skb
|
||||||
|
and corrupted the slab (observed as the firewall dying mid-test).
|
||||||
|
- **GSO/TSO checksums**: materializing a transport checksum in software for a
|
||||||
|
translated skb covers only the first segment; every later segment is then
|
||||||
|
wrong, bulk transfers stall and the firewall's own `sshd` starves. The port
|
||||||
|
now recomputes in software only for non-GSO skbs and hands `CHECKSUM_PARTIAL`
|
||||||
|
back to the NIC otherwise (regression guarded by gate `06-rdr`).
|
||||||
|
- Gate `08` counts only echo *requests* (a reply also contains the client
|
||||||
|
address) and tolerates a not-yet-created capture file.
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
|
||||||
|
- The lab's host bridge drops *forwarded* frames that cross two libvirt
|
||||||
|
networks with a foreign source address, so `route-to`/`dup-to` are proved on
|
||||||
|
the firewall's own interfaces rather than on `gw2`.
|
||||||
|
|
||||||
## v0.4.0 — 2026-11-11
|
## v0.4.0 — 2026-11-11
|
||||||
|
|
||||||
Lab-verified milestone release. The full gate suite (9 gates) runs against
|
Lab-verified milestone release. The full gate suite (9 gates) runs against
|
||||||
|
|||||||
Reference in new issue
Block a user