Branch: refs/heads/misc-bugfixes Home: https://github.com/kronosnet/kronosnet Commit: 2c59a8853e2bafd38a122e7ac5037672dc8633af https://github.com/kronosnet/kronosnet/commit/2c59a8853e2bafd38a122e7ac50376... Author: Fabio M. Di Nitto fdinitto@redhat.com Date: 2026-05-27 (Wed, 27 May 2026)
Changed paths: M libknet/tests/Makefile.am A libknet/tests/int_defrag_edge_cases.c
Log Message: ----------- [tests] add defragmentation edge cases test suite
Add new int_defrag_edge_cases_test that validates critical defragmentation buffer management scenarios not covered by existing tests.
Test scenarios:
1. Last fragment arriving first - validates special buffer positioning at KNET_MAX_PACKET_SIZE - len offset, last_first flag handling, and fragment relocation when packet completes. Tests asymmetric MTU with fragments in order [3/3, 1/3, 2/3] and verifies data integrity across all fragments (280 bytes total with distinct payloads 'A', 'B', 'C').
2. Buffer exhaustion and reclamation - validates window-based reclamation when all 32 defrag buffers are filled with incomplete packets. Sends new complete packet with distant sequence number (9000 vs 2000-2031) triggering reclamation of all out-of-window buffers. Verifies data integrity with no corruption from old buffer data in new packet.
3. Fragment data overwrite protection - validates correct assembly of large fragmented packets without buffer overflow. Test case 1 sends 100 fragments × 500 bytes (50,000 bytes total), test case 2 sends 50 fragments × 1,300 bytes (65,000 bytes approaching KNET_MAX_PACKET_SIZE). Each fragment filled with its index number and verified on assembly.
4. Duplicate fragment handling - validates that duplicate fragments (same sequence number and fragment index) are silently rejected without corrupting the buffer. Sends frag 1/2, frag 1/2 (duplicate with different data), frag 2/2 and verifies only one correct packet is delivered with original fragment data preserved.
5. Maximum realistic fragments - validates fragment map can handle high fragment counts (100 fragments, 500 bytes each = 50,000 bytes total). PCKT_FRAG_MAX (255) is theoretical limit, but realistic max is determined by min_mtu. Tests worst-case scenario with min MTU ~550 bytes.
6. Single fragment packets (1/1) - validates degenerate case where packets are marked as fragmented but contain only one fragment. Sends 5 packets of 200 bytes each, all marked as 1/1, and verifies correct delivery without unnecessary defragmentation overhead.
7. Interleaved fragment assembly across wraparound - validates concurrent assembly of multiple fragmented packets with fragments arriving in interleaved order across sequence number wraparound boundary. Sends 4 packets (seq 65534, 65535, 0, 1) with all first fragments, then completes them in reverse order (1→0→65535→65534). Verifies all packets received correctly with no cross-contamination between defrag buffers.
8. Zero-payload fragments - validates defensive handling of zero-length fragments (packet injection attacks, corrupted packets). Skipped on FreeBSD/OpenIndiana (BSD kernel does not deliver 0-byte SEQPACKET messages). On Linux: 2-fragment, 3-fragment, and single-fragment zero-payload tests verify correct packet delivery and buffer management.
Signed-off-by: Fabio M. Di Nitto fabbione@kronosnet.org Co-Authored-By: Claude Sonnet 4.5 noreply@anthropic.com
Commit: d9d68f0653107271f010e6ab689e0c4e608feb91 https://github.com/kronosnet/kronosnet/commit/d9d68f0653107271f010e6ab689e0c... Author: Fabio M. Di Nitto fdinitto@redhat.com Date: 2026-05-27 (Wed, 27 May 2026)
Changed paths: M libknet/tests/Makefile.am A libknet/tests/int_buffer_management.c
Log Message: ----------- [tests] add defragmentation buffer management test suite
Add new int_buffer_management_test that validates dynamic defragmentation buffer allocation, growth, shrinking, and reuse scenarios.
Test scenarios:
1. Dynamic buffer growth - validates automatic buffer reallocation when all defrag buffers are in use. Fills all 32 initial buffers with incomplete packets (fragment 1/2 only), then sends one additional packet to trigger growth. Verifies buffer allocation doubles from 32 to 64 and packet reception works correctly after reallocation.
2. Buffer reuse after reclamation - validates that reclaimed buffers are properly cleared before reuse, preventing data leakage. Sends incomplete packet at seq 5000 filled with 'X', then complete packet at seq 10000 (distance 5000 > KNET_CBUFFER_SIZE 4096) triggering reclamation. Verifies new packet contains only 'Z' with no trace of 'X', then reuses same buffer with new packet 'M'+'N' and confirms no leakage.
3. Dynamic buffer shrinking - validates automatic buffer deallocation when usage stays below threshold. Starting from 64 buffers (grown in test 1), clears all incomplete packets to achieve low usage, reduces defrag_bufs_usage_samples from 255 to 10 for faster testing, then sends complete packets over 10+ sample periods (1 second each) to trigger shrinking. Verifies buffers halve from 64 to 32 and packet reception works correctly after shrinking.
Signed-off-by: Fabio M. Di Nitto fabbione@kronosnet.org Co-Authored-By: Claude Sonnet 4.5 noreply@anthropic.com
Compare: https://github.com/kronosnet/kronosnet/compare/98c97c75f1e4...d9d68f065310
To unsubscribe from these emails, change your notification settings at https://github.com/kronosnet/kronosnet/settings/notifications