[PATCH 1/2] gbproxy: Test invalid BVCI from SGSN

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.

Jacob Erlbeck jerlbeck at sysmocom.de
Fri Oct 18 20:12:16 UTC 2013


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(-)

diff --git a/openbsc/include/openbsc/gb_proxy.h b/openbsc/include/openbsc/gb_proxy.h
index 82e47d5..7b14a09 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 ddc9e0a..a25a9f5 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 21ee723..e1e6587 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 e4b7aba..fcde39f 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
 
-- 
1.7.9.5





More information about the OpenBSC mailing list