tbf/rlc: Move the check if something is in the window out.
diff --git a/src/rlc.h b/src/rlc.h
index e46c5f0..09712fe 100644
--- a/src/rlc.h
+++ b/src/rlc.h
@@ -83,6 +83,8 @@
 	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 @@
 	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;
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 694a41c..21b8e65 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -1520,7 +1520,7 @@
 
 int gprs_rlcmac_tbf::rcv_data_block_acknowledged(const uint8_t *data, size_t len, int8_t rssi)
 {
-	uint16_t offset_v_q, offset_v_r, index;
+	uint16_t offset_v_r, index;
 	struct rlc_ul_header *rh = (struct rlc_ul_header *)data;
 	int rc;
 
@@ -1601,17 +1601,14 @@
 	/* Increment RX-counter */
 	this->dir.ul.rx_counter++;
 
-	/* current block relative to lowest unreceived block */
-	offset_v_q = (rh->bsn - this->dir.ul.window.v_q()) & mod_sns;
-	/* If out of window (may happen if blocks below V(Q) are received
-	 * again. */
-	if (offset_v_q >= dir.ul.window.ws()) {
+	if (!dir.ul.window.is_in_window(rh->bsn)) {
 		LOGP(DRLCMACUL, LOGL_DEBUG, "- BSN %d out of window "
 			"%d..%d (it's normal)\n", rh->bsn,
 			dir.ul.window.v_q(),
 			(dir.ul.window.v_q() + ws - 1) & mod_sns);
 		return 0;
 	}
+
 	/* Write block to buffer and set receive state array. */
 	index = rh->bsn & mod_sns_half; /* memory index of block */
 	memcpy(m_rlc.blocks[index].block, data, len); /* Copy block. */