<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ouroboros/src, branch be</title>
<subtitle>Ouroboros main repository</subtitle>
<id>http://133.ip-51-38-114.eu/cgit/ouroboros/atom?h=be</id>
<link rel='self' href='http://133.ip-51-38-114.eu/cgit/ouroboros/atom?h=be'/>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/'/>
<updated>2026-06-03T06:02:34+00:00</updated>
<entry>
<title>ipcpd: Refactor dt stats</title>
<updated>2026-06-03T06:02:34+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-06-01T06:46:46+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=89d43d23863aebae7c20df28f9f9f662d8dbc725'/>
<id>urn:sha1:89d43d23863aebae7c20df28f9f9f662d8dbc725</id>
<content type='text'>
Use relaxed atomics in hot path to bump stats via
dt_stat_inc/dt_stat_load.

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: Reclaim aged leaked ssm pool blocks</title>
<updated>2026-06-03T06:02:34+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-06-01T06:41:34+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=bdfea870024b8efd0a0bd16f8978482d8bbf9ed9'/>
<id>urn:sha1:bdfea870024b8efd0a0bd16f8978482d8bbf9ed9</id>
<content type='text'>
The reclaim_pid_from_sc() function reaped any block allocated with
refcount from a dead PID, but cross-process hand-offs can leave a
block briefly allocated by the producer while a live consumer still
holds it. This skips reclaim within SSM_POOL_RECLAIM_AGE_S (default
60s) so in-flight hand-offs survive a producer crash.

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 overflow in ssm_flow_set_notify</title>
<updated>2026-06-03T06:02:34+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-06-01T06:37:39+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=b88c120f68b0e9f779fa0071a2ad095b93d5aaf6'/>
<id>urn:sha1:b88c120f68b0e9f779fa0071a2ad095b93d5aaf6</id>
<content type='text'>
ssm_flow_set_notify wrote past the fqueue because of a missing bound
check, corrupting adjacent memory under burst. Drop redundant FLOW_PKT
when full and reserve the last slot for control events so they aren't
starved by data-plane traffic.

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: Send stream FIN in the window</title>
<updated>2026-06-01T05:43:48+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-05-30T17:50:50+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=9056ba37925b7ecb4b5724633b1b288ed58951bd'/>
<id>urn:sha1:9056ba37925b7ecb4b5724633b1b288ed58951bd</id>
<content type='text'>
The stream FIN was not gated on the flow control window, potentially
causing a seqno overrun if the windows was full.

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 missing newlines in hash.c</title>
<updated>2026-06-01T05:43:48+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-05-30T10:33:26+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=8ca71e4d4b62c05110a73c20a6aa28fa86a6fa53'/>
<id>urn:sha1:8ca71e4d4b62c05110a73c20a6aa28fa86a6fa53</id>
<content type='text'>
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 FRCT seqno leak on rxm alloc failure</title>
<updated>2026-06-01T05:43:48+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-05-30T10:27:58+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=6d787a674797c656c71442767360810457e3d24b'/>
<id>urn:sha1:6d787a674797c656c71442767360810457e3d24b</id>
<content type='text'>
The seqno was committed before calling rxm_arm, whose malloc could
fail and silently leave the seqno without a retransmission entry. None
of the recovery paths (RTO timer, RACK, SACK-driven, NACK-driven) can
repair a slot with NULL rxm, so the gap persists until the receiver's
keepalive marks the flow dead.

This fix splits rxm_arm into rxm_alloc plus rxm_arm (post-state
install). sack_rxm_snd follows the same alloc-then-arm shape.

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 double pool_remove on tx-path failure</title>
<updated>2026-06-01T05:43:43+00:00</updated>
<author>
<name>Dimitri Staessens</name>
<email>dimitri@ouroboros.rocks</email>
</author>
<published>2026-05-30T09:53:30+00:00</published>
<link rel='alternate' type='text/html' href='http://133.ip-51-38-114.eu/cgit/ouroboros/commit/?id=c3fe693a46026130cbff8906b350933c739d681e'/>
<id>urn:sha1:c3fe693a46026130cbff8906b350933c739d681e</id>
<content type='text'>
The flow_tx_spb function consumed the spb on every failure path via
ssm_pool_remove, while its caller ipcp_flow_write left the spb to its
caller on early outs, causing ssm_pool_remove to be called twice.

In Debug builds this aborts at the old_ref == 0 check.

This aligns flow_tx_spb with np1_flow_write and dt_write_packet: spb
consumed on success, retained on failure. External callers already
release on failure, so no caller-side changes outside of dev.c are
needed.

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: 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>
</feed>
