Skip to content

fix several bugs, add tcp_nack CC, remove prints#10

Open
vali0901 wants to merge 3 commits into
feature/nack-no-checksumfrom
feature/add-nack-cc
Open

fix several bugs, add tcp_nack CC, remove prints#10
vali0901 wants to merge 3 commits into
feature/nack-no-checksumfrom
feature/add-nack-cc

Conversation

@vali0901

@vali0901 vali0901 commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator
  • removed trimming-related prints

  • fix old_ack NACK discarding bug

  • add initial tcp_nack implementation + integration in menuconfig

  • skip PAWS check for TRIMMED & NACKs: packets fail PAWS check because of reordering (healthy packets are dropped too); i think it should be best to enforce PAWS-bypass for TRIMMED & NACK packets, to make sure congestion notifiers dont get lost; healthy data packets still get lost, but this is not Trimming TCP related (as a workaround, for our testbed i have disabled timestamp option, in order to ensure no RTO in our results)

  • deactivate any loss-inferring mechanisms when trimming_ok (sack scoreboard, TLP, newreno_mark_lost): this was our purpose, initially, to have a NACK-only loss detection. I still stand by it, and now we are sure no loss-inferred retransmissions are firing

  • fix NACK processing: in fast_retrans_alert, there were some checks that would make a NACK not reach the identify_packet_loss call. now, the NACK is handled at the function entry, to ensure retransmission

  • remove cwnd_undo capability: loss-inferring mechanisms also want to detect if a retransmit was wrongfully sent. this would reset some internal variables that woudl interfere with trimming

  • add TCPCB_NACK_FORCED retransmit (disabled by default): a method to bypass the cwnd > packets_in_flight verification when retransmitting, so the retransmission happens now. deactivated by default

  • when receiving a NACK, i have decided to rearm the RTO timer (receiving NACK = connection is still alive, recoverable)

  • congestion states were all over the place because of NACKs; At the begining of Recovery, TCP remembers what is the seq_num it has to recover to (tp.high_seq). this is usually not updated when in Recovery. what was happening was that there were NACKs (lost packets) coming from outside the recovery registered window (nack_seq > tp.high_seq). this caused a lot of warnings being printed. as a mitigation, now, for every NACK received, we also update the recovery window (tp.high_seq = nack_seq) so we keep staying in Recovery if we register multiple losses.

@vali0901 vali0901 requested a review from FlaviusMazilu June 17, 2026 13:17
vali0901 added 2 commits June 18, 2026 18:52
- skip PAWS check for TRIMMED & NACKs
- deactivate any loss-inferring mechanisms when trimming_ok (sack scoreboard, TLP, newreno_mark_lost)
- fix NACK processing
- remove cwnd_undo capability
- add TCPCB_NACK_FORCED retransmit (disabled by default)
@vali0901 vali0901 changed the title fix old_ack NACK discard, add tcp_nack CC, remove prints fix several bugs, add tcp_nack CC, remove prints Jun 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant