llc: Move the timeout calculation into the TBF
diff --git a/src/llc.cpp b/src/llc.cpp
index 524814c..585f656 100644
--- a/src/llc.cpp
+++ b/src/llc.cpp
@@ -74,3 +74,25 @@
 {
 	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 040ea62..d3b940e 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 c636c98..25f31c3 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -118,23 +118,7 @@
 		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);