aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-11-13 15:17:12 +0100
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-11-13 15:17:12 +0100
commitfce431cf3acfcce343dd456d801f7ab0921ff9d2 (patch)
tree08c3e2fdce838d84c2642a61c7bec45eabbb15d1
parentaa35ba75849684a8e4fa4335612ae575d353bfb4 (diff)
llc: Move the timeout calculation into the TBF
-rw-r--r--src/llc.cpp22
-rw-r--r--src/llc.h2
-rw-r--r--src/tbf.cpp18
3 files changed, 25 insertions, 17 deletions
diff --git a/src/llc.cpp b/src/llc.cpp
index 524814cf..585f656b 100644
--- a/src/llc.cpp
+++ b/src/llc.cpp
@@ -74,3 +74,25 @@ struct msgb *gprs_llc::dequeue()
{
return msgb_dequeue(&queue);
}
+
+
+void gprs_llc::calc_pdu_lifetime(BTS *bts, const uint16_t pdu_delay_csec, struct timeval *tv)
+{
+ uint16_t delay_csec;
+ if (bts->bts_data()->force_llc_lifetime)
+ delay_csec = bts->bts_data()->force_llc_lifetime;
+ else
+ delay_csec = pdu_delay_csec;
+
+ /* keep timestap at 0 for infinite delay */
+ if (delay_csec != 0xffff) {
+ /* calculate timestamp of timeout */
+ gettimeofday(tv, NULL);
+ tv->tv_usec += (delay_csec % 100) * 10000;
+ tv->tv_sec += delay_csec / 100;
+ if (tv->tv_usec > 999999) {
+ tv->tv_usec -= 1000000;
+ tv->tv_sec++;
+ }
+ }
+}
diff --git a/src/llc.h b/src/llc.h
index 040ea623..d3b940ea 100644
--- a/src/llc.h
+++ b/src/llc.h
@@ -27,6 +27,8 @@
* I represent the LLC data to a MS
*/
struct gprs_llc {
+ static void calc_pdu_lifetime(BTS *bts, const uint16_t pdu_delay_csec, struct timeval *tv);
+
void init();
void reset();
void reset_frame_space();
diff --git a/src/tbf.cpp b/src/tbf.cpp
index c636c989..25f31c31 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -118,23 +118,7 @@ int gprs_rlcmac_tbf::append_data(const uint8_t ms_class,
if (!llc_msg)
return -ENOMEM;
tv = (struct timeval *)msgb_put(llc_msg, sizeof(*tv));
-
- uint16_t delay_csec;
- if (bts_data()->force_llc_lifetime)
- delay_csec = bts_data()->force_llc_lifetime;
- else
- delay_csec = pdu_delay_csec;
- /* keep timestap at 0 for infinite delay */
- if (delay_csec != 0xffff) {
- /* calculate timestamp of timeout */
- gettimeofday(tv, NULL);
- tv->tv_usec += (delay_csec % 100) * 10000;
- tv->tv_sec += delay_csec / 100;
- if (tv->tv_usec > 999999) {
- tv->tv_usec -= 1000000;
- tv->tv_sec++;
- }
- }
+ gprs_llc::calc_pdu_lifetime(bts, pdu_delay_csec, tv);
memcpy(msgb_put(llc_msg, len), data, len);
m_llc.enqueue(llc_msg);
tbf_update_ms_class(this, ms_class);