tbf: Store MS class in GprsMs objects

The ms_class value is a property of the MS and thus belongs to the
GprsMs class. Nevertheless the MS object is created after the TLLI
gets known, so the value still has to be stored in the TBF initially.

This commit add the ms_class value to the GprsMs class and introduces
TBF accessor functions which either access that object or, if that is
not available, the value stored locally.

Ticket: #1674
Sponsored-by: On-Waves ehf
diff --git a/src/bts.cpp b/src/bts.cpp
index 7225a78..ae0a1ca 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -833,7 +833,7 @@
 			"message, so we provide one:\n");
 
 		/* This call will register the new TBF with the MS on success */
-		tbf_alloc_ul(bts_data(), tbf->trx->trx_no, tbf->ms_class,
+		tbf_alloc_ul(bts_data(), tbf->trx->trx_no, tbf->ms_class(),
 			tbf->tlli(), tbf->ta(), tbf);
 
 		/* schedule uplink assignment */
diff --git a/src/gprs_ms.cpp b/src/gprs_ms.cpp
index d047cf5..1ae0fc6 100644
--- a/src/gprs_ms.cpp
+++ b/src/gprs_ms.cpp
@@ -72,6 +72,7 @@
 	m_new_ul_tlli(0),
 	m_new_dl_tlli(0),
 	m_ta(0),
+	m_ms_class(0),
 	m_is_idle(true),
 	m_ref(0),
 	m_list(this)
@@ -325,3 +326,15 @@
 	m_ta = ta_;
 }
 
+void GprsMs::set_ms_class(uint8_t ms_class_)
+{
+	if (ms_class_ == m_ms_class)
+		return;
+
+	LOGP(DRLCMAC, LOGL_INFO,
+		"Modifying MS object, TLLI = 0x%08x, MS class %d -> %d\n",
+		tlli(), m_ms_class, ms_class_);
+
+	m_ms_class = ms_class_;
+}
+
diff --git a/src/gprs_ms.h b/src/gprs_ms.h
index 5c42c50..8d292f1 100644
--- a/src/gprs_ms.h
+++ b/src/gprs_ms.h
@@ -67,6 +67,8 @@
 
 	uint8_t ta() const;
 	void set_ta(uint8_t ta);
+	uint8_t ms_class() const;
+	void set_ms_class(uint8_t ms_class);
 
 	gprs_llc_queue *llc_queue();
 	const gprs_llc_queue *llc_queue() const;
@@ -108,6 +110,7 @@
 	/* store IMSI for look-up and PCH retransmission */
 	char m_imsi[16];
 	uint8_t m_ta;
+	uint8_t m_ms_class;
 	gprs_llc_queue m_llc_queue;
 
 	bool m_is_idle;
@@ -140,6 +143,11 @@
 	return m_ta;
 }
 
+inline uint8_t GprsMs::ms_class() const
+{
+	return m_ms_class;
+}
+
 inline void GprsMs::set_timeout(unsigned secs)
 {
 	m_delay = secs;
diff --git a/src/gprs_rlcmac_ts_alloc.cpp b/src/gprs_rlcmac_ts_alloc.cpp
index 27b01d7..e8bedad 100644
--- a/src/gprs_rlcmac_ts_alloc.cpp
+++ b/src/gprs_rlcmac_ts_alloc.cpp
@@ -146,7 +146,7 @@
 	uint8_t ts;
 
 	LOGP(DRLCMAC, LOGL_DEBUG, "Slot Allocation (Algorithm A) for class "
-		"%d\n", tbf->ms_class);
+		"%d\n", tbf->ms_class());
 
 	ts = find_enabled_pdch(tbf->trx, 0);
 	if (ts == 8)
@@ -540,16 +540,16 @@
 	uint8_t slotcount = 0;
 
 
-	if (tbf->ms_class >= 32) {
+	if (tbf->ms_class() >= 32) {
 		LOGP(DRLCMAC, LOGL_ERROR, "Multislot class %d out of range.\n",
-			tbf->ms_class);
+			tbf->ms_class());
 		return -EINVAL;
 	}
 
-	if (tbf->ms_class) {
-		ms_class = &gprs_ms_multislot_class[tbf->ms_class];
+	if (tbf->ms_class()) {
+		ms_class = &gprs_ms_multislot_class[tbf->ms_class()];
 		LOGP(DRLCMAC, LOGL_DEBUG, "Slot Allocation (Algorithm B) for "
-			"class %d\n", tbf->ms_class);
+			"class %d\n", tbf->ms_class());
 	} else {
 		ms_class = &gprs_ms_multislot_class[12];
 		LOGP(DRLCMAC, LOGL_DEBUG, "Slot Allocation (Algorithm B) for "
@@ -558,7 +558,7 @@
 
 	if (ms_class->tx == MS_NA) {
 		LOGP(DRLCMAC, LOGL_NOTICE, "Multislot class %d not "
-			"applicable.\n", tbf->ms_class);
+			"applicable.\n", tbf->ms_class());
 		return -EINVAL;
 	}
 
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 136226c..e058348 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -102,6 +102,19 @@
 	m_ta = ta;
 }
 
