<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ouroboros, branch testing</title>
<subtitle>Ouroboros main repository</subtitle>
<id>http://133.ip-51-38-114.eu/cgit/ouroboros/atom?h=testing</id>
<link rel='self' href='http://133.ip-51-38-114.eu/cgit/ouroboros/atom?h=testing'/>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/'/>
<updated>2026-05-27T13:55:08+00:00</updated>
<entry>
<title>ipcpd: Fully gate fa/dt RIB ops on IPCP_FLOW_STATS</title>
<updated>2026-05-27T13:55:08+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-05-26T21:18:29+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=44b7980a95107a564670393e4a2450e953223436'/>
<id>urn:sha1:44b7980a95107a564670393e4a2450e953223436</id>
<content type='text'>
The previous shape registered no-op _rib_read / _rib_readdir /
_rib_getattr handlers when IPCP_FLOW_STATS was off, and there was a
bug where *buf was not set in the no-op causing free on an
uninitialized pointer.

IPCP_FLOW_STATS was referenced by config.h.in but the declaration was
lost during the CMake refactor.

Signed-off-by: Dimitri Staessens &lt;dimitri@ouroboros.rocks&gt;
Signed-off-by: Sander Vrijders &lt;sander@ouroboros.rocks&gt;
</content>
</entry>
<entry>
<title>ipcpd: Drain mainloop before component shutdown</title>
<updated>2026-05-27T13:55:08+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-05-26T20:51:43+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=ce340a4892b445c7e4d6a0ce3cb2c1972a862080'/>
<id>urn:sha1:ce340a4892b445c7e4d6a0ce3cb2c1972a862080</id>
<content type='text'>
Worker mid fa_dealloc could still try to read from fa.psched because
stop_components() ran before ipcp_stop()/tpm_stop().

Signed-off-by: Dimitri Staessens &lt;dimitri@ouroboros.rocks&gt;
Signed-off-by: Sander Vrijders &lt;sander@ouroboros.rocks&gt;
</content>
</entry>
<entry>
<title>ipcpd: Close dt stat_used race vs rib readdir</title>
<updated>2026-05-27T13:55:08+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-05-25T12:54:35+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=347f6285d95c6c802a3efbab107c55d0b83036e3'/>
<id>urn:sha1:347f6285d95c6c802a3efbab107c55d0b83036e3</id>
<content type='text'>
The stat_used function updated dt.stat[fd].stamp under the per-stat
mutex, released it, then took dt.lock wrlock to bump dt.n_flows. A
concurrent dt_rib_readdir holding dt.lock rdlock between those two
critical sections saw the new stamp but the old n_flows.

Signed-off-by: Dimitri Staessens &lt;dimitri@ouroboros.rocks&gt;
Signed-off-by: Sander Vrijders &lt;sander@ouroboros.rocks&gt;
</content>
</entry>
<entry>
<title>irmd: Reorder init/fini</title>
<updated>2026-05-27T13:55:08+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-05-25T12:52:21+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=b2dc1d7ec76d86a640b70dea0e92a81e1990f019'/>
<id>urn:sha1:b2dc1d7ec76d86a640b70dea0e92a81e1990f019</id>
<content type='text'>
Application-level OpenSSL objects (X509_STORE held by irm/OAP) must be
released before OPENSSL_cleanup() tears down libcrypto's globals,
otherwise their destructors run against half-finalised state.

Signed-off-by: Dimitri Staessens &lt;dimitri@ouroboros.rocks&gt;
Signed-off-by: Sander Vrijders &lt;sander@ouroboros.rocks&gt;
</content>
</entry>
<entry>
<title>ipcpd: Fix eth double-release in MGMT rx path</title>
<updated>2026-05-27T13:55:08+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-05-25T12:50:30+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=a5ab03c956dce6df3148bb2df0cf8f5cf759f28a'/>
<id>urn:sha1:a5ab03c956dce6df3148bb2df0cf8f5cf759f28a</id>
<content type='text'>
The MGMT-frame branch in eth_ipcp_packet_reader releases the spb at
the top of the loop iteration; two error exits released a second time.

Signed-off-by: Dimitri Staessens &lt;dimitri@ouroboros.rocks&gt;
Signed-off-by: Sander Vrijders &lt;sander@ouroboros.rocks&gt;
</content>
</entry>
<entry>
<title>lib: Fix mixed declarations in hash.c</title>
<updated>2026-05-27T13:54:57+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-05-24T08:21:16+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=8ee68491daad630f5cd9168852f974633ce5ffd4'/>
<id>urn:sha1:8ee68491daad630f5cd9168852f974633ce5ffd4</id>
<content type='text'>
The contexts are not declared at the top of the function anymore after
addition of the CRC8/CRC16 variants (no implementation in libgcrypt).

