fix paging: add timeout to discard unsuccessful paging
Currently, if there is no reply from the BSS / RNC, a subscriber will remain as "already paged" forever, and is never going to be paged again. Even on IMSI Detach, the pending request will keep a ref count on the vlr_subscr. Add a paging timeout, as gsm_network->paging_timeout and in the VTY on the 'msc' node as 'paging timeout (default|<1-65535>'. (There is a 'network' / 'T3113' in OsmoBSC, but to not confuse the two, give this a different name.) Add test_ms_timeout_paging() test to verify the timeout works. I hit this while testing Paging across multiple hNodeB, when a UE lost connection to the hNodeB. I noticed that no matter how long I wait, no Paging is sent out anymore, and found this embarrassing issue. Good grief... The choice of 10 seconds is taken from https://osmocom.org/issues/2756 Change-Id: I2db6f1e2ad341cf9c2cc7a21ec2fca0bae5b2db5
This commit is contained in:
parent
c1d69256f6
commit
2ff5bcdc38
|
@ -344,6 +344,7 @@ enum gsm_auth_policy {
|
|||
GSM_AUTH_POLICY_REGEXP, /* accept IMSIs matching given regexp */
|
||||
};
|
||||
|
||||
#define MSC_PAGING_RESPONSE_TIMER_DEFAULT 10
|
||||
|
||||
struct gsm_tz {
|
||||
int override; /* if 0, use system's time zone instead. */
|
||||
|
@ -408,6 +409,7 @@ struct gsm_network {
|
|||
unsigned int num_bts;
|
||||
struct llist_head bts_list;
|
||||
|
||||
unsigned int paging_response_timer;
|
||||
|
||||
/* timer to expire old location updates */
|
||||
struct osmo_timer_list subscr_expire_timer;
|
||||
|
|
|
@ -157,6 +157,7 @@ struct vlr_subscr {
|
|||
struct {
|
||||
/* pending requests */
|
||||
bool is_paging;
|
||||
struct osmo_timer_list paging_response_timer;
|
||||
/* list of struct subscr_request */
|
||||
struct llist_head requests;
|
||||
uint8_t lac;
|
||||
|
|
|
@ -60,6 +60,8 @@ struct gsm_network *gsm_network_init(void *ctx,
|
|||
/* Use 30 min periodic update interval as sane default */
|
||||
net->t3212 = 5;
|
||||
|
||||
net->paging_response_timer = MSC_PAGING_RESPONSE_TIMER_DEFAULT;
|
||||
|
||||
INIT_LLIST_HEAD(&net->trans_list);
|
||||
INIT_LLIST_HEAD(&net->upqueue);
|
||||
INIT_LLIST_HEAD(&net->subscr_conns);
|
||||
|
|
|
@ -76,7 +76,10 @@ int subscr_paging_dispatch(unsigned int hooknum, unsigned int event,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (event == GSM_PAGING_SUCCEEDED)
|
||||
osmo_timer_del(&vsub->cs.paging_response_timer);
|
||||
|
||||
if (event == GSM_PAGING_SUCCEEDED
|
||||
|| event == GSM_PAGING_EXPIRED)
|
||||
msc_stop_paging(vsub);
|
||||
|
||||
/* Inform parts of the system we don't know */
|
||||
|
@ -126,6 +129,12 @@ int msc_paging_request(struct vlr_subscr *vsub)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
static void paging_response_timer_cb(void *data)
|
||||
{
|
||||
struct vlr_subscr *vsub = data;
|
||||
subscr_paging_dispatch(GSM_HOOK_RR_PAGING, GSM_PAGING_EXPIRED, NULL, NULL, vsub);
|
||||
}
|
||||
|
||||
/*! \brief Start a paging request for vsub, call cbfn(param) when done.
|
||||
* \param vsub subscriber to page.
|
||||
* \param cbfn function to call when the conn is established.
|
||||
|
@ -138,6 +147,7 @@ struct subscr_request *subscr_request_conn(struct vlr_subscr *vsub,
|
|||
{
|
||||
int rc;
|
||||
struct subscr_request *request;
|
||||
struct gsm_network *net = vsub->vlr->user_ctx;
|
||||
|
||||
/* Start paging.. we know it is async so we can do it before */
|
||||
if (!vsub->cs.is_paging) {
|
||||
|
@ -152,6 +162,8 @@ struct subscr_request *subscr_request_conn(struct vlr_subscr *vsub,
|
|||
/* reduced on the first paging callback */
|
||||
vlr_subscr_get(vsub);
|
||||
vsub->cs.is_paging = true;
|
||||
osmo_timer_setup(&vsub->cs.paging_response_timer, paging_response_timer_cb, vsub);
|
||||
osmo_timer_schedule(&vsub->cs.paging_response_timer, net->paging_response_timer, 0);
|
||||
} else {
|
||||
LOGP(DMM, LOGL_DEBUG, "Subscriber %s already paged.\n",
|
||||
vlr_subscr_name(vsub));
|
||||
|
|
|
@ -109,6 +109,22 @@ DEFUN(cfg_msc_auth_tuple_reuse_on_error, cfg_msc_auth_tuple_reuse_on_error_cmd,
|
|||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN(cfg_msc_paging_response_timer, cfg_msc_paging_response_timer_cmd,
|
||||
"paging response-timer (default|<1-65535>)",
|
||||
"Configure Paging\n"
|
||||
"Set Paging timeout, the minimum time to pass between (unsuccessful) Pagings sent towards"
|
||||
" BSS or RNC\n"
|
||||
"Set to default timeout (" OSMO_STRINGIFY_VAL(MSC_PAGING_RESPONSE_TIMER_DEFAULT) " seconds)\n"
|
||||
"Set paging timeout in seconds\n")
|
||||
{
|
||||
struct gsm_network *gsmnet = gsmnet_from_vty(vty);
|
||||
if (!strcmp(argv[1], "default"))
|
||||
gsmnet->paging_response_timer = MSC_PAGING_RESPONSE_TIMER_DEFAULT;
|
||||
else
|
||||
gsmnet->paging_response_timer = atoi(argv[0]);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
static int config_write_msc(struct vty *vty)
|
||||
{
|
||||
struct gsm_network *gsmnet = gsmnet_from_vty(vty);
|
||||
|
@ -130,6 +146,9 @@ static int config_write_msc(struct vty *vty)
|
|||
vty_out(vty, " auth-tuple-reuse-on-error 1%s",
|
||||
VTY_NEWLINE);
|
||||
|
||||
if (gsmnet->paging_response_timer != MSC_PAGING_RESPONSE_TIMER_DEFAULT)
|
||||
vty_out(vty, " paging response-timer %u%s", gsmnet->paging_response_timer, VTY_NEWLINE);
|
||||
|
||||
mgcp_client_config_write(vty, " ");
|
||||
#ifdef BUILD_IU
|
||||
ranap_iu_vty_config_write(vty, " ");
|
||||
|
@ -186,6 +205,7 @@ void msc_vty_init(struct gsm_network *msc_network)
|
|||
install_element(MSC_NODE, &cfg_msc_auth_tuple_reuse_on_error_cmd);
|
||||
install_element(MSC_NODE, &cfg_msc_cs7_instance_a_cmd);
|
||||
install_element(MSC_NODE, &cfg_msc_cs7_instance_iu_cmd);
|
||||
install_element(MSC_NODE, &cfg_msc_paging_response_timer_cmd);
|
||||
|
||||
mgcp_client_vty_init(msc_network, MSC_NODE, &msc_network->mgw.conf);
|
||||
#ifdef BUILD_IU
|
||||
|
|
|
@ -182,8 +182,101 @@ void test_ms_timeout_cm_auth_resp()
|
|||
comment_end();
|
||||
}
|
||||
|
||||
void test_ms_timeout_paging()
|
||||
{
|
||||
struct vlr_subscr *vsub;
|
||||
const char *imsi = "901700000004620";
|
||||
|
||||
rx_from_ran = RAN_GERAN_A;
|
||||
|
||||
comment_start();
|
||||
|
||||
fake_time_start();
|
||||
|
||||
btw("Location Update request causes a GSUP LU request to HLR");
|
||||
lu_result_sent = RES_NONE;
|
||||
gsup_expect_tx("04010809710000004026f0");
|
||||
ms_sends_msg("050802008168000130089910070000006402");
|
||||
OSMO_ASSERT(gsup_tx_confirmed);
|
||||
VERBOSE_ASSERT(lu_result_sent, == RES_NONE, "%d");
|
||||
|
||||
btw("HLR sends _INSERT_DATA_REQUEST, VLR responds with _INSERT_DATA_RESULT");
|
||||
gsup_rx("10010809710000004026f00804036470f1",
|
||||
"12010809710000004026f0");
|
||||
VERBOSE_ASSERT(lu_result_sent, == RES_NONE, "%d");
|
||||
|
||||
btw("HLR also sends GSUP _UPDATE_LOCATION_RESULT");
|
||||
expect_bssap_clear();
|
||||
gsup_rx("06010809710000004026f0", NULL);
|
||||
|
||||
btw("LU was successful, and the conn has already been closed");
|
||||
VERBOSE_ASSERT(lu_result_sent, == RES_ACCEPT, "%d");
|
||||
VERBOSE_ASSERT(bssap_clear_sent, == true, "%d");
|
||||
EXPECT_CONN_COUNT(0);
|
||||
|
||||
BTW("an SMS is sent, MS is paged");
|
||||
paging_expect_imsi(imsi);
|
||||
paging_sent = false;
|
||||
vsub = vlr_subscr_find_by_imsi(net->vlr, imsi);
|
||||
OSMO_ASSERT(vsub);
|
||||
VERBOSE_ASSERT(llist_count(&vsub->cs.requests), == 0, "%d");
|
||||
|
||||
send_sms(vsub, vsub,
|
||||
"Privacy in residential applications is a desirable"
|
||||
" marketing option.");
|
||||
|
||||
VERBOSE_ASSERT(llist_count(&vsub->cs.requests), == 1, "%d");
|
||||
vlr_subscr_put(vsub);
|
||||
vsub = NULL;
|
||||
VERBOSE_ASSERT(paging_sent, == true, "%d");
|
||||
VERBOSE_ASSERT(paging_stopped, == false, "%d");
|
||||
|
||||
btw("time passes and no paging result is received");
|
||||
|
||||
fake_time_passes(MSC_PAGING_RESPONSE_TIMER_DEFAULT - 1, 0);
|
||||
|
||||
btw("the paging timeout has not yet expired");
|
||||
VERBOSE_ASSERT(paging_stopped, == false, "%d");
|
||||
vsub = vlr_subscr_find_by_imsi(net->vlr, imsi);
|
||||
OSMO_ASSERT(vsub);
|
||||
VERBOSE_ASSERT(vsub->cs.is_paging, == true, "%d");
|
||||
btw("another request is added to the list but does not cause another paging");
|
||||
paging_sent = false;
|
||||
paging_expect_imsi(NULL);
|
||||
send_sms(vsub, vsub,
|
||||
"One paging ought to be enough for anyone.");
|
||||
VERBOSE_ASSERT(llist_count(&vsub->cs.requests), == 2, "%d");
|
||||
vlr_subscr_put(vsub);
|
||||
vsub = NULL;
|
||||
VERBOSE_ASSERT(paging_sent, == false, "%d");
|
||||
|
||||
btw("the paging timeout expires, the paging as well as the requests are canceled");
|
||||
fake_time_passes(2, 0);
|
||||
VERBOSE_ASSERT(paging_stopped, == true, "%d");
|
||||
|
||||
vsub = vlr_subscr_find_by_imsi(net->vlr, imsi);
|
||||
OSMO_ASSERT(vsub);
|
||||
VERBOSE_ASSERT(vsub->cs.is_paging, == false, "%d");
|
||||
VERBOSE_ASSERT(llist_count(&vsub->cs.requests), == 0, "%d");
|
||||
vlr_subscr_put(vsub);
|
||||
vsub = NULL;
|
||||
|
||||
BTW("subscriber detaches");
|
||||
expect_bssap_clear();
|
||||
ms_sends_msg("050130089910070000006402");
|
||||
VERBOSE_ASSERT(bssap_clear_sent, == true, "%d");
|
||||
|
||||
vsub = vlr_subscr_find_by_imsi(net->vlr, imsi);
|
||||
OSMO_ASSERT(!vsub);
|
||||
|
||||
EXPECT_CONN_COUNT(0);
|
||||
clear_vlr();
|
||||
comment_end();
|
||||
}
|
||||
|
||||
msc_vlr_test_func_t msc_vlr_tests[] = {
|
||||
test_ms_timeout_lu_auth_resp,
|
||||
test_ms_timeout_cm_auth_resp,
|
||||
test_ms_timeout_paging,
|
||||
NULL
|
||||
};
|
||||
|
|
|
@ -337,6 +337,173 @@ DREF freeing VLR subscr MSISDN:46071
|
|||
full talloc report on 'msgb' (total 0 bytes in 1 blocks)
|
||||
talloc_total_blocks(tall_bsc_ctx) == 9
|
||||
|
||||
===== test_ms_timeout_paging
|
||||
- Total time passed: 0.000000 s
|
||||
- Location Update request causes a GSUP LU request to HLR
|
||||
MSC <--RAN_GERAN_A-- MS: GSM48_MT_MM_LOC_UPD_REQUEST
|
||||
new conn
|
||||
DREF unknown: MSC conn use + compl_l3 == 1 (0x1)
|
||||
DRLL Dispatching 04.08 message GSM48_MT_MM_LOC_UPD_REQUEST (0x5:0x8)
|
||||
DREF unknown: MSC conn use + fsm == 2 (0x5)
|
||||
DMM Subscr_Conn(901700000004620){SUBSCR_CONN_S_INIT}: Allocated
|
||||
DMM Subscr_Conn(901700000004620){SUBSCR_CONN_S_INIT}: Received Event SUBSCR_CONN_E_START
|
||||
DMM Subscr_Conn(901700000004620){SUBSCR_CONN_S_INIT}: state_chg to SUBSCR_CONN_S_NEW
|
||||
DMM LOCATION UPDATING REQUEST: MI(IMSI)=901700000004620 type=IMSI ATTACH
|
||||
DMM LU/new-LAC: 1/23
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_IDLE}: Allocated
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_IDLE}: is child of Subscr_Conn(901700000004620)
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_IDLE}: rev=GSM net=GERAN (no Auth)
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_IDLE}: Received Event VLR_ULA_E_UPDATE_LA
|
||||
DREF VLR subscr unknown usage increases to: 1
|
||||
DVLR set IMSI on subscriber; IMSI=901700000004620 id=901700000004620
|
||||
DVLR New subscr, IMSI: 901700000004620
|
||||
DREF VLR subscr IMSI:901700000004620 usage increases to: 2
|
||||
DREF VLR subscr IMSI:901700000004620 usage decreases to: 1
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_IDLE}: vlr_loc_upd_node1()
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_IDLE}: vlr_loc_upd_post_auth()
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_IDLE}: vlr_loc_upd_post_ciph()
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_IDLE}: vlr_loc_upd_node_4()
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_IDLE}: state_chg to VLR_ULA_S_WAIT_HLR_UPD
|
||||
DVLR upd_hlr_vlr_fsm(901700000004620){UPD_HLR_VLR_S_INIT}: Allocated
|
||||
DVLR upd_hlr_vlr_fsm(901700000004620){UPD_HLR_VLR_S_INIT}: is child of vlr_lu_fsm(901700000004620)
|
||||
DVLR upd_hlr_vlr_fsm(901700000004620){UPD_HLR_VLR_S_INIT}: Received Event UPD_HLR_VLR_E_START
|
||||
DVLR GSUP tx: 04010809710000004026f0
|
||||
GSUP --> HLR: OSMO_GSUP_MSGT_UPDATE_LOCATION_REQUEST: 04010809710000004026f0
|
||||
DVLR upd_hlr_vlr_fsm(901700000004620){UPD_HLR_VLR_S_INIT}: state_chg to UPD_HLR_VLR_S_WAIT_FOR_DATA
|
||||
DMM IMSI:901700000004620: bump: conn still being established (SUBSCR_CONN_S_NEW)
|
||||
DREF IMSI:901700000004620: MSC conn use - compl_l3 == 1 (0x4)
|
||||
lu_result_sent == 0
|
||||
- HLR sends _INSERT_DATA_REQUEST, VLR responds with _INSERT_DATA_RESULT
|
||||
<-- GSUP rx OSMO_GSUP_MSGT_INSERT_DATA_REQUEST: 10010809710000004026f00804036470f1
|
||||
DVLR GSUP rx 17: 10010809710000004026f00804036470f1
|
||||
DREF VLR subscr IMSI:901700000004620 usage increases to: 2
|
||||
DVLR IMSI:901700000004620 has MSISDN:46071
|
||||
DVLR GSUP tx: 12010809710000004026f0
|
||||
GSUP --> HLR: OSMO_GSUP_MSGT_INSERT_DATA_RESULT: 12010809710000004026f0
|
||||
DREF VLR subscr MSISDN:46071 usage decreases to: 1
|
||||
<-- GSUP rx OSMO_GSUP_MSGT_INSERT_DATA_REQUEST: vlr_gsupc_read_cb() returns 0
|
||||
lu_result_sent == 0
|
||||
- HLR also sends GSUP _UPDATE_LOCATION_RESULT
|
||||
<-- GSUP rx OSMO_GSUP_MSGT_UPDATE_LOCATION_RESULT: 06010809710000004026f0
|
||||
DVLR GSUP rx 11: 06010809710000004026f0
|
||||
DREF VLR subscr MSISDN:46071 usage increases to: 2
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_WAIT_HLR_UPD}: Received Event VLR_ULA_E_HLR_LU_RES
|
||||
DVLR upd_hlr_vlr_fsm(901700000004620){UPD_HLR_VLR_S_WAIT_FOR_DATA}: Received Event UPD_HLR_VLR_E_UPD_LOC_ACK
|
||||
DVLR upd_hlr_vlr_fsm(901700000004620){UPD_HLR_VLR_S_WAIT_FOR_DATA}: state_chg to UPD_HLR_VLR_S_DONE
|
||||
DVLR upd_hlr_vlr_fsm(901700000004620){UPD_HLR_VLR_S_DONE}: Terminating (cause = OSMO_FSM_TERM_REGULAR)
|
||||
DVLR upd_hlr_vlr_fsm(901700000004620){UPD_HLR_VLR_S_DONE}: Removing from parent vlr_lu_fsm(901700000004620)
|
||||
DVLR upd_hlr_vlr_fsm(901700000004620){UPD_HLR_VLR_S_DONE}: Freeing instance
|
||||
DVLR upd_hlr_vlr_fsm(901700000004620){UPD_HLR_VLR_S_DONE}: Deallocated
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_WAIT_HLR_UPD}: Received Event VLR_ULA_E_UPD_HLR_COMPL
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_WAIT_HLR_UPD}: state_chg to VLR_ULA_S_WAIT_LU_COMPL
|
||||
DVLR lu_compl_vlr_fsm(901700000004620){LU_COMPL_VLR_S_INIT}: Allocated
|
||||
DVLR lu_compl_vlr_fsm(901700000004620){LU_COMPL_VLR_S_INIT}: is child of vlr_lu_fsm(901700000004620)
|
||||
DVLR lu_compl_vlr_fsm(901700000004620){LU_COMPL_VLR_S_INIT}: Received Event LU_COMPL_VLR_E_START
|
||||
DVLR lu_compl_vlr_fsm(901700000004620){LU_COMPL_VLR_S_INIT}: state_chg to LU_COMPL_VLR_S_WAIT_SUB_PRES
|
||||
DVLR sub_pres_vlr_fsm(901700000004620){SUB_PRES_VLR_S_INIT}: Allocated
|
||||
DVLR sub_pres_vlr_fsm(901700000004620){SUB_PRES_VLR_S_INIT}: is child of lu_compl_vlr_fsm(901700000004620)
|
||||
DVLR sub_pres_vlr_fsm(901700000004620){SUB_PRES_VLR_S_INIT}: Received Event SUB_PRES_VLR_E_START
|
||||
DVLR sub_pres_vlr_fsm(901700000004620){SUB_PRES_VLR_S_INIT}: state_chg to SUB_PRES_VLR_S_DONE
|
||||
DVLR sub_pres_vlr_fsm(901700000004620){SUB_PRES_VLR_S_DONE}: Terminating (cause = OSMO_FSM_TERM_REGULAR)
|
||||
DVLR sub_pres_vlr_fsm(901700000004620){SUB_PRES_VLR_S_DONE}: Removing from parent lu_compl_vlr_fsm(901700000004620)
|
||||
DVLR sub_pres_vlr_fsm(901700000004620){SUB_PRES_VLR_S_DONE}: Freeing instance
|
||||
DVLR sub_pres_vlr_fsm(901700000004620){SUB_PRES_VLR_S_DONE}: Deallocated
|
||||
DVLR lu_compl_vlr_fsm(901700000004620){LU_COMPL_VLR_S_WAIT_SUB_PRES}: Received Event LU_COMPL_VLR_E_SUB_PRES_COMPL
|
||||
- sending LU Accept for MSISDN:46071
|
||||
DREF VLR subscr MSISDN:46071 usage increases to: 3
|
||||
DVLR lu_compl_vlr_fsm(901700000004620){LU_COMPL_VLR_S_WAIT_SUB_PRES}: state_chg to LU_COMPL_VLR_S_DONE
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_LU_COMPL_SUCCESS
|
||||
DVLR lu_compl_vlr_fsm(901700000004620){LU_COMPL_VLR_S_DONE}: Terminating (cause = OSMO_FSM_TERM_PARENT)
|
||||
DVLR lu_compl_vlr_fsm(901700000004620){LU_COMPL_VLR_S_DONE}: Removing from parent vlr_lu_fsm(901700000004620)
|
||||
DVLR lu_compl_vlr_fsm(901700000004620){LU_COMPL_VLR_S_DONE}: Freeing instance
|
||||
DVLR lu_compl_vlr_fsm(901700000004620){LU_COMPL_VLR_S_DONE}: Deallocated
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: state_chg to VLR_ULA_S_DONE
|
||||
DMM Subscr_Conn(901700000004620){SUBSCR_CONN_S_NEW}: Received Event SUBSCR_CONN_E_ACCEPTED
|
||||
DMM Subscr_Conn(901700000004620){SUBSCR_CONN_S_NEW}: SUBSCR_CONN_FROM_LU
|
||||
DMM Subscr_Conn(901700000004620){SUBSCR_CONN_S_NEW}: state_chg to SUBSCR_CONN_S_ACCEPTED
|
||||
DMM Subscr_Conn(901700000004620){SUBSCR_CONN_S_ACCEPTED}: Received Event SUBSCR_CONN_E_BUMP
|
||||
DMM Subscr_Conn(901700000004620){SUBSCR_CONN_S_ACCEPTED}: bump: releasing conn
|
||||
DMM Subscr_Conn(901700000004620){SUBSCR_CONN_S_ACCEPTED}: state_chg to SUBSCR_CONN_S_RELEASED
|
||||
DMM Subscr_Conn(901700000004620){SUBSCR_CONN_S_RELEASED}: Terminating (cause = OSMO_FSM_TERM_REGULAR)
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_DONE}: Terminating (cause = OSMO_FSM_TERM_PARENT)
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_DONE}: Removing from parent Subscr_Conn(901700000004620)
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_DONE}: fsm_lu_cleanup called with cause OSMO_FSM_TERM_PARENT
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_DONE}: Freeing instance
|
||||
DVLR vlr_lu_fsm(901700000004620){VLR_ULA_S_DONE}: Deallocated
|
||||
DMM msc_subscr_conn_close(vsub=MSISDN:46071, cause=2): no conn fsm, releasing directly without release event.
|
||||
- BSSAP Clear --RAN_GERAN_A--> MS
|
||||
DREF MSISDN:46071: MSC conn use - fsm == 0 (0x0)
|
||||
DRLL subscr MSISDN:46071: Freeing subscriber connection
|
||||
DREF VLR subscr MSISDN:46071 usage decreases to: 2
|
||||
DMM Subscr_Conn(901700000004620){SUBSCR_CONN_S_RELEASED}: Freeing instance
|
||||
DMM Subscr_Conn(901700000004620){SUBSCR_CONN_S_RELEASED}: Deallocated
|
||||
DREF VLR subscr MSISDN:46071 usage decreases to: 1
|
||||
<-- GSUP rx OSMO_GSUP_MSGT_UPDATE_LOCATION_RESULT: vlr_gsupc_read_cb() returns 0
|
||||
- LU was successful, and the conn has already been closed
|
||||
lu_result_sent == 1
|
||||
bssap_clear_sent == 1
|
||||
llist_count(&net->subscr_conns) == 0
|
||||
---
|
||||
- an SMS is sent, MS is paged
|
||||
DREF VLR subscr MSISDN:46071 usage increases to: 2
|
||||
llist_count(&vsub->cs.requests) == 0
|
||||
DREF VLR subscr MSISDN:46071 usage increases to: 3
|
||||
DMM Subscriber MSISDN:46071 not paged yet, start paging.
|
||||
RAN_GERAN_A sends out paging request to IMSI 901700000004620, TMSI 0xffffffff, LAC 23
|
||||
strcmp(paging_expecting_imsi, imsi) == 0
|
||||
DREF VLR subscr MSISDN:46071 usage increases to: 4
|
||||
llist_count(&vsub->cs.requests) == 1
|
||||
DREF VLR subscr MSISDN:46071 usage decreases to: 3
|
||||
paging_sent == 1
|
||||
paging_stopped == 0
|
||||
- time passes and no paging result is received
|
||||
- Total time passed: 9.000000 s
|
||||
- the paging timeout has not yet expired
|
||||
paging_stopped == 0
|
||||
DREF VLR subscr MSISDN:46071 usage increases to: 4
|
||||
vsub->cs.is_paging == 1
|
||||
- another request is added to the list but does not cause another paging
|
||||
DREF VLR subscr MSISDN:46071 usage increases to: 5
|
||||
DMM Subscriber MSISDN:46071 already paged.
|
||||
llist_count(&vsub->cs.requests) == 2
|
||||
DREF VLR subscr MSISDN:46071 usage decreases to: 4
|
||||
paging_sent == 0
|
||||
- the paging timeout expires, the paging as well as the requests are canceled
|
||||
- Total time passed: 11.000000 s
|
||||
DPAG Paging failure for MSISDN:46071 (event=1)
|
||||
DPAG Calling paging cbfn.
|
||||
DREF VLR subscr MSISDN:46071 usage decreases to: 3
|
||||
DPAG Calling paging cbfn.
|
||||
DREF VLR subscr MSISDN:46071 usage decreases to: 2
|
||||
DREF VLR subscr MSISDN:46071 usage decreases to: 1
|
||||
paging_stopped == 1
|
||||
DREF VLR subscr MSISDN:46071 usage increases to: 2
|
||||
vsub->cs.is_paging == 0
|
||||
llist_count(&vsub->cs.requests) == 0
|
||||
DREF VLR subscr MSISDN:46071 usage decreases to: 1
|
||||
---
|
||||
- subscriber detaches
|
||||
MSC <--RAN_GERAN_A-- MS: GSM48_MT_MM_IMSI_DETACH_IND
|
||||
new conn
|
||||
DREF unknown: MSC conn use + compl_l3 == 1 (0x1)
|
||||
DRLL Dispatching 04.08 message GSM48_MT_MM_IMSI_DETACH_IND (0x5:0x1)
|
||||
DMM IMSI DETACH INDICATION: MI(IMSI)=901700000004620
|
||||
DREF VLR subscr MSISDN:46071 usage increases to: 2
|
||||
DMM IMSI DETACH for MSISDN:46071
|
||||
DREF VLR subscr MSISDN:46071 usage decreases to: 1
|
||||
DREF VLR subscr MSISDN:46071 usage decreases to: 0
|
||||
DREF freeing VLR subscr MSISDN:46071
|
||||
DMM msc_subscr_conn_close(vsub=unknown, cause=0): no conn fsm, releasing directly without release event.
|
||||
- BSSAP Clear --RAN_GERAN_A--> MS
|
||||
DREF unknown: MSC conn use - compl_l3 == 0 (0x0)
|
||||
DRLL Freeing subscriber connection with NULL subscriber
|
||||
bssap_clear_sent == 1
|
||||
llist_count(&net->subscr_conns) == 0
|
||||
===== test_ms_timeout_paging: SUCCESS
|
||||
|
||||
full talloc report on 'msgb' (total 0 bytes in 1 blocks)
|
||||
talloc_total_blocks(tall_bsc_ctx) == 9
|
||||
|
||||
full talloc report on 'msgb' (total 0 bytes in 1 blocks)
|
||||
talloc_total_blocks(tall_bsc_ctx) == 9
|
||||
|
||||
|
|
Loading…
Reference in New Issue