+uint8_t gprs_rlcmac_tbf::ms_class() const
+{
+	return m_ms ? m_ms->ms_class() : m_ms_class;
+}
+
+void gprs_rlcmac_tbf::set_ms_class(uint8_t ms_class_)
+{
+	if (ms())
+		ms()->set_ms_class(ms_class_);
+
+	m_ms_class = ms_class_;
+}
+
 gprs_llc_queue *gprs_rlcmac_tbf::llc_queue()
 {
 	return m_ms ? m_ms->llc_queue() : NULL;
@@ -141,8 +154,12 @@
 			new_ms->set_timeout(bts->bts_data()->ms_idle_sec);
 		}
 
-		if (dir == GPRS_RLCMAC_UL_TBF)
+		if (dir == GPRS_RLCMAC_UL_TBF) {
 			new_ms->set_ta(m_ta);
+		}
+
+		if (m_ms_class)
+			new_ms->set_ms_class(m_ms_class);
 
 		set_ms(new_ms);
 		return;
@@ -440,7 +457,7 @@
 	tbf->bts = bts->bts;
 	tbf->m_tfi = tfi;
 	tbf->trx = &bts->trx[trx];
-	tbf->ms_class = ms_class;
+	tbf->set_ms_class(ms_class);
 	/* select algorithm */
 	rc = bts->alloc_algorithm(bts, old_tbf, tbf, bts->alloc_algorithm_curst,
 		single_slot);
@@ -921,7 +938,7 @@
 	vty_out(vty, " created=%lu state=%08x 1st_TS=%d 1st_cTS=%d ctrl_TS=%d "
 			"MS_CLASS=%d%s",
 			tbf->created_ts(), tbf->state_flags, tbf->first_ts,
-			tbf->first_common_ts, tbf->control_ts, tbf->ms_class,
+			tbf->first_common_ts, tbf->control_ts, tbf->ms_class(),
 			VTY_NEWLINE);
 	vty_out(vty, " TS_alloc=");
 	for (int i = 0; i < 8; i++) {
diff --git a/src/tbf.h b/src/tbf.h
index 7f8d660..c5bb900 100644
--- a/src/tbf.h
+++ b/src/tbf.h
@@ -151,6 +151,8 @@
 	void assign_imsi(const char *imsi);
 	uint8_t ta() const;
 	void set_ta(uint8_t);
+	uint8_t ms_class() const;
+	void set_ms_class(uint8_t);
 	gprs_llc_queue *llc_queue();
 	const gprs_llc_queue *llc_queue() const;
 
@@ -167,7 +169,6 @@
 	uint8_t first_common_ts; /* first TS that the phone can send and
 		reveive simultaniously */
 	uint8_t control_ts; /* timeslot control messages and polling */
-	uint8_t ms_class;
 	struct gprs_rlcmac_pdch *pdch[8]; /* list of PDCHs allocated to TBF */
 
 	gprs_llc m_llc;
@@ -229,8 +230,9 @@
 
 	class GprsMs *m_ms;
 
-	/* Field to take the TA value if no MS is associated */
+	/* Fields to take the TA/MS class values if no MS is associated */
 	uint8_t m_ta;
+	uint8_t m_ms_class;
 
 private:
 	mutable char m_name_buf[60];
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index 85cd751..d1ed1cd 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -58,8 +58,8 @@
 static inline void tbf_update_ms_class(struct gprs_rlcmac_tbf *tbf,
 					const uint8_t ms_class)
 {
-	if (!tbf->ms_class && ms_class)
-		tbf->ms_class = ms_class;
+	if (!tbf->ms_class() && ms_class)
+		tbf->set_ms_class(ms_class);
 }
 
 static void llc_timer_cb(void *_tbf)
@@ -777,7 +777,7 @@
 	tfi = bts->tfi_find_free(GPRS_RLCMAC_DL_TBF, &trx, this->trx->trx_no);
 	if (tfi >= 0)
 		new_tbf = tbf_alloc_dl_tbf(bts->bts_data(), NULL, tfi, trx,
-			ms_class, 0);
+			ms_class(), 0);
 
 	if (!new_tbf) {
 		LOGP(DRLCMAC, LOGL_NOTICE, "No PDCH resource\n");
diff --git a/tests/alloc/AllocTest.cpp b/tests/alloc/AllocTest.cpp
index 552d8aa..2211e92 100644
--- a/tests/alloc/AllocTest.cpp
+++ b/tests/alloc/AllocTest.cpp
@@ -359,6 +359,9 @@
 		dl_tbf->update();
 		OSMO_ASSERT(dl_tbf->first_common_ts == ul_tbf->first_common_ts);
 
+		OSMO_ASSERT(ul_tbf->ms_class() == ms_class);
+		OSMO_ASSERT(dl_tbf->ms_class() == ms_class);
+
 		tbf_free(dl_tbf);
 		tbf_free(ul_tbf);
 	}
