mirror of
https://github.com/jmcorgan/fips.git
synced 2026-07-30 19:46:15 +00:00
Merge maint into master, reconciling the two hop limit implementations
Both branches carry the same correction, authored separately because the sans-IO relocation moved the logic into a core that returns an outcome rather than acting inline. Git resolved the file move as a rename and offered to merge the two versions textually, which would have been wrong in both files. Resolved by keeping master's re-expression wholesale for the handler and its tests, and taking the changelog entry from maint. Verified rather than assumed: the resulting tree is byte identical to the reviewed and CI-green master commit across every code path, and the merge contributes nothing but the fifteen line changelog entry. Since the code is unchanged from a tree that already passed the full local suite, that result still stands and no re-run is owed. Nothing was lost from maint's side. Its tests are written against a file layout that does not exist here, and master carries equivalent coverage written against its own shape, including the multi-node chain and the cache warming cases that the maint version does not have.
This commit is contained in:
@@ -45,6 +45,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Fixed
|
||||
|
||||
- `SessionDatagram` hop-limit handling now follows IP semantics. Delivery to
|
||||
the addressed node is no longer TTL-gated, and a forwarder decrements before
|
||||
deciding rather than after, so a datagram that would leave with a TTL of zero
|
||||
is dropped instead of transmitted. Previously the TTL check ran ahead of the
|
||||
local-delivery test, so a datagram addressed to this node that arrived with
|
||||
TTL 0 was dropped, and a forwarder receiving a transit datagram at TTL 1
|
||||
transmitted it at TTL 0 for the next hop to discard, wasting one transmission
|
||||
per expiring datagram. The reachable radius is unchanged, because the two
|
||||
behaviors compensated exactly: a path of `h` links still delivers for any
|
||||
source TTL of `h` or more. During a rolling upgrade, an unupgraded forwarder
|
||||
feeding an upgraded destination delivers one hop further than either version
|
||||
does on its own; no version mix delivers less far. The `TtlExhausted` reject
|
||||
counter now charges at the node that makes the decision rather than at the
|
||||
hop after it.
|
||||
|
||||
## [0.4.1] - 2026-07-19
|
||||
|
||||
### Changed
|
||||
|
||||
Reference in New Issue
Block a user