aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2015-05-21 11:07:16 +0200
committerJacob Erlbeck <jerlbeck@sysmocom.de>2015-05-28 12:28:40 +0200
commitb0e5eaf59adbefc44e01850a6784c9da0c3abbf9 (patch)
treec7c628b9dd7db86d584e23a8c6d1031928059711
parent9a2845d491b088cb9e1962ba6dc8af5a4e279401 (diff)
tbf: Move IMSI to MS object
Currently the IMSI is stored in the TBFs. Since it directly refers to an MS, it should rather be stored in an MS object. This patch move the m_imsi field from gprs_rlcmac_tbf to GprsMs, changes gprs_rlcmac_tbf::imsi() to get the IMSI from the associated MS object, and adds getter and setter to GprsMs. Before changing the IMSI of the associated MS object, assign_imsi() checks if there is already another MS object with the same IMSI and eventually resets the IMSI of that one. So using update_ms() and assign_imsi() ensures that there are not two MS object entries is the storage with the same TLLI or the same IMSI. Ticket: #1674 Sponsored-by: On-Waves ehf
-rw-r--r--src/gprs_ms.cpp27
-rw-r--r--src/gprs_ms.h12
-rw-r--r--src/tbf.cpp42
-rw-r--r--src/tbf.h8
-rw-r--r--src/tbf_dl.cpp1
-rw-r--r--tests/tbf/TbfTest.cpp54
-rw-r--r--tests/tbf/TbfTest.err75
-rw-r--r--tests/tbf/TbfTest.ok2
8 files changed, 207 insertions, 14 deletions
diff --git a/src/gprs_ms.cpp b/src/gprs_ms.cpp
index 4c2f7cc..c2320a2 100644
--- a/src/gprs_ms.cpp
+++ b/src/gprs_ms.cpp
@@ -65,6 +65,8 @@ GprsMs::GprsMs(uint32_t tlli) :
m_list(this)
{
LOGP(DRLCMAC, LOGL_INFO, "Creating MS object, TLLI = 0x%08x\n", tlli);
+
+ m_imsi[0] = 0;
}
GprsMs::~GprsMs()
@@ -236,3 +238,28 @@ bool GprsMs::confirm_tlli(uint32_t tlli)
return true;
}
+
+void GprsMs::set_imsi(const char *imsi)
+{
+ if (!imsi) {
+ LOGP(DRLCMAC, LOGL_ERROR, "Expected IMSI!\n");
+ return;
+ }
+
+ if (imsi[0] && strlen(imsi) < 3) {
+ LOGP(DRLCMAC, LOGL_ERROR, "No valid IMSI '%s'!\n",
+ imsi);
+ return;
+ }
+
+ if (strcmp(imsi, m_imsi) == 0)
+ return;
+
+ LOGP(DRLCMAC, LOGL_INFO,
+ "Modifying MS object, TLLI = 0x%08x, IMSI '%s' -> '%s'\n",
+ tlli(), m_imsi, imsi);
+
+ strncpy(m_imsi, imsi, sizeof(m_imsi));
+ m_imsi[sizeof(m_imsi) - 1] = '\0';
+}
+
diff --git a/src/gprs_ms.h b/src/gprs_ms.h
index e84ff9e..7f8af41 100644
--- a/src/gprs_ms.h
+++ b/src/gprs_ms.h
@@ -56,6 +56,9 @@ public:
bool confirm_tlli(uint32_t tlli);
bool check_tlli(uint32_t tlli);
+ const char *imsi() const;
+ void set_imsi(const char *imsi);
+
void attach_tbf(gprs_rlcmac_tbf *tbf);
void attach_ul_tbf(gprs_rlcmac_ul_tbf *tbf);
void attach_dl_tbf(gprs_rlcmac_dl_tbf *tbf);
@@ -82,6 +85,10 @@ private:
uint32_t m_tlli;
uint32_t m_new_ul_tlli;
uint32_t m_new_dl_tlli;
+
+ /* store IMSI for look-up and PCH retransmission */
+ char m_imsi[16];
+
bool m_is_idle;
int m_ref;
LListHead<GprsMs> m_list;
@@ -99,3 +106,8 @@ inline bool GprsMs::check_tlli(uint32_t tlli)
return tlli != 0 &&
(tlli == m_tlli || tlli == m_new_ul_tlli || tlli == m_new_dl_tlli);
}
+
+inline const char *GprsMs::imsi() const
+{
+ return m_imsi;
+}
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 51b2aa5..0771969 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -51,10 +51,42 @@ uint32_t gprs_rlcmac_tbf::tlli() const
return m_ms ? m_ms->tlli() : 0;
}
-void gprs_rlcmac_tbf::assign_imsi(const char *imsi)
+const char *gprs_rlcmac_tbf::imsi() const
{
- strncpy(m_imsi, imsi, sizeof(m_imsi));
- m_imsi[sizeof(m_imsi) - 1] = '\0';
+ static const char nullc = 0;
+ return m_ms ? m_ms->imsi() : &nullc;
+}
+
+void gprs_rlcmac_tbf::assign_imsi(const char *imsi_)
+{
+ GprsMs *old_ms;
+
+ if (!imsi_ || !m_ms) {
+ LOGP(DRLCMAC, LOGL_ERROR,
+ "%s failed to assign IMSI: missing IMSI or MS object\n",
+ name());
+ return;
+ }
+
+ if (strcmp(imsi_, imsi()) == 0)
+ return;
+
+ /* really change the IMSI */
+
+ old_ms = bts->ms_store().get_ms(0, 0, imsi_);
+ if (old_ms) {
+ /* We cannot find m_ms by IMSI since we know that it has a
+ * different IMSI */
+ OSMO_ASSERT(old_ms != m_ms);
+
+ LOGP(DRLCMAC, LOGL_INFO,
+ "%s the IMSI '%s' was already assigned to another "
+ "MS object: TLLI = 0x%08x, that IMSI will be removed\n",
+ name(), imsi_, old_ms->tlli());
+ old_ms->set_imsi("");
+ }
+
+ m_ms->set_imsi(imsi_);
}
void gprs_rlcmac_tbf::set_new_tbf(gprs_rlcmac_tbf *tbf)
@@ -404,9 +436,9 @@ void gprs_rlcmac_tbf::poll_timeout()
LOGP(DRLCMAC, LOGL_DEBUG, "Re-send dowlink assignment "
"for %s on PCH (IMSI=%s)\n",
tbf_name(dl_tbf),
- m_imsi);
+ imsi());
/* send immediate assignment */
- dl_tbf->bts->snd_dl_ass(dl_tbf, 0, m_imsi);
+ dl_tbf->bts->snd_dl_ass(dl_tbf, 0, imsi());
dl_tbf->m_wait_confirm = 1;
}
} else
diff --git a/src/tbf.h b/src/tbf.h
index 9dbbe51..0820065 100644
--- a/src/tbf.h
+++ b/src/tbf.h
@@ -223,9 +223,6 @@ struct gprs_rlcmac_tbf {
uint8_t m_tfi;
time_t m_created_ts;
- /* store IMSI for look-up and PCH retransmission */
- char m_imsi[16];
-
protected:
gprs_rlcmac_bts *bts_data() const;
@@ -300,11 +297,6 @@ inline uint8_t gprs_rlcmac_tbf::tfi() const
return m_tfi;
}
-inline const char *gprs_rlcmac_tbf::imsi() const
-{
- return m_imsi;
-}
-
inline gprs_rlcmac_tbf *gprs_rlcmac_tbf::new_tbf() const
{
return m_new_tbf;
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index 605239a..13811fa 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -802,7 +802,6 @@ void gprs_rlcmac_dl_tbf::reuse_tbf(const uint8_t *data, const uint16_t len)
new_tbf->set_ms(ms());
new_tbf->ta = ta;
- new_tbf->assign_imsi(m_imsi);
/* Copy over all data to the new TBF */
new_tbf->m_llc.put_frame(data, len);
diff --git a/tests/tbf/TbfTest.cpp b/tests/tbf/TbfTest.cpp
index bf49dbd..bc78317 100644
--- a/tests/tbf/TbfTest.cpp
+++ b/tests/tbf/TbfTest.cpp
@@ -305,6 +305,59 @@ static void test_tbf_delayed_release()
printf("=== end %s ===\n", __func__);
}
+static void test_tbf_imsi()
+{
+ BTS the_bts;
+ uint8_t ts_no = 4;
+ uint8_t ms_class = 45;
+ uint8_t trx_no;
+ GprsMs *ms1, *ms2;
+
+ gprs_rlcmac_dl_tbf *dl_tbf[2];
+
+ printf("=== start %s ===\n", __func__);
+
+ setup_bts(&the_bts, ts_no);
+
+ dl_tbf[0] = create_dl_tbf(&the_bts, ms_class, &trx_no);
+ dl_tbf[1] = create_dl_tbf(&the_bts, ms_class, &trx_no);
+
+ dl_tbf[0]->update_ms(0xf1000001, GPRS_RLCMAC_DL_TBF);
+ dl_tbf[1]->update_ms(0xf1000002, GPRS_RLCMAC_DL_TBF);
+
+ dl_tbf[0]->assign_imsi("001001000000001");
+ ms1 = the_bts.ms_store().get_ms(0, 0, "001001000000001");
+ /* OSMO_ASSERT(ms1 != NULL); */
+ ms2 = the_bts.ms_store().get_ms(0xf1000001);
+ OSMO_ASSERT(ms2 != NULL);
+ OSMO_ASSERT(strcmp(ms2->imsi(), "001001000000001") == 0);
+ /* OSMO_ASSERT(ms1 == ms2); */
+
+ /* change the IMSI on TBF 0 */
+ dl_tbf[0]->assign_imsi("001001000000002");
+ ms1 = the_bts.ms_store().get_ms(0, 0, "001001000000001");
+ OSMO_ASSERT(ms1 == NULL);
+ ms1 = the_bts.ms_store().get_ms(0, 0, "001001000000002");
+ /* OSMO_ASSERT(ms1 != NULL); */
+ OSMO_ASSERT(strcmp(ms2->imsi(), "001001000000002") == 0);
+ /* OSMO_ASSERT(ms1 == ms2); */
+
+ /* use the same IMSI on TBF 2 */
+ dl_tbf[1]->assign_imsi("001001000000002");
+ ms1 = the_bts.ms_store().get_ms(0, 0, "001001000000002");
+ /* OSMO_ASSERT(ms1 != NULL); */
+ OSMO_ASSERT(ms1 != ms2);
+ /* OSMO_ASSERT(strcmp(ms1->imsi(), "001001000000002") == 0); */
+ /* OSMO_ASSERT(strcmp(ms2->imsi(), "") == 0); */
+
+ tbf_free(dl_tbf[1]);
+ ms1 = the_bts.ms_store().get_ms(0, 0, "001001000000002");
+ OSMO_ASSERT(ms1 == NULL);
+
+ tbf_free(dl_tbf[0]);
+ printf("=== end %s ===\n", __func__);
+}
+
static void test_tbf_exhaustion()
{
BTS the_bts;
@@ -389,6 +442,7 @@ int main(int argc, char **argv)
test_tbf_final_ack(TEST_MODE_STANDARD);
test_tbf_final_ack(TEST_MODE_REVERSE_FREE);
test_tbf_delayed_release();
+ test_tbf_imsi();
test_tbf_exhaustion();
if (getenv("TALLOC_REPORT_FULL"))
diff --git a/tests/tbf/TbfTest.err b/tests/tbf/TbfTest.err
index 6f95eb2..7fa1283 100644
--- a/tests/tbf/TbfTest.err
+++ b/tests/tbf/TbfTest.err
@@ -363,6 +363,49 @@ DL packet loss of IMSI= / TLLI=0x00000000: 0%
TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=WAIT RELEASE) free
TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=WAIT RELEASE) stopping timer 3193.
********** TBF ends here **********
+Searching for first unallocated TFI: TRX=0 first TS=4
+ Found TFI=0.
+********** TBF starts here **********
+Allocating DL TBF: TFI=0 TRX=0 MS_CLASS=45
+Slot Allocation (Algorithm A) for class 45
+- Skipping TS 0, because not enabled
+- Skipping TS 1, because not enabled
+- Skipping TS 2, because not enabled
+- Skipping TS 3, because not enabled
+- Assign downlink TS=4
+- Setting Control TS 4
+TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=NULL) changes state from NULL to FLOW
+Searching for first unallocated TFI: TRX=0 first TS=4
+ Found TFI=1.
+********** TBF starts here **********
+Allocating DL TBF: TFI=1 TRX=0 MS_CLASS=45
+Slot Allocation (Algorithm A) for class 45
+- Skipping TS 0, because not enabled
+- Skipping TS 1, because not enabled
+- Skipping TS 2, because not enabled
+- Skipping TS 3, because not enabled
+- Assign downlink TS=4
+- Setting Control TS 4
+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
+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
+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'
+Modifying MS object, TLLI = 0xf1000002, IMSI '' -> '001001000000002'
+TBF(TFI=1 TLLI=0xf1000002 DIR=DL STATE=FLOW) free
+TBF(TFI=1 TLLI=0xf1000002 DIR=DL STATE=FLOW) Software error: Pending downlink assignment. This may not happen, because the assignment message never gets transmitted. Please be sure not to free in this state. PLEASE FIX!
+Detaching TBF from MS object, TLLI = 0xf1000002, TBF = TBF(TFI=1 TLLI=0xf1000002 DIR=DL STATE=FLOW)
+Destroying MS object, TLLI = 0xf1000002
+********** TBF ends here **********
+TBF(TFI=0 TLLI=0xf1000001 DIR=DL STATE=FLOW) free
+TBF(TFI=0 TLLI=0xf1000001 DIR=DL STATE=FLOW) Software error: Pending downlink assignment. This may not happen, because the assignment message never gets transmitted. Please be sure not to free in this state. PLEASE FIX!
+Detaching TBF from MS object, TLLI = 0xf1000001, TBF = TBF(TFI=0 TLLI=0xf1000001 DIR=DL STATE=FLOW)
+Destroying MS object, TLLI = 0xf1000001
+********** TBF ends here **********
TA unknown, assuming 0
Searching for first unallocated TFI: TRX=0 first TS=4
Found TFI=0.
@@ -379,6 +422,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000000, partly confirmed
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'
Send dowlink assignment for TBF(TFI=0 TLLI=0xc0000000 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000000)
TBF(TFI=0 TLLI=0xc0000000 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=0 TLLI=0xc0000000 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -399,6 +443,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000001, partly confirmed
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'
Send dowlink assignment for TBF(TFI=1 TLLI=0xc0000001 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000001)
TBF(TFI=1 TLLI=0xc0000001 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=1 TLLI=0xc0000001 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -419,6 +464,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000002, partly confirmed
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'
Send dowlink assignment for TBF(TFI=2 TLLI=0xc0000002 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000002)
TBF(TFI=2 TLLI=0xc0000002 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=2 TLLI=0xc0000002 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -439,6 +485,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000003, partly confirmed
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'
Send dowlink assignment for TBF(TFI=3 TLLI=0xc0000003 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000003)
TBF(TFI=3 TLLI=0xc0000003 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=3 TLLI=0xc0000003 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -459,6 +506,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000004, partly confirmed
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'
Send dowlink assignment for TBF(TFI=4 TLLI=0xc0000004 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000004)
TBF(TFI=4 TLLI=0xc0000004 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=4 TLLI=0xc0000004 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -479,6 +527,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000005, partly confirmed
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'
Send dowlink assignment for TBF(TFI=5 TLLI=0xc0000005 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000005)
TBF(TFI=5 TLLI=0xc0000005 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=5 TLLI=0xc0000005 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -499,6 +548,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000006, partly confirmed
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'
Send dowlink assignment for TBF(TFI=6 TLLI=0xc0000006 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000006)
TBF(TFI=6 TLLI=0xc0000006 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=6 TLLI=0xc0000006 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -519,6 +569,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000007, partly confirmed
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'
Send dowlink assignment for TBF(TFI=7 TLLI=0xc0000007 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000007)
TBF(TFI=7 TLLI=0xc0000007 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=7 TLLI=0xc0000007 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -539,6 +590,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000008, partly confirmed
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'
Send dowlink assignment for TBF(TFI=8 TLLI=0xc0000008 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000008)
TBF(TFI=8 TLLI=0xc0000008 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=8 TLLI=0xc0000008 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -559,6 +611,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000009, partly confirmed
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'
Send dowlink assignment for TBF(TFI=9 TLLI=0xc0000009 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000009)
TBF(TFI=9 TLLI=0xc0000009 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=9 TLLI=0xc0000009 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -579,6 +632,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc000000a, partly confirmed
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'
Send dowlink assignment for TBF(TFI=10 TLLI=0xc000000a DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000010)
TBF(TFI=10 TLLI=0xc000000a DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=10 TLLI=0xc000000a DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -599,6 +653,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc000000b, partly confirmed
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'
Send dowlink assignment for TBF(TFI=11 TLLI=0xc000000b DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000011)
TBF(TFI=11 TLLI=0xc000000b DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=11 TLLI=0xc000000b DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -619,6 +674,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc000000c, partly confirmed
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'
Send dowlink assignment for TBF(TFI=12 TLLI=0xc000000c DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000012)
TBF(TFI=12 TLLI=0xc000000c DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=12 TLLI=0xc000000c DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -639,6 +695,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc000000d, partly confirmed
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'
Send dowlink assignment for TBF(TFI=13 TLLI=0xc000000d DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000013)
TBF(TFI=13 TLLI=0xc000000d DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=13 TLLI=0xc000000d DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -659,6 +716,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc000000e, partly confirmed
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'
Send dowlink assignment for TBF(TFI=14 TLLI=0xc000000e DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000014)
TBF(TFI=14 TLLI=0xc000000e DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=14 TLLI=0xc000000e DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -679,6 +737,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc000000f, partly confirmed
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'
Send dowlink assignment for TBF(TFI=15 TLLI=0xc000000f DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000015)
TBF(TFI=15 TLLI=0xc000000f DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=15 TLLI=0xc000000f DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -699,6 +758,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000010, partly confirmed
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'
Send dowlink assignment for TBF(TFI=16 TLLI=0xc0000010 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000016)
TBF(TFI=16 TLLI=0xc0000010 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=16 TLLI=0xc0000010 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -719,6 +779,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000011, partly confirmed
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'
Send dowlink assignment for TBF(TFI=17 TLLI=0xc0000011 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000017)
TBF(TFI=17 TLLI=0xc0000011 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=17 TLLI=0xc0000011 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -739,6 +800,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000012, partly confirmed
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'
Send dowlink assignment for TBF(TFI=18 TLLI=0xc0000012 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000018)
TBF(TFI=18 TLLI=0xc0000012 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=18 TLLI=0xc0000012 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -759,6 +821,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000013, partly confirmed
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'
Send dowlink assignment for TBF(TFI=19 TLLI=0xc0000013 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000019)
TBF(TFI=19 TLLI=0xc0000013 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=19 TLLI=0xc0000013 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -779,6 +842,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000014, partly confirmed
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'
Send dowlink assignment for TBF(TFI=20 TLLI=0xc0000014 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000020)
TBF(TFI=20 TLLI=0xc0000014 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=20 TLLI=0xc0000014 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -799,6 +863,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000015, partly confirmed
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'
Send dowlink assignment for TBF(TFI=21 TLLI=0xc0000015 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000021)
TBF(TFI=21 TLLI=0xc0000015 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=21 TLLI=0xc0000015 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -819,6 +884,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000016, partly confirmed
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'
Send dowlink assignment for TBF(TFI=22 TLLI=0xc0000016 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000022)
TBF(TFI=22 TLLI=0xc0000016 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=22 TLLI=0xc0000016 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -839,6 +905,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000017, partly confirmed
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'
Send dowlink assignment for TBF(TFI=23 TLLI=0xc0000017 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000023)
TBF(TFI=23 TLLI=0xc0000017 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=23 TLLI=0xc0000017 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -859,6 +926,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000018, partly confirmed
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'
Send dowlink assignment for TBF(TFI=24 TLLI=0xc0000018 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000024)
TBF(TFI=24 TLLI=0xc0000018 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=24 TLLI=0xc0000018 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -879,6 +947,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc0000019, partly confirmed
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'
Send dowlink assignment for TBF(TFI=25 TLLI=0xc0000019 DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000025)
TBF(TFI=25 TLLI=0xc0000019 DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=25 TLLI=0xc0000019 DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -899,6 +968,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc000001a, partly confirmed
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'
Send dowlink assignment for TBF(TFI=26 TLLI=0xc000001a DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000026)
TBF(TFI=26 TLLI=0xc000001a DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=26 TLLI=0xc000001a DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -919,6 +989,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc000001b, partly confirmed
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'
Send dowlink assignment for TBF(TFI=27 TLLI=0xc000001b DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000027)
TBF(TFI=27 TLLI=0xc000001b DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=27 TLLI=0xc000001b DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -939,6 +1010,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc000001c, partly confirmed
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'
Send dowlink assignment for TBF(TFI=28 TLLI=0xc000001c DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000028)
TBF(TFI=28 TLLI=0xc000001c DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=28 TLLI=0xc000001c DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -959,6 +1031,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc000001d, partly confirmed
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'
Send dowlink assignment for TBF(TFI=29 TLLI=0xc000001d DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000029)
TBF(TFI=29 TLLI=0xc000001d DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=29 TLLI=0xc000001d DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -979,6 +1052,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc000001e, partly confirmed
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'
Send dowlink assignment for TBF(TFI=30 TLLI=0xc000001e DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000030)
TBF(TFI=30 TLLI=0xc000001e DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=30 TLLI=0xc000001e DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
@@ -999,6 +1073,7 @@ Creating MS object, TLLI = 0x00000000
The MS object cannot fully confirm an unexpected TLLI: 0xc000001f, partly confirmed
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'
Send dowlink assignment for TBF(TFI=31 TLLI=0xc000001f DIR=DL STATE=NULL) on PCH, no TBF exist (IMSI=001001000000031)
TBF(TFI=31 TLLI=0xc000001f DIR=DL STATE=NULL) changes state from NULL to ASSIGN
TX: START TBF(TFI=31 TLLI=0xc000001f DIR=DL STATE=ASSIGN) Immediate Assignment Downlink (PCH)
diff --git a/tests/tbf/TbfTest.ok b/tests/tbf/TbfTest.ok
index cd96caa..984e735 100644
--- a/tests/tbf/TbfTest.ok
+++ b/tests/tbf/TbfTest.ok
@@ -1,4 +1,6 @@
=== start test_tbf_delayed_release ===
=== end test_tbf_delayed_release ===
+=== start test_tbf_imsi ===
+=== end test_tbf_imsi ===
=== start test_tbf_exhaustion ===
=== end test_tbf_exhaustion ===