diff --git a/tests/tbf/TbfTest.err b/tests/tbf/TbfTest.err
index d919b89..ecdc3fe 100644
--- a/tests/tbf/TbfTest.err
+++ b/tests/tbf/TbfTest.err
@@ -35,6 +35,7 @@
 TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=NULL) changes state from NULL to FLOW
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xffeeddcc, partly confirmed
+Modifying MS object, TLLI = 0xffeeddcc, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xffeeddcc, TBF = TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW)
 TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) append
 TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) append
@@ -105,6 +106,7 @@
 TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=NULL) changes state from NULL to FLOW
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xffeeddcc, partly confirmed
+Modifying MS object, TLLI = 0xffeeddcc, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xffeeddcc, TBF = TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW)
 TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) append
 TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) append
@@ -175,6 +177,7 @@
 TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=NULL) changes state from NULL to FLOW
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xffeeddcc, partly confirmed
+Modifying MS object, TLLI = 0xffeeddcc, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xffeeddcc, TBF = TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW)
 TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) append
 TBF(TFI=0 TLLI=0xffeeddcc DIR=DL STATE=FLOW) append
@@ -408,9 +411,11 @@
 TBF(TFI=1 TLLI=0x00000000 DIR=DL STATE=NULL) changes state from NULL to FLOW
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xf1000001, partly confirmed
+Modifying MS object, TLLI = 0xf1000001, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xf1000001, TBF = TBF(TFI=0 TLLI=0xf1000001 DIR=DL STATE=FLOW)
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xf1000002, partly confirmed
+Modifying MS object, TLLI = 0xf1000002, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xf1000002, TBF = TBF(TFI=1 TLLI=0xf1000002 DIR=DL STATE=FLOW)
 Modifying MS object, TLLI = 0xf1000001, IMSI '' -> '001001000000001'
 Modifying MS object, TLLI = 0xf1000001, IMSI '001001000000001' -> '001001000000002'
