diff options
author | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2014-10-28 09:47:03 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2014-11-05 00:24:02 +0100 |
commit | 14ae58206406b6cb78113f3460de44376bcd765d (patch) | |
tree | 1e9c5937e134f0776d54c18337dd9aae7b65d7c5 /openbsc/tests | |
parent | 70671421007faa0e7c94d237e53186379990e3f0 (diff) |
sgsn: Unassign the LLME after GMM Status without mmctx
Currently the LLME is not deleted when a GMM Status message is
received for which a mmctx cannot be found. This can fill the LLME
list with unneeded entries.
This patch adds code to unassign the LLME in that case.
Ticket: OW#1324
Sponsored-by: On-Waves ehf
Diffstat (limited to 'openbsc/tests')
-rw-r--r-- | openbsc/tests/sgsn/sgsn_test.c | 39 | ||||
-rw-r--r-- | openbsc/tests/sgsn/sgsn_test.ok | 1 |
2 files changed, 40 insertions, 0 deletions
diff --git a/openbsc/tests/sgsn/sgsn_test.c b/openbsc/tests/sgsn/sgsn_test.c index 05d1ee0ef..6762ef883 100644 --- a/openbsc/tests/sgsn/sgsn_test.c +++ b/openbsc/tests/sgsn/sgsn_test.c @@ -256,6 +256,44 @@ static void test_gmm_detach_no_mmctx(void) OSMO_ASSERT(count(gprs_llme_list()) == 0); } +/* + * Test that a GMM Status will remove the associated LLME if there is no MMCTX. + */ +static void test_gmm_status_no_mmctx(void) +{ + struct gprs_llc_lle *lle; + uint32_t local_tlli; + struct msgb *msg; + int sgsn_tx_counter_old; + + printf("Testing GMM Status (no MMCTX)\n"); + + /* DTAP - GMM Status, protocol error */ + static const unsigned char gmm_status[] = { + 0x08, 0x20, 0x6f + }; + + /* Create an LLME */ + OSMO_ASSERT(count(gprs_llme_list()) == 0); + local_tlli = gprs_tmsi2tlli(0x23, TLLI_LOCAL); + lle = gprs_lle_get_or_create(local_tlli, 3); + + OSMO_ASSERT(count(gprs_llme_list()) == 1); + + /* inject the detach */ + sgsn_tx_counter_old = sgsn_tx_counter; + msg = create_msg(gmm_status, ARRAY_SIZE(gmm_status)); + msgb_tlli(msg) = local_tlli; + gsm0408_gprs_rcvmsg(msg, lle->llme); + msgb_free(msg); + + /* verify that no message has been sent by the SGSN */ + OSMO_ASSERT(sgsn_tx_counter_old == sgsn_tx_counter); + + /* verify that the LLME is gone */ + OSMO_ASSERT(count(gprs_llme_list()) == 0); +} + static struct log_info_cat gprs_categories[] = { [DMM] = { .name = "DMM", @@ -321,6 +359,7 @@ int main(int argc, char **argv) test_gmm_detach(); test_gmm_detach_power_off(); test_gmm_detach_no_mmctx(); + test_gmm_status_no_mmctx(); printf("Done\n"); return 0; } diff --git a/openbsc/tests/sgsn/sgsn_test.ok b/openbsc/tests/sgsn/sgsn_test.ok index bca2b4bc4..ea5b0fadd 100644 --- a/openbsc/tests/sgsn/sgsn_test.ok +++ b/openbsc/tests/sgsn/sgsn_test.ok @@ -2,4 +2,5 @@ Testing LLME allocations Testing GMM detach Testing GMM detach (power off) Testing GMM detach (no MMCTX) +Testing GMM Status (no MMCTX) Done |