gtphub: add test for SGSN behind NAT

This commit is contained in:
Neels Hofmeyr 2015-12-03 14:29:48 +01:00
parent 1ae3ebd68b
commit f8c701008b
2 changed files with 105 additions and 0 deletions

View File

@ -1450,6 +1450,106 @@ static void test_peer_restarted_reusing_tei(void)
OSMO_ASSERT(clear_test_hub());
}
static void test_sgsn_behind_nat(void)
{
LOG("test_user_data");
OSMO_ASSERT(setup_test_hub());
hub->sgsn_use_sender = 1; /* <-- Main difference to test_user_data() */
resolve_to_sgsn("192.168.42.23", 423); /* Same as sender */
OSMO_ASSERT(create_pdp_ctx());
/* now == 345; now + (6 * 60 * 60) == 21600 + 345 == 21945. */
OSMO_ASSERT(tunnels_are(
"192.168.42.23 (TEI C 321=1 / U 123=2)"
" <-> 192.168.43.34 (TEI C 765=3 / U 567=4)"
" @21945\n"));
LOG("- user data starts");
/* Now expect default port numbers for User plane -- except SGSN. */
resolve_to_ggsn("192.168.43.34", 2152);
/* 10 minutes later */
now += 600;
const char *u_from_ggsn =
"32" /* 0b001'1 0010: version 1, protocol GTP, with seq nr */
"ff" /* type 255: G-PDU */
"0058" /* length: 88 + 8 octets == 96 */
"00000002" /* mapped User TEI for SGSN from create_pdp_ctx() */
"0070" /* seq */
"0000" /* No extensions */
/* User data (ICMP packet), 96 - 12 = 84 octets */
"45000054daee40004001f7890a172a010a172a02080060d23f590071e3f8"
"4156000000007241010000000000101112131415161718191a1b1c1d1e1f"
"202122232425262728292a2b2c2d2e2f3031323334353637"
;
const char *u_to_sgsn =
"32" /* 0b001'1 0010: version 1, protocol GTP, with seq nr */
"ff" /* type 255: G-PDU */
"0058" /* length: 88 + 8 octets == 96 */
"00000123" /* unmapped User TEI */
"6d31" /* new mapped seq */
"0000"
"45000054daee40004001f7890a172a010a172a02080060d23f590071e3f8"
"4156000000007241010000000000101112131415161718191a1b1c1d1e1f"
"202122232425262728292a2b2c2d2e2f3031323334353637"
;
/* This depends on create_pdp_ctx() sending resolved_sgsn_addr as GSN
* Address IEs in the GGSN's Create PDP Ctx Response. */
OSMO_ASSERT(msg_from_ggsn_u(&ggsn_sender,
&resolved_sgsn_addr,
u_from_ggsn,
u_to_sgsn));
/* Make sure the user plane messages have refreshed the TEI mapping
* timeouts: 21945 + 600 == 22545. */
OSMO_ASSERT(tunnels_are(
"192.168.42.23 (TEI C 321=1 / U 123=2)"
" <-> 192.168.43.34 (TEI C 765=3 / U 567=4)"
" @22545\n"));
const char *u_from_sgsn =
"32" /* 0b001'1 0010: version 1, protocol GTP, with seq nr */
"ff" /* type 255: G-PDU */
"0058" /* length: 88 + 8 octets == 96 */
"00000004" /* mapped User TEI for GGSN from create_pdp_ctx() */
"1234" /* unknown seq */
"0000" /* No extensions */
/* User data (ICMP packet), 96 - 12 = 84 octets */
"45000054daee40004001f7890a172a010a172a02080060d23f590071e3f8"
"4156000000007241010000000000101112131415161718191a1b1c1d1e1f"
"202122232425262728292a2b2c2d2e2f3031323334353637"
;
const char *u_to_ggsn =
"32" /* 0b001'1 0010: version 1, protocol GTP, with seq nr */
"ff" /* type 255: G-PDU */
"0058" /* length: 88 + 8 octets == 96 */
"00000567" /* unmapped User TEI */
"6d31" /* unmapped seq */
"0000"
"45000054daee40004001f7890a172a010a172a02080060d23f590071e3f8"
"4156000000007241010000000000101112131415161718191a1b1c1d1e1f"
"202122232425262728292a2b2c2d2e2f3031323334353637"
;
OSMO_ASSERT(msg_from_sgsn_u(&sgsn_sender,
&resolved_ggsn_addr,
u_from_sgsn,
u_to_ggsn));
/* Make sure the user plane messages have refreshed the TEI mapping
* timeouts: 21945 + 600 == 22545. Both timeouts refreshed: */
OSMO_ASSERT(tunnels_are(
"192.168.42.23 (TEI C 321=1 / U 123=2)"
" <-> 192.168.43.34 (TEI C 765=3 / U 567=4)"
" @22545\n"));
OSMO_ASSERT(clear_test_hub());
}
static struct log_info_cat gtphub_categories[] = {
[DGTPHUB] = {
@ -1480,6 +1580,7 @@ int main(int argc, char **argv)
test_reused_tei();
test_peer_restarted();
test_peer_restarted_reusing_tei();
test_sgsn_behind_nat();
printf("Done\n");
talloc_report_full(osmo_gtphub_ctx, stderr);

View File

@ -27,4 +27,8 @@ test_peer_restarted_reusing_tei
returning GGSN addr from imsi 240010123456789 ni internet: 192.168.43.34 port 2123
- __wrap_gtphub_resolve_ggsn_addr():
returning GGSN addr from imsi 240010123456789 ni internet: 192.168.43.34 port 2123
test_user_data
- __wrap_gtphub_resolve_ggsn_addr():
returning GGSN addr from imsi 240010123456789 ni internet: 192.168.43.34 port 2123
- user data starts
Done