tbf_dl: add comments to the scheduler
Change-Id: Ib037f9fda30472313c7a82effb1e925c6abebbe5
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index a7671c9..37bd3ee 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -359,6 +359,7 @@
int data_len2, force_data_len = -1;
GprsCodingScheme force_cs;
+ /* search for a nacked or resend marked bsn */
bsn = m_window.resend_needed();
if (previous_bsn >= 0) {
@@ -369,6 +370,7 @@
}
if (bsn >= 0) {
+ /* resend an unacked bsn or resend bsn. */
if (previous_bsn == bsn)
return -1;
@@ -397,9 +399,11 @@
if (m_rlc.block(bsn)->cs_init == MCS8)
m_rlc.block(bsn)->cs_current_trans =
MCS8;
- } else
+ } else {
+ /* gprs */
m_rlc.block(bsn)->cs_current_trans =
m_rlc.block(bsn)->cs_last;
+ }
data_len2 = m_rlc.block(bsn)->len;
if (force_data_len > 0 && force_data_len != data_len2)
@@ -409,6 +413,9 @@
m_window.m_v_b.mark_unacked(bsn);
bts->rlc_resent();
} else if (state_is(GPRS_RLCMAC_FINISHED)) {
+ /* If the TBF is in finished, we already sent all packages at least once.
+ * If any packages could have been sent (because of unacked) it should have
+ * been catched up by the upper if(bsn >= 0) */
LOGPTBFDL(this, LOGL_DEBUG,
"Restarting at BSN %d, because all blocks have been transmitted.\n",
m_window.v_a());
@@ -416,6 +423,8 @@
if (restart_bsn_cycle())
return take_next_bsn(fn, previous_bsn, may_combine);
} else if (dl_window_stalled()) {
+ /* There are no more packages to send, but the window is stalled.
+ * Restart the bsn_cycle to resend all unacked messages */
LOGPTBFDL(this, LOGL_NOTICE,
"Restarting at BSN %d, because the window is stalled.\n",
m_window.v_a());
@@ -423,8 +432,8 @@
if (restart_bsn_cycle())
return take_next_bsn(fn, previous_bsn, may_combine);
} else if (have_data()) {
+ /* The window has space left, generate new bsn */
GprsCodingScheme new_cs;
- /* New blocks may be send */
new_cs = force_cs ? force_cs : current_cs();
LOGPTBFDL(this, LOGL_DEBUG,
"Sending new block at BSN %d, CS=%s\n",
@@ -432,6 +441,8 @@
bsn = create_new_bsn(fn, new_cs);
} else if (bts->bts_data()->dl_tbf_preemptive_retransmission && !m_window.window_empty()) {
+ /* The window contains unacked packages, but not acked.
+ * Mark unacked bsns as RESEND */
LOGPTBFDL(this, LOGL_DEBUG,
"Restarting at BSN %d, because all blocks have been transmitted (FLOW).\n",
m_window.v_a());