summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2014-09-08 09:59:16 +0200
committerJacob Erlbeck <jerlbeck@sysmocom.de>2014-09-08 10:20:16 +0200
commit18a3787296b80396ee068ee7ca5a0803c86adcdd (patch)
tree40b2a4c9930e5f1acf0d28958c5ad03211a0c666
parent82add78f89fd8d21c647de5675e8e6304c8b8a4a (diff)
gbproxy: Check tlli_info when patching, fix APN patching
Currently the numeric TLLI or tlli_info's enable_patching flag is used to decide, whether a APN shall be patched or the secondary SGSN shall be used. Using the numeric TLLI imposes a problem, when TLLI/P-TMSI patching is used, since gbproxy_check_tlli uses the BSS side TLLI namespace when trying to get the tlli_info. This patch modifies the gbproxy_check_tlli() function to accept a tlli_info pointer instead of a numeric TLLI. The tlli_info is already available when the function is called. Since this a similar approach has been used by accessing the enable_patching flag directly, this commit unifies checking by always using this function instead of the flag outside of gb_proxy_tlli.c. This fixes the APN patching that doesn't work currently when P-TMSI patching is enabled. Sponsored-by: On-Waves ehf
-rw-r--r--openbsc/include/openbsc/gb_proxy.h4
-rw-r--r--openbsc/src/gprs/gb_proxy.c2
-rw-r--r--openbsc/src/gprs/gb_proxy_patch.c2
-rw-r--r--openbsc/src/gprs/gb_proxy_tlli.c10
-rw-r--r--openbsc/tests/gbproxy/gbproxy_test.ok15
5 files changed, 18 insertions, 15 deletions
diff --git a/openbsc/include/openbsc/gb_proxy.h b/openbsc/include/openbsc/gb_proxy.h
index 1c89cca60..9b894632b 100644
--- a/openbsc/include/openbsc/gb_proxy.h
+++ b/openbsc/include/openbsc/gb_proxy.h
@@ -177,7 +177,9 @@ void gbprox_reset(struct gbproxy_config *cfg);
/* TLLI state handling */
void gbproxy_delete_tllis(struct gbproxy_peer *peer);
-int gbproxy_check_tlli(struct gbproxy_peer *peer, uint32_t tlli);
+int gbproxy_check_tlli(
+ struct gbproxy_peer *peer,
+ struct gbproxy_tlli_info *tlli_info);
struct gbproxy_tlli_info *gbprox_find_tlli_by_ptmsi(
struct gbproxy_peer *peer,
uint32_t ptmsi);
diff --git a/openbsc/src/gprs/gb_proxy.c b/openbsc/src/gprs/gb_proxy.c
index 2026d1a03..e77d52792 100644
--- a/openbsc/src/gprs/gb_proxy.c
+++ b/openbsc/src/gprs/gb_proxy.c
@@ -330,7 +330,7 @@ static int gbprox_process_bssgp_ul(struct gbproxy_config *cfg,
tlli_info = gbproxy_update_tlli_state_ul(peer, now, &parse_ctx);
- if (tlli_info && tlli_info->enable_patching && cfg->route_to_sgsn2) {
+ if (tlli_info && cfg->route_to_sgsn2 && gbproxy_check_tlli(peer, tlli_info)) {
sgsn_nsei = cfg->nsip_sgsn2_nsei;
send_msg_directly = 1;
}
diff --git a/openbsc/src/gprs/gb_proxy_patch.c b/openbsc/src/gprs/gb_proxy_patch.c
index 32e844eca..c1b88d99e 100644
--- a/openbsc/src/gprs/gb_proxy_patch.c
+++ b/openbsc/src/gprs/gb_proxy_patch.c
@@ -278,7 +278,7 @@ int gbproxy_patch_llc(struct msgb *msg, uint8_t *llc, size_t llc_len,
if (parse_ctx->apn_ie &&
peer->cfg->core_apn &&
!parse_ctx->to_bss &&
- gbproxy_check_tlli(peer, parse_ctx->tlli)) {
+ gbproxy_check_tlli(peer, tlli_info)) {
size_t new_len;
gbproxy_patch_apn_ie(msg,
parse_ctx->apn_ie, parse_ctx->apn_ie_len,
diff --git a/openbsc/src/gprs/gb_proxy_tlli.c b/openbsc/src/gprs/gb_proxy_tlli.c
index 22585ab5e..2074308cf 100644
--- a/openbsc/src/gprs/gb_proxy_tlli.c
+++ b/openbsc/src/gprs/gb_proxy_tlli.c
@@ -369,18 +369,12 @@ static void gbproxy_unregister_tlli(struct gbproxy_peer *peer, uint32_t tlli)
}
}
-int gbproxy_check_tlli(struct gbproxy_peer *peer, uint32_t tlli)
+int gbproxy_check_tlli(struct gbproxy_peer *peer,
+ struct gbproxy_tlli_info *tlli_info)
{
- struct gbproxy_tlli_info *tlli_info;
-
- LOGP(DGPRS, LOGL_INFO, "Checking TLLI %08x, class: %d\n",
- tlli, gprs_tlli_type(tlli));
-
if (!peer->cfg->check_imsi)
return 1;
- tlli_info = gbproxy_find_tlli(peer, tlli);
-
return tlli_info != NULL && tlli_info->enable_patching;
}
diff --git a/openbsc/tests/gbproxy/gbproxy_test.ok b/openbsc/tests/gbproxy/gbproxy_test.ok
index 351e0ee78..fc767a4ea 100644
--- a/openbsc/tests/gbproxy/gbproxy_test.ok
+++ b/openbsc/tests/gbproxy/gbproxy_test.ok
@@ -2136,16 +2136,17 @@ PROCESSING ACT PDP CTX REQ (REPLACE APN) from 0x01020304:1111
CALLBACK, event 0, msg length 76, bvci 0x1002
00 00 10 02 01 c0 0f 73 04 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 35 01 c0 0d 0a 41 05 03 0c 00 00 1f 10 00 00 00 00 00 00 00 00 02 01 21 28 03 02 61 62 27 14 80 80 21 10 01 00 00 10 81 06 00 00 00 00 83 06 00 00 00 00 5a ff 02
-NS UNITDATA MESSAGE to SGSN, BVCI 0x1002, msg length 76 (gprs_ns_sendmsg)
-MESSAGE to SGSN at 0x05060708:32000, msg length 80
-00 00 10 02 01 ef e2 b7 00 00 00 04 08 88 21 63 54 40 50 60 12 34 00 80 0e 00 35 01 c0 0d 0a 41 05 03 0c 00 00 1f 10 00 00 00 00 00 00 00 00 02 01 21 28 03 02 61 62 27 14 80 80 21 10 01 00 00 10 81 06 00 00 00 00 83 06 00 00 00 00 5a ff 02
+NS UNITDATA MESSAGE to SGSN, BVCI 0x1002, msg length 81 (gprs_ns_sendmsg)
+MESSAGE to SGSN at 0x05060708:32000, msg length 85
+00 00 10 02 01 ef e2 b7 00 00 00 04 08 88 21 63 54 40 50 60 12 34 00 80 0e 00 3a 01 c0 0d 0a 41 05 03 0c 00 00 1f 10 00 00 00 00 00 00 00 00 02 01 21 28 08 03 66 6f 6f 03 62 61 72 27 14 80 80 21 10 01 00 00 10 81 06 00 00 00 00 83 06 00 00 00 00 24 9d 75
-result (ACT PDP CTX REQ (REPLACE APN)) = 80
+result (ACT PDP CTX REQ (REPLACE APN)) = 85
Peers:
NSEI 4096, BVCI 4098, not blocked, RAI 112-332-16464-96
RAID patched (BSS ): 5
RAID patched (SGSN): 1
+ APN patched : 1
TLLI patched (BSS ): 4
TLLI patched (SGSN): 3
P-TMSI patched (SGSN): 1
@@ -2205,6 +2206,7 @@ Peers:
NSEI 4096, BVCI 4098, not blocked, RAI 112-332-16464-96
RAID patched (BSS ): 7
RAID patched (SGSN): 1
+ APN patched : 1
TLLI patched (BSS ): 6
TLLI patched (SGSN): 5
P-TMSI patched (SGSN): 1
@@ -2228,6 +2230,7 @@ Peers:
NSEI 4096, BVCI 4098, not blocked, RAI 112-332-16464-96
RAID patched (BSS ): 7
RAID patched (SGSN): 1
+ APN patched : 1
TLLI patched (BSS ): 7
TLLI patched (SGSN): 5
P-TMSI patched (SGSN): 1
@@ -2251,6 +2254,7 @@ Peers:
NSEI 4096, BVCI 4098, not blocked, RAI 112-332-16464-96
RAID patched (BSS ): 8
RAID patched (SGSN): 1
+ APN patched : 1
TLLI patched (BSS ): 8
TLLI patched (SGSN): 5
P-TMSI patched (SGSN): 1
@@ -2274,6 +2278,7 @@ Peers:
NSEI 4096, BVCI 4098, not blocked, RAI 112-332-16464-96
RAID patched (BSS ): 8
RAID patched (SGSN): 2
+ APN patched : 1
TLLI patched (BSS ): 8
TLLI patched (SGSN): 6
P-TMSI patched (SGSN): 1
@@ -2340,6 +2345,7 @@ Peers:
NSEI 4096, BVCI 4098, not blocked, RAI 112-332-16464-96
RAID patched (BSS ): 9
RAID patched (SGSN): 3
+ APN patched : 1
TLLI patched (BSS ): 10
TLLI patched (SGSN): 7
P-TMSI patched (SGSN): 1
@@ -2363,6 +2369,7 @@ Peers:
NSEI 4096, BVCI 4098, not blocked, RAI 112-332-16464-96
RAID patched (BSS ): 9
RAID patched (SGSN): 3
+ APN patched : 1
TLLI patched (BSS ): 10
TLLI patched (SGSN): 8
P-TMSI patched (SGSN): 1