From da890c77330cd2e0f63ab0731fcc9cd2b2366c3c Mon Sep 17 00:00:00 2001 From: Jacob Erlbeck Date: Fri, 18 Oct 2013 22:12:16 +0200 Subject: gbproxy: Test invalid BVCI from SGSN This adds a test with a UNITDATA SGSN message that is addressed to an invalid (unknown) BVCI. The test shows, that the message is echoed to the SGSN. Sponsored-by: On-Waves ehf --- openbsc/include/openbsc/gb_proxy.h | 1 + openbsc/src/gprs/gb_proxy.c | 36 ++++++++++++++++++++++++++++++++++- openbsc/tests/gbproxy/gbproxy_test.c | 8 ++++++++ openbsc/tests/gbproxy/gbproxy_test.ok | 18 ++++++++++++++++++ 4 files changed, 62 insertions(+), 1 deletion(-) (limited to 'openbsc') diff --git a/openbsc/include/openbsc/gb_proxy.h b/openbsc/include/openbsc/gb_proxy.h index 82e47d555..7b14a099a 100644 --- a/openbsc/include/openbsc/gb_proxy.h +++ b/openbsc/include/openbsc/gb_proxy.h @@ -35,5 +35,6 @@ int gbprox_signal(unsigned int subsys, unsigned int signal, /* Reset all persistent NS-VC's */ int gbprox_reset_persistent_nsvcs(struct gprs_ns_inst *nsi); +int gbprox_dump_global(FILE *stream, int indent, int verbose); int gbprox_dump_peers(FILE *stream, int indent, int verbose); #endif diff --git a/openbsc/src/gprs/gb_proxy.c b/openbsc/src/gprs/gb_proxy.c index ddc9e0aaf..a25a9f57b 100644 --- a/openbsc/src/gprs/gb_proxy.c +++ b/openbsc/src/gprs/gb_proxy.c @@ -800,6 +800,37 @@ int gbprox_signal(unsigned int subsys, unsigned int signal, return 0; } +int gbprox_dump_global(FILE *stream, int indent, int verbose) +{ + unsigned int i; + const struct rate_ctr_group_desc *desc; + int rc; + + rc = fprintf(stream, "%*sGbproxy global:\n", indent, ""); + if (rc < 0) + return rc; + + if (!verbose) + return 0; + + desc = get_global_ctrg()->desc; + + for (i = 0; i < desc->num_ctr; i++) { + struct rate_ctr *ctr = &get_global_ctrg()->ctr[i]; + if (ctr->current) { + rc = fprintf(stream, "%*s %s: %llu\n", + indent, "", + desc->ctr_desc[i].description, + (long long)ctr->current); + + if (rc < 0) + return rc; + } + } + + return 0; +} + int gbprox_dump_peers(FILE *stream, int indent, int verbose) { struct gbprox_peer *peer; @@ -808,7 +839,10 @@ int gbprox_dump_peers(FILE *stream, int indent, int verbose) const struct rate_ctr_group_desc *desc; int rc; - fprintf(stream, "%*sPeers:\n", indent, ""); + rc = fprintf(stream, "%*sPeers:\n", indent, ""); + if (rc < 0) + return rc; + llist_for_each_entry(peer, &gbprox_bts_peers, list) { gsm48_parse_ra(&raid, peer->ra); diff --git a/openbsc/tests/gbproxy/gbproxy_test.c b/openbsc/tests/gbproxy/gbproxy_test.c index 21ee723ce..e1e6587ba 100644 --- a/openbsc/tests/gbproxy/gbproxy_test.c +++ b/openbsc/tests/gbproxy/gbproxy_test.c @@ -523,6 +523,8 @@ static void test_gbproxy() gprs_dump_nsi(nsi); gbprox_dump_peers(stdout, 0, 1); + gbprox_dump_global(stdout, 0, 1); + send_bssgp_reset_ack(nsi, &sgsn_peer, 0x1002); printf("--- Send message from BSS 1 to SGSN, BVCI 0x1002 ---\n\n"); @@ -533,6 +535,12 @@ static void test_gbproxy() send_ns_unitdata(nsi, NULL, &sgsn_peer, 0x1012, (uint8_t *)"", 0); + printf("--- Send message from SGSN to BSS 1, BVCI 0x10ff (invalid) ---\n\n"); + + send_ns_unitdata(nsi, NULL, &sgsn_peer, 0x10ff, (uint8_t *)"", 0); + + gbprox_dump_global(stdout, 0, 1); + gprs_ns_destroy(nsi); nsi = NULL; } diff --git a/openbsc/tests/gbproxy/gbproxy_test.ok b/openbsc/tests/gbproxy/gbproxy_test.ok index e4b7aba6f..fcde39f20 100644 --- a/openbsc/tests/gbproxy/gbproxy_test.ok +++ b/openbsc/tests/gbproxy/gbproxy_test.ok @@ -749,6 +749,7 @@ Peers: NSEI mismatch : 1 NSEI 4096, BVCI 4098, not blocked, RAC 10-32-16464-96 NSEI mismatch : 1 +Gbproxy global: PROCESSING BVC_RESET_ACK from 0x05060708:32000 00 00 00 00 23 04 82 10 02 @@ -795,5 +796,22 @@ MESSAGE to BSS at 0x01020304:1111, msg length 4 result (UNITDATA) = 4 +--- Send message from SGSN to BSS 1, BVCI 0x10ff (invalid) --- + +PROCESSING UNITDATA from 0x05060708:32000 +00 00 10 ff + +CALLBACK, event 0, msg length 0, bvci 0x10ff + + +NS UNITDATA MESSAGE to SGSN, BVCI 0x10ff, msg length 0 + + +MESSAGE to SGSN at 0x05060708:32000, msg length 4 +00 00 10 ff + +result (UNITDATA) = 4 + +Gbproxy global: ===== NS protocol test END -- cgit v1.2.3