Signed-off-by: Dimitri Staessens &lt;dimitri@ouroboros.rocks&gt;
Signed-off-by: Sander Vrijders &lt;sander@ouroboros.rocks&gt;
</content>
</entry>
<entry>
<title>lib: Add FIN and receive-side linger for msg dealloc</title>
<updated>2026-05-22T06:13:50+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-05-21T20:49:15+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=5d0cf67a38695ebe65a0506b5c6d6c0d229a3b3e'/>
<id>urn:sha1:5d0cf67a38695ebe65a0506b5c6d6c0d229a3b3e</id>
<content type='text'>
qos_msg flows had no end-of-stream signal: a deallocating sender
relied on the peer's inactivity timers (~30 s) to notice. Worse, the
dealloc-linger path was bugged: a receiver that called flow_dealloc
would stop draining its rx_rb while the peer's tail retransmits kept
arriving. Peer retransmitted into a black hole until its own dealloc
fired, and the whole shutdown stretched takes t_a time.

Generalizes frcti_stream_fin_snd to frcti_fin_snd; for msg mode emit a
FRCT_FIN-only control packet with the FIN seqno boundary in
pci-&gt;ackno. Receiver-side frcti_rcv latches rcv_fin_seen and stores
the boundary on FRCT_FIN-without-DATA.

Fix comment on the FRCT flags.

Signed-off-by: Dimitri Staessens &lt;dimitri@ouroboros.rocks&gt;
Signed-off-by: Sander Vrijders &lt;sander@ouroboros.rocks&gt;
</content>
</entry>
<entry>
<title>lib: Allow up to two TLPs per recovery episode</title>
<updated>2026-05-22T06:13:50+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-05-21T20:23:01+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=3ad96a09df9dfd8e63e494887f7ef5bc07f244b5'/>
<id>urn:sha1:3ad96a09df9dfd8e63e494887f7ef5bc07f244b5</id>
<content type='text'>
RFC 8985 §7.3 permits up to two tail loss probes before falling back
to RTO. Previously FRCP allowed exactly one TLP per episode, making
tail-loss recovery dependent on a successful first probe; if that
probe was lost the sender fell straight to slow RTO with exponential
backoff.

Signed-off-by: Dimitri Staessens &lt;dimitri@ouroboros.rocks&gt;
Signed-off-by: Sander Vrijders &lt;sander@ouroboros.rocks&gt;
</content>
</entry>
<entry>
<title>lib: Further align FRCP with TCP RFCs</title>
<updated>2026-05-22T06:13:50+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-05-21T19:42:57+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=6a8b532870cf8c642adb1b7554691cadb8be5257'/>
<id>urn:sha1:6a8b532870cf8c642adb1b7554691cadb8be5257</id>
<content type='text'>
Only the HoL slot retransmits on RTO; non-HoL slots defer and rely on
SACK/RACK fast-rxm for recovery. Matches RFC 6298 §5.4 + RFC 8985 §3
and Linux tcp_retransmit_skb(head, 1). Eliminates the spurious-RTO
storm where ~50-66% of retransmits arrived as duplicates at the peer.

Co-fixes for three latent state-machine bugs that the previous
spurious-retx mask was hiding:

  - recovery_enter: seal recovery_high at the false→true edge only
    (RFC 6582 §3.2). Previously extended on every gap-SACK, which
    trapped the sender in NewReno indefinitely once any cum-ACK fell
    behind the moving recovery_high.

  - rtt_sample_eligible: drop the in_recovery super-gate. Karn at the
    per-slot SND_RTX|SND_TLP level is already correct (matches Linux).

  - rxm_due defer interval: use base RTO, not rto&lt;&lt;rto_mul. Inheriting
    HoL's backoff parked deferred slots tens of seconds in the future.

Bring RACK reorder-window scaling into RFC 8985 §7.2 compliance:
reo_wnd_mult widens at most once per RTT, gated via a srtt-elapsed
check in reo_wnd_on_dsack.

Stat refactor for clearer attribution: rename rxm_snd → rxm_rto (now
RTO-driven sends only), add rxm_nack and rxm_due_defer, split rxm_rcv
into total FRCT_RXM arrivals and rxm_dup_rcv (duplicates). Expose
rx/tx ring queue depths as RIB stats.

Signed-off-by: Dimitri Staessens &lt;dimitri@ouroboros.rocks&gt;
Signed-off-by: Sander Vrijders &lt;sander@ouroboros.rocks&gt;
</content>
</entry>
<entry>
<title>lib: Set a timeout on FRCT control packets</title>
<updated>2026-05-22T06:13:50+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-05-20T07:23:07+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=3cde856b4b68b5d6bbb9d6bb2d1b995f0babe109'/>
<id>urn:sha1:3cde856b4b68b5d6bbb9d6bb2d1b995f0babe109</id>
<content type='text'>
Time out frct_tx for control packets at 250us so a full tx ring cannot
stall the timer wheel (and with it KA, TLP, RXM fires). DATA frames
(fresh, RXM, TLP, FIN) keep blocking - dropping them would lose
recovery progress.

Add inact_drop, drf_rebase, rq_released, tlp_snd, sdu_snd_alloc,
sdu_snd_tx, sdu_sole, rxm_tx_dead, and per-type tx_drop counters.

Signed-off-by: Dimitri Staessens &lt;dimitri@ouroboros.rocks&gt;
Signed-off-by: Sander Vrijders &lt;sander@ouroboros.rocks&gt;
</content>
</entry>
</feed>
