diff options
author | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2013-11-13 15:17:12 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2013-11-13 15:17:12 +0100 |
commit | fce431cf3acfcce343dd456d801f7ab0921ff9d2 (patch) | |
tree | 08c3e2fdce838d84c2642a61c7bec45eabbb15d1 | |
parent | aa35ba75849684a8e4fa4335612ae575d353bfb4 (diff) |
llc: Move the timeout calculation into the TBF
-rw-r--r-- | src/llc.cpp | 22 | ||||
-rw-r--r-- | src/llc.h | 2 | ||||
-rw-r--r-- | src/tbf.cpp | 18 |
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++; + } + } +} @@ -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); |