aboutsummaryrefslogtreecommitdiffstats
path: root/src/rlc.h
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-11-24 22:43:03 +0100
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-11-26 21:00:51 +0100
commit6ab5b24be4fe42ae8843b4843f4bfcf550484e12 (patch)
tree45a8cb5a22d7e0195883a19d57d5e15bb8d88a09 /src/rlc.h
parent7decedcbf895e70517ca4a9abc9b7e583e1d328e (diff)
tbf/rlc: Move the check if something is in the window out.
Diffstat (limited to 'src/rlc.h')
-rw-r--r--src/rlc.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/rlc.h b/src/rlc.h
index e46c5f03..09712fe4 100644
--- a/src/rlc.h
+++ b/src/rlc.h
@@ -83,6 +83,8 @@ struct gprs_rlc_ul_window {
const uint16_t v_r() const;
const uint16_t v_q() const;
+ bool is_in_window(uint8_t bsn) const;
+
void raise(int moves);
void increment_q(int);
@@ -300,6 +302,17 @@ inline const int16_t gprs_rlc_dl_window::distance() const
return (m_v_s - m_v_a) & mod_sns();
}
+inline bool gprs_rlc_ul_window::is_in_window(uint8_t bsn) const
+{
+ uint16_t offset_v_q;
+
+ /* current block relative to lowest unreceived block */
+ offset_v_q = (bsn - m_v_q) & mod_sns();
+ /* If out of window (may happen if blocks below V(Q) are received
+ * again. */
+ return offset_v_q < ws();
+}
+
inline const uint16_t gprs_rlc_ul_window::sns() const
{
return 128;