llc: Move the timeout calculation into the TBF
This commit is contained in:
parent
aa35ba7584
commit
fce431cf3a
22
src/llc.cpp
22
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();
|
||||
|
|
18
src/tbf.cpp
18
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);
|
||||
|
|
Loading…
Reference in New Issue