@@ -440,6 +445,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000000, partly confirmed
+Modifying MS object, TLLI = 0xc0000000, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000000, TBF = TBF(TFI=0 TLLI=0xc0000000 DIR=DL STATE=NULL)
 TBF(TFI=0 TLLI=0xc0000000 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000000, IMSI '' -> '001001000000000'
@@ -460,6 +466,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000001, partly confirmed
+Modifying MS object, TLLI = 0xc0000001, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000001, TBF = TBF(TFI=1 TLLI=0xc0000001 DIR=DL STATE=NULL)
 TBF(TFI=1 TLLI=0xc0000001 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000001, IMSI '' -> '001001000000001'
@@ -480,6 +487,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000002, partly confirmed
+Modifying MS object, TLLI = 0xc0000002, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000002, TBF = TBF(TFI=2 TLLI=0xc0000002 DIR=DL STATE=NULL)
 TBF(TFI=2 TLLI=0xc0000002 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000002, IMSI '' -> '001001000000002'
@@ -500,6 +508,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000003, partly confirmed
+Modifying MS object, TLLI = 0xc0000003, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000003, TBF = TBF(TFI=3 TLLI=0xc0000003 DIR=DL STATE=NULL)
 TBF(TFI=3 TLLI=0xc0000003 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000003, IMSI '' -> '001001000000003'
@@ -520,6 +529,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000004, partly confirmed
+Modifying MS object, TLLI = 0xc0000004, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000004, TBF = TBF(TFI=4 TLLI=0xc0000004 DIR=DL STATE=NULL)
 TBF(TFI=4 TLLI=0xc0000004 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000004, IMSI '' -> '001001000000004'
@@ -540,6 +550,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000005, partly confirmed
+Modifying MS object, TLLI = 0xc0000005, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000005, TBF = TBF(TFI=5 TLLI=0xc0000005 DIR=DL STATE=NULL)
 TBF(TFI=5 TLLI=0xc0000005 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000005, IMSI '' -> '001001000000005'
@@ -560,6 +571,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000006, partly confirmed
+Modifying MS object, TLLI = 0xc0000006, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000006, TBF = TBF(TFI=6 TLLI=0xc0000006 DIR=DL STATE=NULL)
 TBF(TFI=6 TLLI=0xc0000006 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000006, IMSI '' -> '001001000000006'
@@ -580,6 +592,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000007, partly confirmed
+Modifying MS object, TLLI = 0xc0000007, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000007, TBF = TBF(TFI=7 TLLI=0xc0000007 DIR=DL STATE=NULL)
 TBF(TFI=7 TLLI=0xc0000007 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000007, IMSI '' -> '001001000000007'
@@ -600,6 +613,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000008, partly confirmed
+Modifying MS object, TLLI = 0xc0000008, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000008, TBF = TBF(TFI=8 TLLI=0xc0000008 DIR=DL STATE=NULL)
 TBF(TFI=8 TLLI=0xc0000008 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000008, IMSI '' -> '001001000000008'
@@ -620,6 +634,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000009, partly confirmed
+Modifying MS object, TLLI = 0xc0000009, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000009, TBF = TBF(TFI=9 TLLI=0xc0000009 DIR=DL STATE=NULL)
 TBF(TFI=9 TLLI=0xc0000009 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000009, IMSI '' -> '001001000000009'
@@ -640,6 +655,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc000000a, partly confirmed
+Modifying MS object, TLLI = 0xc000000a, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc000000a, TBF = TBF(TFI=10 TLLI=0xc000000a DIR=DL STATE=NULL)
 TBF(TFI=10 TLLI=0xc000000a DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc000000a, IMSI '' -> '001001000000010'
@@ -660,6 +676,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc000000b, partly confirmed
+Modifying MS object, TLLI = 0xc000000b, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc000000b, TBF = TBF(TFI=11 TLLI=0xc000000b DIR=DL STATE=NULL)
 TBF(TFI=11 TLLI=0xc000000b DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc000000b, IMSI '' -> '001001000000011'
@@ -680,6 +697,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc000000c, partly confirmed
+Modifying MS object, TLLI = 0xc000000c, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc000000c, TBF = TBF(TFI=12 TLLI=0xc000000c DIR=DL STATE=NULL)
 TBF(TFI=12 TLLI=0xc000000c DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc000000c, IMSI '' -> '001001000000012'
@@ -700,6 +718,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc000000d, partly confirmed
+Modifying MS object, TLLI = 0xc000000d, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc000000d, TBF = TBF(TFI=13 TLLI=0xc000000d DIR=DL STATE=NULL)
 TBF(TFI=13 TLLI=0xc000000d DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc000000d, IMSI '' -> '001001000000013'
@@ -720,6 +739,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc000000e, partly confirmed
+Modifying MS object, TLLI = 0xc000000e, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc000000e, TBF = TBF(TFI=14 TLLI=0xc000000e DIR=DL STATE=NULL)
 TBF(TFI=14 TLLI=0xc000000e DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc000000e, IMSI '' -> '001001000000014'
@@ -740,6 +760,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc000000f, partly confirmed
+Modifying MS object, TLLI = 0xc000000f, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc000000f, TBF = TBF(TFI=15 TLLI=0xc000000f DIR=DL STATE=NULL)
 TBF(TFI=15 TLLI=0xc000000f DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc000000f, IMSI '' -> '001001000000015'
@@ -760,6 +781,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000010, partly confirmed
+Modifying MS object, TLLI = 0xc0000010, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000010, TBF = TBF(TFI=16 TLLI=0xc0000010 DIR=DL STATE=NULL)
 TBF(TFI=16 TLLI=0xc0000010 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000010, IMSI '' -> '001001000000016'
@@ -780,6 +802,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000011, partly confirmed
+Modifying MS object, TLLI = 0xc0000011, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000011, TBF = TBF(TFI=17 TLLI=0xc0000011 DIR=DL STATE=NULL)
 TBF(TFI=17 TLLI=0xc0000011 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000011, IMSI '' -> '001001000000017'
@@ -800,6 +823,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000012, partly confirmed
+Modifying MS object, TLLI = 0xc0000012, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000012, TBF = TBF(TFI=18 TLLI=0xc0000012 DIR=DL STATE=NULL)
 TBF(TFI=18 TLLI=0xc0000012 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000012, IMSI '' -> '001001000000018'
@@ -820,6 +844,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000013, partly confirmed
+Modifying MS object, TLLI = 0xc0000013, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000013, TBF = TBF(TFI=19 TLLI=0xc0000013 DIR=DL STATE=NULL)
 TBF(TFI=19 TLLI=0xc0000013 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000013, IMSI '' -> '001001000000019'
@@ -840,6 +865,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000014, partly confirmed
+Modifying MS object, TLLI = 0xc0000014, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000014, TBF = TBF(TFI=20 TLLI=0xc0000014 DIR=DL STATE=NULL)
 TBF(TFI=20 TLLI=0xc0000014 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000014, IMSI '' -> '001001000000020'
@@ -860,6 +886,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000015, partly confirmed
+Modifying MS object, TLLI = 0xc0000015, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000015, TBF = TBF(TFI=21 TLLI=0xc0000015 DIR=DL STATE=NULL)
 TBF(TFI=21 TLLI=0xc0000015 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000015, IMSI '' -> '001001000000021'
@@ -880,6 +907,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000016, partly confirmed
+Modifying MS object, TLLI = 0xc0000016, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000016, TBF = TBF(TFI=22 TLLI=0xc0000016 DIR=DL STATE=NULL)
 TBF(TFI=22 TLLI=0xc0000016 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000016, IMSI '' -> '001001000000022'
@@ -900,6 +928,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000017, partly confirmed
+Modifying MS object, TLLI = 0xc0000017, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000017, TBF = TBF(TFI=23 TLLI=0xc0000017 DIR=DL STATE=NULL)
 TBF(TFI=23 TLLI=0xc0000017 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000017, IMSI '' -> '001001000000023'
@@ -920,6 +949,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000018, partly confirmed
+Modifying MS object, TLLI = 0xc0000018, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000018, TBF = TBF(TFI=24 TLLI=0xc0000018 DIR=DL STATE=NULL)
 TBF(TFI=24 TLLI=0xc0000018 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000018, IMSI '' -> '001001000000024'
@@ -940,6 +970,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc0000019, partly confirmed
+Modifying MS object, TLLI = 0xc0000019, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc0000019, TBF = TBF(TFI=25 TLLI=0xc0000019 DIR=DL STATE=NULL)
 TBF(TFI=25 TLLI=0xc0000019 DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc0000019, IMSI '' -> '001001000000025'
@@ -960,6 +991,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc000001a, partly confirmed
+Modifying MS object, TLLI = 0xc000001a, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc000001a, TBF = TBF(TFI=26 TLLI=0xc000001a DIR=DL STATE=NULL)
 TBF(TFI=26 TLLI=0xc000001a DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc000001a, IMSI '' -> '001001000000026'
@@ -980,6 +1012,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc000001b, partly confirmed
+Modifying MS object, TLLI = 0xc000001b, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc000001b, TBF = TBF(TFI=27 TLLI=0xc000001b DIR=DL STATE=NULL)
 TBF(TFI=27 TLLI=0xc000001b DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc000001b, IMSI '' -> '001001000000027'
@@ -1000,6 +1033,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc000001c, partly confirmed
+Modifying MS object, TLLI = 0xc000001c, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc000001c, TBF = TBF(TFI=28 TLLI=0xc000001c DIR=DL STATE=NULL)
 TBF(TFI=28 TLLI=0xc000001c DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc000001c, IMSI '' -> '001001000000028'
@@ -1020,6 +1054,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc000001d, partly confirmed
+Modifying MS object, TLLI = 0xc000001d, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc000001d, TBF = TBF(TFI=29 TLLI=0xc000001d DIR=DL STATE=NULL)
 TBF(TFI=29 TLLI=0xc000001d DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc000001d, IMSI '' -> '001001000000029'
@@ -1040,6 +1075,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc000001e, partly confirmed
+Modifying MS object, TLLI = 0xc000001e, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc000001e, TBF = TBF(TFI=30 TLLI=0xc000001e DIR=DL STATE=NULL)
 TBF(TFI=30 TLLI=0xc000001e DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc000001e, IMSI '' -> '001001000000030'
@@ -1060,6 +1096,7 @@
 - Setting Control TS 4
 Creating MS object, TLLI = 0x00000000
 The MS object cannot fully confirm an unexpected TLLI: 0xc000001f, partly confirmed
+Modifying MS object, TLLI = 0xc000001f, MS class 0 -> 45
 Attaching TBF to MS object, TLLI = 0xc000001f, TBF = TBF(TFI=31 TLLI=0xc000001f DIR=DL STATE=NULL)
 TBF(TFI=31 TLLI=0xc000001f DIR=DL STATE=NULL) [DOWNLINK] START
 Modifying MS object, TLLI = 0xc000001f, IMSI '' -> '001001000000031'