Harald Welte has submitted this change and it was merged.

Change subject: TBF: add N3101 counter
......................................................................


TBF: add N3101 counter

Properly reset the counter when receiving valid RLCMAC block and update
it when no data is received as per 3GPP TS 44.060 ยง8.1.1.1

Change-Id: I2f79c6153dc4073c9d293b2824979e6381576682
Fixes: OS#2407
---
M src/bts.cpp
M src/tbf.cpp
M src/tbf.h
3 files changed, 30 insertions(+), 0 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/src/bts.cpp b/src/bts.cpp
index 9e8a6c8..867658e 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -996,6 +996,10 @@
                             ms->dl_tbf() ? ms->dl_tbf()->state_name() : 
"None");
                return;
        }
+
+       /* Reset N3101 counter: */
+       tbf->m_n3101 = 0;
+
        tbf->update_ms(tlli, GPRS_RLCMAC_UL_TBF);
 
        LOGPTBF(tbf, LOGL_DEBUG, "RX: [PCU <- BTS] Packet Control Ack\n");
@@ -1185,6 +1189,9 @@
                return;
        }
 
+       /* Reset N3101 counter: */
+       tbf->m_n3101 = 0;
+
        if (tbf->handle_ack_nack())
                LOGPTBF(tbf, LOGL_NOTICE, "Recovered downlink ack\n");
 
@@ -1248,6 +1255,9 @@
                        "wrong TFI=%d, ignoring!\n", tfi);
                return;
        }
+
+       /* Reset N3101 counter: */
+       tbf->m_n3101 = 0;
 
        if (tbf->handle_ack_nack())
                LOGPTBF(tbf, LOGL_NOTICE, "Recovered EGPRS downlink ack\n");
@@ -1417,6 +1427,9 @@
                }
                LOGPTBFDL(dl_tbf, LOGL_ERROR,
                        "RX: [PCU <- BTS] FIXME: Packet resource request\n");
+
+               /* Reset N3101 counter: */
+               dl_tbf->m_n3101 = 0;
        } else {
                struct gprs_rlcmac_ul_tbf *ul_tbf;
                int8_t tfi = request->ID.u.Global_TFI.u.UPLINK_TFI;
@@ -1427,6 +1440,9 @@
                }
                LOGPTBFUL(ul_tbf, LOGL_ERROR,
                        "RX: [PCU <- BTS] %s FIXME: Packet resource request\n");
+
+               /* Reset N3101 counter: */
+               ul_tbf->m_n3101 = 0;
        }
 }
 
@@ -1579,6 +1595,9 @@
                return 0;
        }
 
+       /* Reset N3101 counter: */
+       tbf->m_n3101 = 0;
+
        return tbf->rcv_data_block_acknowledged(&rlc_dec, data, meas);
 }
 
diff --git a/src/tbf.cpp b/src/tbf.cpp
index a5eedd9..dc0777f 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -177,6 +177,7 @@
        was_releasing(0),
        upgrade_to_multislot(0),
        bts(bts_),
+       m_n3101(0),
        m_tfi(0),
        m_created_ts(0),
        m_ctrs(NULL),
@@ -740,6 +741,14 @@
 
        poll_state = GPRS_RLCMAC_POLL_NONE;
 
+       m_n3101++;
+       if (m_n3101 == bts->bts_data()->n3101) {
+               LOGP(DRLCMAC, LOGL_NOTICE, " N3101 exceeded MAX (%u)\n", 
bts->bts_data()->n3101);
+               set_state(GPRS_RLCMAC_RELEASING);
+               t_start(T3169, bts->bts_data()->t3169, 0, "MAX N3101 reached", 
false);
+               return;
+       }
+
        if (ul_tbf && ul_tbf->handle_ctrl_ack()) {
                if (!ul_tbf->ctrl_ack_to_toggle()) {
                        LOGP(DRLCMAC, LOGL_NOTICE, "- Timeout for polling 
PACKET CONTROL ACK for PACKET UPLINK ACK\n");
diff --git a/src/tbf.h b/src/tbf.h
index 06c9f60..4489695 100644
--- a/src/tbf.h
+++ b/src/tbf.h
@@ -296,6 +296,8 @@
        /* store the BTS this TBF belongs to */
        BTS *bts;
 
+       uint8_t m_n3101; /* N3101 counter */
+
        /*
         * private fields. We can't make it private as it is breaking the
         * llist macros.

-- 
To view, visit https://gerrit.osmocom.org/5182
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I2f79c6153dc4073c9d293b2824979e6381576682
Gerrit-PatchSet: 5
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Owner: Max <[email protected]>
Gerrit-Reviewer: Harald Welte <[email protected]>
Gerrit-Reviewer: Jenkins Builder

Reply via email to