diff options
Diffstat (limited to 'openbsc/tests/gbproxy/gbproxy_test.c')
-rw-r--r-- | openbsc/tests/gbproxy/gbproxy_test.c | 57 |
1 files changed, 53 insertions, 4 deletions
diff --git a/openbsc/tests/gbproxy/gbproxy_test.c b/openbsc/tests/gbproxy/gbproxy_test.c index 27454a2a9..0d55fb3db 100644 --- a/openbsc/tests/gbproxy/gbproxy_test.c +++ b/openbsc/tests/gbproxy/gbproxy_test.c @@ -25,6 +25,7 @@ #include <osmocom/core/signal.h> #include <osmocom/core/rate_ctr.h> #include <osmocom/gsm/tlv.h> +#include <osmocom/gsm/gsm_utils.h> #include <osmocom/gprs/gprs_msgb.h> #include <osmocom/gprs/gprs_ns.h> #include <osmocom/gprs/gprs_bssgp.h> @@ -124,10 +125,12 @@ static int dump_peers(FILE *stream, int indent, time_t now, } else { snprintf(mi_buf, sizeof(mi_buf), "(none)"); } - rc = fprintf(stream, - "%*s TLLI %08x, IMSI %s, AGE %d\n", - indent, "", - tlli_info->tlli, mi_buf, (int)age); + fprintf(stream, "%*s TLLI %08x", + indent, "", tlli_info->tlli); + if (tlli_info->assigned_tlli) + fprintf(stream, "/%08x", tlli_info->assigned_tlli); + rc = fprintf(stream, ", IMSI %s, AGE %d\n", + mi_buf, (int)age); if (rc < 0) return rc; } @@ -181,6 +184,14 @@ static const unsigned char bssgp_attach_acc[88] = { 0xf4, 0xef, 0xe2, 0xb7, 0x00, 0x42, 0x67, 0x9a }; +/* Base Station Subsystem GPRS Protocol: GSM A-I/F DTAP - Attach Complete */ +static const unsigned char bssgp_attach_complete[] = { + 0x01, 0xef, 0xe2, 0xb7, 0x00, 0x00, 0x00, 0x04, + 0x08, 0x88, 0x11, 0x22, 0x33, 0x40, 0x50, 0x60, + 0x75, 0x30, 0x00, 0x80, 0x0e, 0x00, 0x08, 0x01, + 0xc0, 0x11, 0x08, 0x03, 0xff, 0xff, 0xff +}; + /* Base Station Subsystem GPRS Protocol: GSM A-I/F DTAP - GMM Information */ static const unsigned char bssgp_gmm_information[66] = { 0x00, 0xef, 0xe2, 0xb7, 0x00, 0x00, 0x50, 0x20, @@ -970,6 +981,12 @@ static void test_gbproxy_ra_patching() struct gprs_ra_id rai_unknown = {.mcc = 1, .mnc = 99, .lac = 99, .rac = 96}; const char *err_msg = NULL; + const uint32_t ptmsi = 0xefe2b700; + const uint32_t local_tlli = 0xefe2b700; + struct gbproxy_tlli_info *tlli_info; + struct gbproxy_peer *peer; + + OSMO_ASSERT(local_tlli == gprs_tmsi2tlli(ptmsi, TLLI_LOCAL)); bssgp_nsi = nsi; gbcfg.nsi = bssgp_nsi; @@ -1003,6 +1020,9 @@ static void test_gbproxy_ra_patching() gprs_dump_nsi(nsi); dump_peers(stdout, 0, 0, &gbcfg); + peer = gbprox_peer_by_nsei(&gbcfg, 0x1000); + OSMO_ASSERT(peer != NULL); + send_bssgp_reset_ack(nsi, &sgsn_peer, 0x1002); send_bssgp_suspend(nsi, &bss_peer[0], &rai_bss); @@ -1025,14 +1045,43 @@ static void test_gbproxy_ra_patching() send_ns_unitdata(nsi, "ATTACH ACCEPT", &sgsn_peer, 0x1002, bssgp_attach_acc, sizeof(bssgp_attach_acc)); + tlli_info = gbprox_find_tlli(peer, local_tlli); + OSMO_ASSERT(tlli_info); + OSMO_ASSERT(tlli_info->assigned_tlli == local_tlli); + OSMO_ASSERT(tlli_info->tlli != local_tlli); + OSMO_ASSERT(!tlli_info->bss_validated); + OSMO_ASSERT(!tlli_info->net_validated); + + send_ns_unitdata(nsi, "ATTACH COMPLETE", &bss_peer[0], 0x1002, + bssgp_attach_complete, sizeof(bssgp_attach_complete)); + + tlli_info = gbprox_find_tlli(peer, local_tlli); + OSMO_ASSERT(tlli_info); + OSMO_ASSERT(tlli_info->assigned_tlli == local_tlli); + OSMO_ASSERT(tlli_info->tlli != local_tlli); + OSMO_ASSERT(tlli_info->bss_validated); + OSMO_ASSERT(!tlli_info->net_validated); + /* Replace APN (1) */ send_ns_unitdata(nsi, "ACT PDP CTX REQ (REPLACE APN)", &bss_peer[0], 0x1002, bssgp_act_pdp_ctx_req, sizeof(bssgp_act_pdp_ctx_req)); + tlli_info = gbprox_find_tlli(peer, local_tlli); + OSMO_ASSERT(tlli_info); + OSMO_ASSERT(tlli_info->assigned_tlli == local_tlli); + OSMO_ASSERT(tlli_info->tlli != local_tlli); + OSMO_ASSERT(tlli_info->bss_validated); + OSMO_ASSERT(!tlli_info->net_validated); + send_ns_unitdata(nsi, "GMM INFO", &sgsn_peer, 0x1002, bssgp_gmm_information, sizeof(bssgp_gmm_information)); + tlli_info = gbprox_find_tlli(peer, local_tlli); + OSMO_ASSERT(tlli_info); + OSMO_ASSERT(tlli_info->assigned_tlli == 0); + OSMO_ASSERT(tlli_info->tlli == local_tlli); + /* Replace APN (2) */ send_ns_unitdata(nsi, "ACT PDP CTX REQ (REPLACE APN)", &bss_peer[0], 0x1002, |