gbproxy: Keep tlli_info after detach

Currently a tlli_info entry is deleted when the TLLI gets invalidated
by a Detach message.

This patch introduces the possibility to keep tlli_info entries in
the list. Those entries then have cleared TLLI fields, are marked as
de-registered, and can only be retrieved by a message containing an
IMSI or a P-TMSI.

The following VTY configuration commands are added to the gbproxy
node:
  - tlli-list keep-mode never : Don't keep the entries (default)
  - tlli-list keep-mode re-attach : Only keep them, when a Detach
    message with re-attach required has been received
  - tlli-list keep-mode identified : Only keep entries which are
    associated with an IMSI
  - tlli-list keep-mode always : Keep all entries

Note that at least one of max-length or max-age should be set when
this feature is used to limit the number of entries.

Sponsored-by: On-Waves ehf
This commit is contained in:
Jacob Erlbeck 2014-09-12 15:09:56 +02:00
parent cba4c0cc60
commit 7430da621a
7 changed files with 228 additions and 55 deletions

View File

@ -50,6 +50,13 @@ enum gbproxy_peer_ctr {
GBPROX_PEER_CTR_TLLI_CACHE_SIZE,
};
enum gbproxy_keep_mode {
GBPROX_KEEP_NEVER,
GBPROX_KEEP_REATTACH,
GBPROX_KEEP_IDENTIFIED,
GBPROX_KEEP_ALWAYS,
};
struct gbproxy_config {
/* parsed from config file */
uint16_t nsip_sgsn_nsei;
@ -77,6 +84,7 @@ struct gbproxy_config {
int acquire_imsi;
int route_to_sgsn2;
uint16_t nsip_sgsn2_nsei;
enum gbproxy_keep_mode keep_tlli_infos;
/* IMSI checking/matching */
int check_imsi;
@ -141,6 +149,8 @@ struct gbproxy_tlli_info {
struct llist_head stored_msgs;
int imsi_acq_retries;
int is_deregistered;
int enable_patching;
};

View File

@ -34,6 +34,7 @@ struct gprs_gb_parse_context {
/* General info */
const char *llc_msg_name;
int invalidate_tlli;
int await_reattach;
int need_decryption;
uint32_t tlli;
int pdu_type;

View File

@ -316,17 +316,28 @@ void gbproxy_touch_tlli(struct gbproxy_peer *peer,
gbproxy_attach_tlli_info(peer, now, tlli_info);
}
static void gbproxy_unregister_tlli(struct gbproxy_peer *peer, uint32_t tlli)
static void gbproxy_unregister_tlli(struct gbproxy_peer *peer,
struct gbproxy_tlli_info *tlli_info)
{
struct gbproxy_tlli_info *tlli_info;
if (!tlli_info)
return;
tlli_info = gbproxy_find_tlli(peer, tlli);
if (tlli_info) {
if (tlli_info->tlli.ptmsi == GSM_RESERVED_TMSI && !tlli_info->imsi_len) {
LOGP(DGPRS, LOGL_INFO,
"Removing TLLI %08x from list\n",
tlli);
"Removing TLLI %08x from list (P-TMSI or IMSI are not set)\n",
tlli_info->tlli.current);
gbproxy_delete_tlli(peer, tlli_info);
return;
}
tlli_info->tlli.current = 0;
tlli_info->tlli.assigned = 0;
tlli_info->sgsn_tlli.current = 0;
tlli_info->sgsn_tlli.assigned = 0;
tlli_info->is_deregistered = 1;
return;
}
int gbproxy_check_tlli(struct gbproxy_peer *peer,
@ -338,20 +349,44 @@ int gbproxy_check_tlli(struct gbproxy_peer *peer,
return tlli_info != NULL && tlli_info->enable_patching;
}
struct gbproxy_tlli_info *gbproxy_get_tlli_info_ul(
struct gbproxy_peer *peer,
struct gprs_gb_parse_context *parse_ctx)
{
struct gbproxy_tlli_info *tlli_info = NULL;
if (parse_ctx->tlli_enc)
tlli_info = gbproxy_find_tlli(peer, parse_ctx->tlli);
if (!tlli_info && parse_ctx->imsi)
tlli_info = gbproxy_find_tlli_by_imsi(
peer, parse_ctx->imsi, parse_ctx->imsi_len);
if (!tlli_info && parse_ctx->ptmsi_enc && !parse_ctx->old_raid_is_foreign) {
uint32_t bss_ptmsi;
if (!gprs_parse_mi_tmsi(parse_ctx->ptmsi_enc, GSM48_TMSI_LEN,
&bss_ptmsi))
LOGP(DGPRS, LOGL_ERROR,
"Failed to parse P-TMSI (TLLI is %08x)\n",
parse_ctx->tlli);
else
tlli_info = gbproxy_find_tlli_by_ptmsi(peer, bss_ptmsi);
}
if (tlli_info)
tlli_info->is_deregistered = 0;
return tlli_info;
}
struct gbproxy_tlli_info *gbproxy_update_tlli_state_ul(
struct gbproxy_peer *peer,
time_t now,
struct gprs_gb_parse_context *parse_ctx)
{
struct gbproxy_tlli_info *tlli_info = NULL;
struct gbproxy_tlli_info *tlli_info;
if (parse_ctx->tlli_enc) {
tlli_info = gbproxy_find_tlli(peer, parse_ctx->tlli);
if (!tlli_info && parse_ctx->imsi)
tlli_info = gbproxy_find_tlli_by_imsi(
peer, parse_ctx->imsi, parse_ctx->imsi_len);
}
tlli_info = gbproxy_get_tlli_info_ul(peer, parse_ctx);
if (parse_ctx->tlli_enc && parse_ctx->llc) {
uint32_t sgsn_tlli;
@ -366,6 +401,13 @@ struct gbproxy_tlli_info *gbproxy_update_tlli_state_ul(
parse_ctx->tlli);
tlli_info->sgsn_tlli.current = sgsn_tlli;
tlli_info->tlli.current = parse_ctx->tlli;;
} else if (!tlli_info->tlli.current) {
/* New TLLI (info found by IMSI or P-TMSI) */
tlli_info->tlli.current = parse_ctx->tlli;
tlli_info->sgsn_tlli.current =
gbproxy_make_sgsn_tlli(peer, tlli_info,
parse_ctx->tlli);
gbproxy_touch_tlli(peer, tlli_info, now);
} else {
sgsn_tlli = gbproxy_map_tlli(parse_ctx->tlli, tlli_info, 0);
if (!sgsn_tlli)
@ -512,8 +554,22 @@ void gbproxy_update_tlli_state_after(
time_t now,
struct gprs_gb_parse_context *parse_ctx)
{
if (parse_ctx->invalidate_tlli) {
gbproxy_unregister_tlli(peer, parse_ctx->tlli);
if (parse_ctx->invalidate_tlli && tlli_info) {
int keep_info =
peer->cfg->keep_tlli_infos == GBPROX_KEEP_ALWAYS ||
(peer->cfg->keep_tlli_infos == GBPROX_KEEP_REATTACH &&
parse_ctx->await_reattach) ||
(peer->cfg->keep_tlli_infos == GBPROX_KEEP_IDENTIFIED &&
tlli_info->imsi_len > 0);
if (keep_info) {
LOGP(DGPRS, LOGL_INFO, "Unregistering TLLI %08x\n",
tlli_info->tlli.current);
gbproxy_unregister_tlli(peer, tlli_info);
} else {
LOGP(DGPRS, LOGL_INFO, "Removing TLLI %08x from list\n",
tlli_info->tlli.current);
gbproxy_delete_tlli(peer, tlli_info);
}
} else if (parse_ctx->to_bss && parse_ctx->tlli_enc &&
parse_ctx->new_ptmsi_enc && tlli_info) {
/* A new PTMSI has been signaled in the message,

View File

@ -50,6 +50,14 @@ static struct cmd_node gbproxy_node = {
1,
};
static const struct value_string keep_modes[] = {
{GBPROX_KEEP_NEVER, "never"},
{GBPROX_KEEP_REATTACH, "re-attach"},
{GBPROX_KEEP_IDENTIFIED, "identified"},
{GBPROX_KEEP_ALWAYS, "always"},
{0, NULL}
};
static void gbprox_vty_print_peer(struct vty *vty, struct gbproxy_peer *peer)
{
struct gprs_ra_id raid;
@ -106,6 +114,10 @@ static int config_write_gbproxy(struct vty *vty)
if (g_cfg->tlli_max_len > 0)
vty_out(vty, " tlli-list max-length %d%s",
g_cfg->tlli_max_len, VTY_NEWLINE);
vty_out(vty, " tlli-list keep-mode %s%s",
get_value_string(keep_modes, g_cfg->keep_tlli_infos),
VTY_NEWLINE);
return CMD_SUCCESS;
}
@ -398,6 +410,22 @@ DEFUN(cfg_gbproxy_tlli_list_no_max_len,
return CMD_SUCCESS;
}
DEFUN(cfg_gbproxy_tlli_list_keep_mode,
cfg_gbproxy_tlli_list_keep_mode_cmd,
"tlli-list keep-mode (never|re-attach|identified|always)",
GBPROXY_TLLI_LIST_STR "How to keep entries for detached TLLIs\n"
"Discard entry immediately after detachment\n"
"Keep entry if a re-attachment has be requested\n"
"Keep entry if it associated with an IMSI\n"
"Don't discard entries after detachment\n")
{
int val = get_string_value(keep_modes, argv[0]);
OSMO_ASSERT(val >= GBPROX_KEEP_NEVER && val <= GBPROX_KEEP_ALWAYS);
g_cfg->keep_tlli_infos = val;
return CMD_SUCCESS;
}
DEFUN(show_gbproxy, show_gbproxy_cmd, "show gbproxy [stats]",
SHOW_STR "Display information about the Gb proxy\n" "Show statistics\n")
@ -654,6 +682,7 @@ int gbproxy_vty_init(void)
install_element(GBPROXY_NODE, &cfg_gbproxy_acquire_imsi_cmd);
install_element(GBPROXY_NODE, &cfg_gbproxy_tlli_list_max_age_cmd);
install_element(GBPROXY_NODE, &cfg_gbproxy_tlli_list_max_len_cmd);
install_element(GBPROXY_NODE, &cfg_gbproxy_tlli_list_keep_mode_cmd);
install_element(GBPROXY_NODE, &cfg_gbproxy_no_core_mcc_cmd);
install_element(GBPROXY_NODE, &cfg_gbproxy_no_core_mnc_cmd);
install_element(GBPROXY_NODE, &cfg_gbproxy_no_match_imsi_cmd);

View File

@ -224,6 +224,7 @@ static int gprs_gb_parse_gmm_detach_req(uint8_t *data, size_t data_len,
{
uint8_t *value;
size_t value_len;
int detach_type;
int power_off;
parse_ctx->llc_msg_name = "DETACH_REQ";
@ -234,9 +235,14 @@ static int gprs_gb_parse_gmm_detach_req(uint8_t *data, size_t data_len,
/* invalid */
return 0;
detach_type = *value & 0x07;
power_off = *value & 0x08 ? 1 : 0;
if (!parse_ctx->to_bss) {
if (parse_ctx->to_bss) {
/* Network originated */
if (detach_type == GPRS_DET_T_MT_REATT_REQ)
parse_ctx->await_reattach = 1;
} else {
/* Mobile originated */
if (power_off)
@ -651,6 +657,10 @@ void gprs_gb_log_parse_context(struct gprs_gb_parse_context *parse_ctx,
LOGP(DGPRS, LOGL_DEBUG, "%s invalidate", sep);
sep = ",";
}
if (parse_ctx->await_reattach) {
LOGP(DGPRS, LOGL_DEBUG, "%s re-attach", sep);
sep = ",";
}
LOGP(DGPRS, LOGL_DEBUG, "\n");
}

View File

@ -157,6 +157,9 @@ static int dump_peers(FILE *stream, int indent, time_t now,
if (tlli_info->imsi_acq_pending)
fprintf(stream, ", IMSI acquisition in progress");
if (tlli_info->is_deregistered)
fprintf(stream, ", DE-REGISTERED");
rc = fprintf(stream, "\n");
if (rc < 0)
return rc;
@ -2606,7 +2609,7 @@ static void test_gbproxy_keep_info()
const uint32_t foreign_tlli = 0xafe2b700;
const uint8_t imsi[] = {0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18};
struct gbproxy_tlli_info *tlli_info;
struct gbproxy_tlli_info *tlli_info, *tlli_info2;
struct gbproxy_peer *peer;
unsigned bss_nu = 0;
unsigned sgsn_nu = 0;
@ -2626,6 +2629,7 @@ static void test_gbproxy_keep_info()
gbcfg.core_apn_size = 0;
gbcfg.route_to_sgsn2 = 0;
gbcfg.nsip_sgsn2_nsei = 0xffff;
gbcfg.keep_tlli_infos = GBPROX_KEEP_ALWAYS;
configure_sgsn_peer(&sgsn_peer);
configure_bss_peers(bss_peer, ARRAY_SIZE(bss_peer));
@ -2661,6 +2665,8 @@ static void test_gbproxy_keep_info()
tlli_info = gbproxy_find_tlli(peer, foreign_tlli);
OSMO_ASSERT(tlli_info);
OSMO_ASSERT(tlli_info->imsi_len == 0);
OSMO_ASSERT(!tlli_info->is_deregistered);
OSMO_ASSERT(tlli_info->imsi_acq_pending);
send_llc_ul_ui(nsi, "IDENT RESPONSE", &bss_peer[0], 0x1002,
foreign_tlli, &rai_bss, cell_id,
@ -2669,6 +2675,11 @@ static void test_gbproxy_keep_info()
dump_peers(stdout, 0, 0, &gbcfg);
tlli_info = gbproxy_find_tlli(peer, foreign_tlli);
OSMO_ASSERT(tlli_info);
OSMO_ASSERT(tlli_info->imsi_len > 0);
OSMO_ASSERT(!tlli_info->imsi_acq_pending);
send_llc_dl_ui(nsi, "IDENT REQUEST", &sgsn_peer, 0x1002,
foreign_tlli, 0, NULL, 0,
GPRS_SAPI_GMM, sgsn_nu++,
@ -2730,8 +2741,10 @@ static void test_gbproxy_keep_info()
dump_peers(stdout, 0, 0, &gbcfg);
tlli_info = gbproxy_find_tlli(peer, local_tlli);
OSMO_ASSERT(tlli_info == NULL);
OSMO_ASSERT(!gbproxy_find_tlli(peer, local_tlli));
tlli_info = gbproxy_find_tlli_by_imsi(peer, imsi, sizeof(imsi));
OSMO_ASSERT(tlli_info);
OSMO_ASSERT(tlli_info->is_deregistered);
/* Re-Attach */
send_llc_ul_ui(nsi, "ATTACH REQUEST", &bss_peer[0], 0x1002,
@ -2741,6 +2754,14 @@ static void test_gbproxy_keep_info()
dump_peers(stdout, 0, 0, &gbcfg);
tlli_info2 = gbproxy_find_tlli_by_imsi(peer, imsi, sizeof(imsi));
tlli_info = gbproxy_find_tlli(peer, foreign_tlli);
OSMO_ASSERT(tlli_info);
OSMO_ASSERT(tlli_info == tlli_info2);
OSMO_ASSERT(tlli_info->imsi_len != 0);
OSMO_ASSERT(!tlli_info->is_deregistered);
OSMO_ASSERT(!tlli_info->imsi_acq_pending);
send_llc_dl_ui(nsi, "ATTACH ACCEPT", &sgsn_peer, 0x1002,
foreign_tlli, 1, imsi, sizeof(imsi),
GPRS_SAPI_GMM, sgsn_nu++,
@ -2774,6 +2795,9 @@ static void test_gbproxy_keep_info()
dump_peers(stdout, 0, 0, &gbcfg);
OSMO_ASSERT(!gbproxy_find_tlli(peer, local_tlli));
tlli_info = gbproxy_find_tlli_by_imsi(peer, imsi, sizeof(imsi));
OSMO_ASSERT(tlli_info);
OSMO_ASSERT(tlli_info->is_deregistered);
/* Re-Attach */
send_llc_ul_ui(nsi, "ATTACH REQUEST", &bss_peer[0], 0x1002,
@ -2783,6 +2807,14 @@ static void test_gbproxy_keep_info()
dump_peers(stdout, 0, 0, &gbcfg);
tlli_info2 = gbproxy_find_tlli_by_imsi(peer, imsi, sizeof(imsi));
tlli_info = gbproxy_find_tlli(peer, foreign_tlli);
OSMO_ASSERT(tlli_info);
OSMO_ASSERT(tlli_info == tlli_info2);
OSMO_ASSERT(tlli_info->imsi_len != 0);
OSMO_ASSERT(!tlli_info->is_deregistered);
OSMO_ASSERT(!tlli_info->imsi_acq_pending);
send_llc_dl_ui(nsi, "ATTACH ACCEPT", &sgsn_peer, 0x1002,
foreign_tlli, 1, imsi, sizeof(imsi),
GPRS_SAPI_GMM, sgsn_nu++,
@ -2816,6 +2848,9 @@ static void test_gbproxy_keep_info()
dump_peers(stdout, 0, 0, &gbcfg);
OSMO_ASSERT(!gbproxy_find_tlli(peer, local_tlli));
tlli_info = gbproxy_find_tlli_by_imsi(peer, imsi, sizeof(imsi));
OSMO_ASSERT(tlli_info);
OSMO_ASSERT(tlli_info->is_deregistered);
/* Re-Attach */
send_llc_ul_ui(nsi, "ATTACH REQUEST", &bss_peer[0], 0x1002,
@ -2825,6 +2860,14 @@ static void test_gbproxy_keep_info()
dump_peers(stdout, 0, 0, &gbcfg);
tlli_info2 = gbproxy_find_tlli_by_imsi(peer, imsi, sizeof(imsi));
tlli_info = gbproxy_find_tlli(peer, foreign_tlli);
OSMO_ASSERT(tlli_info);
OSMO_ASSERT(tlli_info == tlli_info2);
OSMO_ASSERT(tlli_info->imsi_len != 0);
OSMO_ASSERT(!tlli_info->is_deregistered);
OSMO_ASSERT(!tlli_info->imsi_acq_pending);
send_llc_dl_ui(nsi, "ATTACH ACCEPT", &sgsn_peer, 0x1002,
foreign_tlli, 1, imsi, sizeof(imsi),
GPRS_SAPI_GMM, sgsn_nu++,
@ -2852,6 +2895,10 @@ static void test_gbproxy_keep_info()
dump_peers(stdout, 0, 0, &gbcfg);
/* TODO: This should have de-registered the TLLI which it did not. Add
* assertions when this is fixed.
*/
/* Bad case: Re-Attach with wrong (initial) P-TMSI */
send_llc_ul_ui(nsi, "ATTACH REQUEST", &bss_peer[0], 0x1002,
foreign_tlli, &rai_bss, cell_id,
@ -2860,6 +2907,18 @@ static void test_gbproxy_keep_info()
dump_peers(stdout, 0, 0, &gbcfg);
tlli_info2 = gbproxy_find_tlli_by_imsi(peer, imsi, sizeof(imsi));
tlli_info = gbproxy_find_tlli(peer, foreign_tlli);
OSMO_ASSERT(tlli_info);
OSMO_ASSERT(tlli_info != tlli_info2);
OSMO_ASSERT(tlli_info->imsi_len == 0);
OSMO_ASSERT(!tlli_info->is_deregistered);
OSMO_ASSERT(tlli_info->imsi_acq_pending);
/* This wouldn't happen in reality, since the Attach Request hadn't
* been forwarded to the SGSN.
* TODO: Add the missing messages.
*/
send_llc_dl_ui(nsi, "ATTACH ACCEPT", &sgsn_peer, 0x1002,
foreign_tlli, 1, imsi, sizeof(imsi),
GPRS_SAPI_GMM, sgsn_nu++,
@ -2867,6 +2926,14 @@ static void test_gbproxy_keep_info()
dump_peers(stdout, 0, 0, &gbcfg);
tlli_info2 = gbproxy_find_tlli_by_imsi(peer, imsi, sizeof(imsi));
tlli_info = gbproxy_find_tlli(peer, foreign_tlli);
OSMO_ASSERT(tlli_info);
OSMO_ASSERT(tlli_info == tlli_info2);
OSMO_ASSERT(tlli_info->imsi_len >= 0);
OSMO_ASSERT(!tlli_info->is_deregistered);
OSMO_ASSERT(tlli_info->imsi_acq_pending);
send_llc_ul_ui(nsi, "ATTACH COMPLETE", &bss_peer[0], 0x1002,
local_tlli, &rai_bss, cell_id,
GPRS_SAPI_GMM, bss_nu++,
@ -2892,6 +2959,11 @@ static void test_gbproxy_keep_info()
dump_peers(stdout, 0, 0, &gbcfg);
/* TODO: There is one entry with this TLLI left (since there were 2
* before the detach precedure started. Add assertions when
* this is fixed.
*/
dump_global(stdout, 0);
gbprox_reset(&gbcfg);

View File

@ -4344,25 +4344,27 @@ result (DETACH ACC) = 71
Peers:
NSEI 4096, BVCI 4098, not blocked, RAI 112-332-16464-96
Attach Request count : 1
TLLI-Cache: 0
TLLI cache size : 1
TLLI-Cache: 1
TLLI 00000000, IMSI 12131415161718, AGE 0, DE-REGISTERED
PROCESSING ATTACH REQUEST from 0x01020304:1111
00 00 10 02 01 af e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 34 01 c0 15 08 01 02 f5 e0 21 08 02 05 f4 ef e2 b7 00 11 22 33 40 50 60 19 18 b3 43 2b 25 96 62 00 60 80 9a c2 c6 62 00 60 80 ba c8 c6 62 00 60 80 00 e6 71 c7
CALLBACK, event 0, msg length 75, bvci 0x1002
00 00 10 02 01 af e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 34 01 c0 15 08 01 02 f5 e0 21 08 02 05 f4 ef e2 b7 00 11 22 33 40 50 60 19 18 b3 43 2b 25 96 62 00 60 80 9a c2 c6 62 00 60 80 ba c8 c6 62 00 60 80 00 e6 71 c7
NS UNITDATA MESSAGE to BSS, BVCI 0x1002, msg length 24 (gprs_ns_sendmsg)
MESSAGE to BSS at 0x01020304:1111, msg length 28
00 00 10 02 00 af e2 b7 00 00 50 20 16 82 02 58 0e 00 09 41 c4 01 08 15 01 b7 f8 36
NS UNITDATA MESSAGE to SGSN, BVCI 0x1002, msg length 75 (gprs_ns_sendmsg)
MESSAGE to SGSN at 0x05060708:32000, msg length 79
00 00 10 02 01 af e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 34 01 c0 15 08 01 02 f5 e0 21 08 02 05 f4 ef e2 b7 00 11 22 33 40 50 60 19 18 b3 43 2b 25 96 62 00 60 80 9a c2 c6 62 00 60 80 ba c8 c6 62 00 60 80 00 e6 71 c7
result (ATTACH REQUEST) = 0
result (ATTACH REQUEST) = 79
Peers:
NSEI 4096, BVCI 4098, not blocked, RAI 112-332-16464-96
Attach Request count : 2
TLLI cache size : 1
TLLI-Cache: 1
TLLI afe2b700 -> afe2b700, IMSI (none), AGE 0, STORED 1, IMSI acquisition in progress
TLLI afe2b700 -> afe2b700, IMSI 12131415161718, AGE 0
PROCESSING ATTACH ACCEPT from 0x05060708:32000
00 00 10 02 00 af e2 b7 00 00 50 20 16 82 02 58 13 99 18 b3 43 2b 25 96 62 00 60 80 9a c2 c6 62 00 60 80 ba c8 c6 62 00 60 80 00 0a 82 08 02 0d 88 11 12 13 14 15 16 17 18 00 81 00 0e 9e 41 c0 11 08 02 01 49 04 21 63 54 40 50 60 19 cd d7 08 17 16 18 05 f4 ef e2 b7 00 3a 6d d4
@ -4380,17 +4382,13 @@ Peers:
Attach Request count : 2
TLLI cache size : 1
TLLI-Cache: 1
TLLI afe2b700/efe2b700 -> afe2b700/efe2b700, IMSI 12131415161718, AGE 0, STORED 1, IMSI acquisition in progress
TLLI afe2b700/efe2b700 -> afe2b700/efe2b700, IMSI 12131415161718, AGE 0
PROCESSING ATTACH COMPLETE from 0x01020304:1111
00 00 10 02 01 ef e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 08 01 c0 19 08 03 32 f1 bc
CALLBACK, event 0, msg length 31, bvci 0x1002
00 00 10 02 01 ef e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 08 01 c0 19 08 03 32 f1 bc
NS UNITDATA MESSAGE to SGSN, BVCI 0x1002, msg length 75 (gprs_ns_sendmsg)
MESSAGE to SGSN at 0x05060708:32000, msg length 79
00 00 10 02 01 af e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 34 01 c0 15 08 01 02 f5 e0 21 08 02 05 f4 ef e2 b7 00 11 22 33 40 50 60 19 18 b3 43 2b 25 96 62 00 60 80 9a c2 c6 62 00 60 80 ba c8 c6 62 00 60 80 00 e6 71 c7
NS UNITDATA MESSAGE to SGSN, BVCI 0x1002, msg length 31 (gprs_ns_sendmsg)
MESSAGE to SGSN at 0x05060708:32000, msg length 35
00 00 10 02 01 ef e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 08 01 c0 19 08 03 32 f1 bc
@ -4436,25 +4434,27 @@ result (DETACH ACC) = 35
Peers:
NSEI 4096, BVCI 4098, not blocked, RAI 112-332-16464-96
Attach Request count : 2
TLLI-Cache: 0
TLLI cache size : 1
TLLI-Cache: 1
TLLI 00000000, IMSI 12131415161718, AGE 0, DE-REGISTERED
PROCESSING ATTACH REQUEST from 0x01020304:1111
00 00 10 02 01 af e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 34 01 c0 21 08 01 02 f5 e0 21 08 02 05 f4 ef e2 b7 00 11 22 33 40 50 60 19 18 b3 43 2b 25 96 62 00 60 80 9a c2 c6 62 00 60 80 ba c8 c6 62 00 60 80 00 44 db cc
CALLBACK, event 0, msg length 75, bvci 0x1002
00 00 10 02 01 af e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 34 01 c0 21 08 01 02 f5 e0 21 08 02 05 f4 ef e2 b7 00 11 22 33 40 50 60 19 18 b3 43 2b 25 96 62 00 60 80 9a c2 c6 62 00 60 80 ba c8 c6 62 00 60 80 00 44 db cc
NS UNITDATA MESSAGE to BSS, BVCI 0x1002, msg length 24 (gprs_ns_sendmsg)
MESSAGE to BSS at 0x01020304:1111, msg length 28
00 00 10 02 00 af e2 b7 00 00 50 20 16 82 02 58 0e 00 09 41 c4 01 08 15 01 b7 f8 36
NS UNITDATA MESSAGE to SGSN, BVCI 0x1002, msg length 75 (gprs_ns_sendmsg)
MESSAGE to SGSN at 0x05060708:32000, msg length 79
00 00 10 02 01 af e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 34 01 c0 21 08 01 02 f5 e0 21 08 02 05 f4 ef e2 b7 00 11 22 33 40 50 60 19 18 b3 43 2b 25 96 62 00 60 80 9a c2 c6 62 00 60 80 ba c8 c6 62 00 60 80 00 44 db cc
result (ATTACH REQUEST) = 0
result (ATTACH REQUEST) = 79
Peers:
NSEI 4096, BVCI 4098, not blocked, RAI 112-332-16464-96
Attach Request count : 3
TLLI cache size : 1
TLLI-Cache: 1
TLLI afe2b700 -> afe2b700, IMSI (none), AGE 0, STORED 1, IMSI acquisition in progress
TLLI afe2b700 -> afe2b700, IMSI 12131415161718, AGE 0
PROCESSING ATTACH ACCEPT from 0x05060708:32000
00 00 10 02 00 af e2 b7 00 00 50 20 16 82 02 58 13 99 18 b3 43 2b 25 96 62 00 60 80 9a c2 c6 62 00 60 80 ba c8 c6 62 00 60 80 00 0a 82 08 02 0d 88 11 12 13 14 15 16 17 18 00 81 00 0e 9e 41 c0 19 08 02 01 49 04 21 63 54 40 50 60 19 cd d7 08 17 16 18 05 f4 ef e2 b7 00 27 3c 84
@ -4472,17 +4472,13 @@ Peers:
Attach Request count : 3
TLLI cache size : 1
TLLI-Cache: 1
TLLI afe2b700/efe2b700 -> afe2b700/efe2b700, IMSI 12131415161718, AGE 0, STORED 1, IMSI acquisition in progress
TLLI afe2b700/efe2b700 -> afe2b700/efe2b700, IMSI 12131415161718, AGE 0
PROCESSING ATTACH COMPLETE from 0x01020304:1111
00 00 10 02 01 ef e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 08 01 c0 25 08 03 9b c6 47
CALLBACK, event 0, msg length 31, bvci 0x1002
00 00 10 02 01 ef e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 08 01 c0 25 08 03 9b c6 47
NS UNITDATA MESSAGE to SGSN, BVCI 0x1002, msg length 75 (gprs_ns_sendmsg)
MESSAGE to SGSN at 0x05060708:32000, msg length 79
00 00 10 02 01 af e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 34 01 c0 21 08 01 02 f5 e0 21 08 02 05 f4 ef e2 b7 00 11 22 33 40 50 60 19 18 b3 43 2b 25 96 62 00 60 80 9a c2 c6 62 00 60 80 ba c8 c6 62 00 60 80 00 44 db cc
NS UNITDATA MESSAGE to SGSN, BVCI 0x1002, msg length 31 (gprs_ns_sendmsg)
MESSAGE to SGSN at 0x05060708:32000, msg length 35
00 00 10 02 01 ef e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 08 01 c0 25 08 03 9b c6 47
@ -4528,25 +4524,27 @@ result (DETACH ACC) = 35
Peers:
NSEI 4096, BVCI 4098, not blocked, RAI 112-332-16464-96
Attach Request count : 3
TLLI-Cache: 0
TLLI cache size : 1
TLLI-Cache: 1
TLLI 00000000, IMSI 12131415161718, AGE 0, DE-REGISTERED
PROCESSING ATTACH REQUEST from 0x01020304:1111
00 00 10 02 01 af e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 34 01 c0 2d 08 01 02 f5 e0 21 08 02 05 f4 ef e2 b7 00 11 22 33 40 50 60 19 18 b3 43 2b 25 96 62 00 60 80 9a c2 c6 62 00 60 80 ba c8 c6 62 00 60 80 00 14 f4 a3
CALLBACK, event 0, msg length 75, bvci 0x1002
00 00 10 02 01 af e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 34 01 c0 2d 08 01 02 f5 e0 21 08 02 05 f4 ef e2 b7 00 11 22 33 40 50 60 19 18 b3 43 2b 25 96 62 00 60 80 9a c2 c6 62 00 60 80 ba c8 c6 62 00 60 80 00 14 f4 a3
NS UNITDATA MESSAGE to BSS, BVCI 0x1002, msg length 24 (gprs_ns_sendmsg)
MESSAGE to BSS at 0x01020304:1111, msg length 28
00 00 10 02 00 af e2 b7 00 00 50 20 16 82 02 58 0e 00 09 41 c4 01 08 15 01 b7 f8 36
NS UNITDATA MESSAGE to SGSN, BVCI 0x1002, msg length 75 (gprs_ns_sendmsg)
MESSAGE to SGSN at 0x05060708:32000, msg length 79
00 00 10 02 01 af e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 34 01 c0 2d 08 01 02 f5 e0 21 08 02 05 f4 ef e2 b7 00 11 22 33 40 50 60 19 18 b3 43 2b 25 96 62 00 60 80 9a c2 c6 62 00 60 80 ba c8 c6 62 00 60 80 00 14 f4 a3
result (ATTACH REQUEST) = 0
result (ATTACH REQUEST) = 79
Peers:
NSEI 4096, BVCI 4098, not blocked, RAI 112-332-16464-96
Attach Request count : 4
TLLI cache size : 1
TLLI-Cache: 1
TLLI afe2b700 -> afe2b700, IMSI (none), AGE 0, STORED 1, IMSI acquisition in progress
TLLI afe2b700 -> afe2b700, IMSI 12131415161718, AGE 0
PROCESSING ATTACH ACCEPT from 0x05060708:32000
00 00 10 02 00 af e2 b7 00 00 50 20 16 82 02 58 13 99 18 b3 43 2b 25 96 62 00 60 80 9a c2 c6 62 00 60 80 ba c8 c6 62 00 60 80 00 0a 82 08 02 0d 88 11 12 13 14 15 16 17 18 00 81 00 0e 9e 41 c0 21 08 02 01 49 04 21 63 54 40 50 60 19 cd d7 08 17 16 18 05 f4 ef e2 b7 00 cf 80 6e
@ -4564,17 +4562,13 @@ Peers:
Attach Request count : 4
TLLI cache size : 1
TLLI-Cache: 1
TLLI afe2b700/efe2b700 -> afe2b700/efe2b700, IMSI 12131415161718, AGE 0, STORED 1, IMSI acquisition in progress
TLLI afe2b700/efe2b700 -> afe2b700/efe2b700, IMSI 12131415161718, AGE 0
PROCESSING ATTACH COMPLETE from 0x01020304:1111
00 00 10 02 01 ef e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 08 01 c0 31 08 03 fc 2b 11
CALLBACK, event 0, msg length 31, bvci 0x1002
00 00 10 02 01 ef e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 08 01 c0 31 08 03 fc 2b 11
NS UNITDATA MESSAGE to SGSN, BVCI 0x1002, msg length 75 (gprs_ns_sendmsg)
MESSAGE to SGSN at 0x05060708:32000, msg length 79
00 00 10 02 01 af e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 34 01 c0 2d 08 01 02 f5 e0 21 08 02 05 f4 ef e2 b7 00 11 22 33 40 50 60 19 18 b3 43 2b 25 96 62 00 60 80 9a c2 c6 62 00 60 80 ba c8 c6 62 00 60 80 00 14 f4 a3
NS UNITDATA MESSAGE to SGSN, BVCI 0x1002, msg length 31 (gprs_ns_sendmsg)
MESSAGE to SGSN at 0x05060708:32000, msg length 35
00 00 10 02 01 ef e2 b7 00 00 00 04 08 88 11 22 33 40 50 60 12 34 00 80 0e 00 08 01 c0 31 08 03 fc 2b 11
@ -4712,8 +4706,9 @@ result (DETACH ACC) = 35
Peers:
NSEI 4096, BVCI 4098, not blocked, RAI 112-332-16464-96
Attach Request count : 5
TLLI cache size : 1
TLLI-Cache: 1
TLLI cache size : 2
TLLI-Cache: 2
TLLI 00000000, IMSI 12131415161718, AGE 0, DE-REGISTERED
TLLI efe2b700 -> efe2b700, IMSI 12131415161718, AGE 0
Gbproxy global:
Test TLLI info expiry