aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/tests/gbproxy/gbproxy_test.c
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2013-10-24 12:48:55 +0200
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-10-24 18:02:36 +0200
commit72b401f33df215173aa9b3a6f8237115a3d5f0b5 (patch)
treef82c5da7849d16b82c9d5fb19de37fddbc542faa /openbsc/tests/gbproxy/gbproxy_test.c
parent4211d79cd1381efd1c1e457d0592c2a1f5b2a4fd (diff)
gbproxy: Add test for NSEI and NSVCI changes
This checks the behavior of the gbproxy when the BSS peer changes the NSEI and the NSVCI. It also tests BVC_RESET and other UNITDATA messages after these changes between BSS and SGSN and vice versa (via the gbproxy). Ticket: OW#874 Sponsored-by: On-Waves ehf
Diffstat (limited to 'openbsc/tests/gbproxy/gbproxy_test.c')
-rw-r--r--openbsc/tests/gbproxy/gbproxy_test.c153
1 files changed, 151 insertions, 2 deletions
diff --git a/openbsc/tests/gbproxy/gbproxy_test.c b/openbsc/tests/gbproxy/gbproxy_test.c
index e1e6587ba..d32ac8340 100644
--- a/openbsc/tests/gbproxy/gbproxy_test.c
+++ b/openbsc/tests/gbproxy/gbproxy_test.c
@@ -543,6 +543,147 @@ static void test_gbproxy()
gprs_ns_destroy(nsi);
nsi = NULL;
+ gbprox_reset();
+}
+
+static void test_gbproxy_ident_changes()
+{
+ struct gprs_ns_inst *nsi = gprs_ns_instantiate(gprs_ns_callback, NULL);
+ struct sockaddr_in bss_peer[1] = {{0},};
+ struct sockaddr_in sgsn_peer= {0};
+ uint16_t nsei[2] = {0x1000, 0x2000};
+ uint16_t nsvci[2] = {0x1001, 0x2001};
+ uint16_t bvci[4] = {0x1002, 0x2002, 0x3002, 0x4002};
+
+ bssgp_nsi = nsi;
+ gbcfg.nsi = bssgp_nsi;
+ gbcfg.nsip_sgsn_nsei = SGSN_NSEI;
+
+ sgsn_peer.sin_family = AF_INET;
+ sgsn_peer.sin_port = htons(32000);
+ sgsn_peer.sin_addr.s_addr = htonl(REMOTE_SGSN_ADDR);
+
+ bss_peer[0].sin_family = AF_INET;
+ bss_peer[0].sin_port = htons(1111);
+ bss_peer[0].sin_addr.s_addr = htonl(REMOTE_BSS_ADDR);
+
+ printf("--- Initialise SGSN ---\n\n");
+
+ gprs_ns_nsip_connect(nsi, &sgsn_peer, SGSN_NSEI, SGSN_NSEI+1);
+ send_ns_reset_ack(nsi, &sgsn_peer, SGSN_NSEI+1, SGSN_NSEI);
+ send_ns_alive_ack(nsi, &sgsn_peer);
+ send_ns_unblock_ack(nsi, &sgsn_peer);
+ send_ns_alive(nsi, &sgsn_peer);
+ gprs_dump_nsi(nsi);
+
+ printf("--- Initialise BSS 1 ---\n\n");
+
+ setup_ns(nsi, &bss_peer[0], nsvci[0], nsei[0]);
+ gprs_dump_nsi(nsi);
+
+ printf("--- Setup BVCI 1 ---\n\n");
+
+ setup_bssgp(nsi, &bss_peer[0], bvci[0]);
+ send_bssgp_reset_ack(nsi, &sgsn_peer, bvci[0]);
+ gbprox_dump_peers(stdout, 0, 1);
+
+ printf("--- Setup BVCI 2 ---\n\n");
+
+ setup_bssgp(nsi, &bss_peer[0], bvci[1]);
+ send_bssgp_reset_ack(nsi, &sgsn_peer, bvci[1]);
+ gbprox_dump_peers(stdout, 0, 1);
+
+ printf("--- Send message from BSS 1 to SGSN and back, BVCI 1 ---\n\n");
+
+ send_ns_unitdata(nsi, NULL, &bss_peer[0], bvci[0], (uint8_t *)"", 0);
+ send_ns_unitdata(nsi, NULL, &sgsn_peer, bvci[0], (uint8_t *)"", 0);
+
+ printf("--- Send message from BSS 1 to SGSN and back, BVCI 2 ---\n\n");
+
+ send_ns_unitdata(nsi, NULL, &bss_peer[0], bvci[1], (uint8_t *)"", 0);
+ send_ns_unitdata(nsi, NULL, &sgsn_peer, bvci[1], (uint8_t *)"", 0);
+
+ printf("--- Change NSEI ---\n\n");
+
+ setup_ns(nsi, &bss_peer[0], nsvci[0], nsei[1]);
+ gprs_dump_nsi(nsi);
+
+ printf("--- Setup BVCI 1 ---\n\n");
+
+ setup_bssgp(nsi, &bss_peer[0], bvci[0]);
+ send_bssgp_reset_ack(nsi, &sgsn_peer, bvci[0]);
+ gbprox_dump_peers(stdout, 0, 1);
+
+ printf("--- Setup BVCI 3 ---\n\n");
+
+ setup_bssgp(nsi, &bss_peer[0], bvci[2]);
+ send_bssgp_reset_ack(nsi, &sgsn_peer, bvci[2]);
+ gbprox_dump_peers(stdout, 0, 1);
+
+ printf("--- Send message from BSS 1 to SGSN and back, BVCI 1 ---\n\n");
+
+ send_ns_unitdata(nsi, NULL, &bss_peer[0], bvci[0], (uint8_t *)"", 0);
+ send_ns_unitdata(nsi, NULL, &sgsn_peer, bvci[0], (uint8_t *)"", 0);
+
+ printf("--- Send message from BSS 1 to SGSN and back, BVCI 2 "
+ " (should fail) ---\n\n");
+
+ send_ns_unitdata(nsi, NULL, &bss_peer[0], bvci[1], (uint8_t *)"", 0);
+ gbprox_dump_peers(stdout, 0, 1);
+ send_ns_unitdata(nsi, NULL, &sgsn_peer, bvci[1], (uint8_t *)"", 0);
+ gbprox_dump_peers(stdout, 0, 1);
+
+ printf("--- Send message from BSS 1 to SGSN and back, BVCI 3 ---\n\n");
+
+ send_ns_unitdata(nsi, NULL, &bss_peer[0], bvci[2], (uint8_t *)"", 0);
+ send_ns_unitdata(nsi, NULL, &sgsn_peer, bvci[2], (uint8_t *)"", 0);
+
+ printf("--- Change NSVCI ---\n\n");
+
+ setup_ns(nsi, &bss_peer[0], nsvci[1], nsei[1]);
+ gprs_dump_nsi(nsi);
+
+ printf("--- Setup BVCI 1 ---\n\n");
+
+ setup_bssgp(nsi, &bss_peer[0], bvci[0]);
+ send_bssgp_reset_ack(nsi, &sgsn_peer, bvci[0]);
+ gbprox_dump_peers(stdout, 0, 1);
+
+ printf("--- Setup BVCI 4 ---\n\n");
+
+ setup_bssgp(nsi, &bss_peer[0], bvci[3]);
+ send_bssgp_reset_ack(nsi, &sgsn_peer, bvci[3]);
+ gbprox_dump_peers(stdout, 0, 1);
+
+ printf("--- Send message from BSS 1 to SGSN and back, BVCI 1 ---\n\n");
+
+ send_ns_unitdata(nsi, NULL, &bss_peer[0], bvci[0], (uint8_t *)"", 0);
+ send_ns_unitdata(nsi, NULL, &sgsn_peer, bvci[0], (uint8_t *)"", 0);
+
+ printf("--- Send message from BSS 1 to SGSN and back, BVCI 2 "
+ " (should fail) ---\n\n");
+
+ send_ns_unitdata(nsi, NULL, &bss_peer[0], bvci[1], (uint8_t *)"", 0);
+ gbprox_dump_peers(stdout, 0, 1);
+ send_ns_unitdata(nsi, NULL, &sgsn_peer, bvci[1], (uint8_t *)"", 0);
+ gbprox_dump_peers(stdout, 0, 1);
+
+ printf("--- Send message from BSS 1 to SGSN and back, BVCI 3 ---\n\n");
+
+ send_ns_unitdata(nsi, NULL, &bss_peer[0], bvci[2], (uint8_t *)"", 0);
+ send_ns_unitdata(nsi, NULL, &sgsn_peer, bvci[2], (uint8_t *)"", 0);
+
+ printf("--- Send message from BSS 1 to SGSN and back, BVCI 4 ---\n\n");
+
+ send_ns_unitdata(nsi, NULL, &bss_peer[0], bvci[3], (uint8_t *)"", 0);
+ send_ns_unitdata(nsi, NULL, &sgsn_peer, bvci[3], (uint8_t *)"", 0);
+
+ gbprox_dump_global(stdout, 0, 1);
+ gbprox_dump_peers(stdout, 0, 1);
+
+ gprs_ns_destroy(nsi);
+ nsi = NULL;
+ gbprox_reset();
}
@@ -555,9 +696,17 @@ int main(int argc, char **argv)
log_set_print_filename(osmo_stderr_target, 0);
osmo_signal_register_handler(SS_L_NS, &test_signal, NULL);
- printf("===== NS protocol test START\n");
+ log_set_print_filename(osmo_stderr_target, 0);
+ log_set_log_level(osmo_stderr_target, LOGL_INFO);
+
+ rate_ctr_init(NULL);
+
+ setlinebuf(stdout);
+
+ printf("===== GbProxy test START\n");
test_gbproxy();
- printf("===== NS protocol test END\n\n");
+ test_gbproxy_ident_changes();
+ printf("===== GbProxy test END\n\n");
exit(EXIT_SUCCESS);
}