diff options
author | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2013-11-24 17:34:17 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2013-11-26 20:57:24 +0100 |
commit | 9c5539d46da3e43eeb875e1849553214263ee618 (patch) | |
tree | 1fd59d3c6c7bdc6527e17f42992f127f42b44907 /src/rlc.cpp | |
parent | 86dc355a3328ad2305d8bd0b1fb6684509352289 (diff) |
tbf/rlc: Move the counting of unacked frames into the RLC V_B class
Whenwe receive a final ack we assume that all the unacked frames
have been acked now. Move the counting to V_B and now the caller
can remove the BSN and the "lost" variable which has always been
zero.
Diffstat (limited to 'src/rlc.cpp')
-rw-r--r-- | src/rlc.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/rlc.cpp b/src/rlc.cpp index a76703d5..816efff5 100644 --- a/src/rlc.cpp +++ b/src/rlc.cpp @@ -71,6 +71,21 @@ int gprs_rlc_v_b::mark_for_resend(const uint16_t v_a, const uint16_t v_s, return resend; } +int gprs_rlc_v_b::count_unacked(const uint16_t v_a, const uint16_t v_s, + const uint16_t mod_sns, const uint16_t mod_sns_half) +{ + uint16_t unacked = 0; + uint16_t bsn; + + for (bsn = v_a; bsn != v_s; bsn = (bsn + 1) & mod_sns) { + uint16_t index = bsn & mod_sns_half; + if (!is_acked(index)) + unacked += 1; + } + + return unacked; +} + void gprs_rlc_v_b::update(BTS *bts, char *show_rbb, uint8_t ssn, const uint16_t v_a, const uint16_t mod_sns, const uint16_t mod_sns_half, |