gmm: Provide rlcmac with IMSI & PTMSI information
This information will be needed once the GRR layer starts listening for paging requests, which identify MS by either PTMSI or IMSI. Change-Id: I3a0c4a57c3d624c3ebb40ae2cc0c96626ccc2c99
This commit is contained in:
parent
c9f5abdbff
commit
7bbdcc4414
|
@ -185,6 +185,8 @@ struct osmo_gprs_gmm_gmmrr_prim {
|
||||||
/* OSMO_GPRS_GMM_GMMRR_ASSIGN | Req */
|
/* OSMO_GPRS_GMM_GMMRR_ASSIGN | Req */
|
||||||
struct {
|
struct {
|
||||||
uint32_t new_tlli;
|
uint32_t new_tlli;
|
||||||
|
uint32_t ptmsi;
|
||||||
|
char imsi[OSMO_IMSI_BUF_SIZE];
|
||||||
} assign_req;
|
} assign_req;
|
||||||
/* OSMO_GPRS_GMM_GMMRR_PAGE | Ind */
|
/* OSMO_GPRS_GMM_GMMRR_PAGE | Ind */
|
||||||
struct {
|
struct {
|
||||||
|
|
|
@ -12,6 +12,10 @@ struct gprs_rlcmac_entity {
|
||||||
struct llist_head entry; /* item in (struct gprs_rlcmac_ctx)->gre_list */
|
struct llist_head entry; /* item in (struct gprs_rlcmac_ctx)->gre_list */
|
||||||
uint32_t tlli;
|
uint32_t tlli;
|
||||||
|
|
||||||
|
/* Used to match paging requests coming from CS domain: */
|
||||||
|
uint32_t ptmsi;
|
||||||
|
char imsi[OSMO_IMSI_BUF_SIZE];
|
||||||
|
|
||||||
struct gprs_rlcmac_llc_queue *llc_queue;
|
struct gprs_rlcmac_llc_queue *llc_queue;
|
||||||
|
|
||||||
/* Manage TBF Starting Time delay during TBF assignment: */
|
/* Manage TBF Starting Time delay during TBF assignment: */
|
||||||
|
|
|
@ -91,6 +91,8 @@ struct osmo_gprs_rlcmac_gmmrr_prim {
|
||||||
/* OSMO_GPRS_RLCMAC_GMMRR_ASSIGN | Req */
|
/* OSMO_GPRS_RLCMAC_GMMRR_ASSIGN | Req */
|
||||||
struct {
|
struct {
|
||||||
uint32_t new_tlli;
|
uint32_t new_tlli;
|
||||||
|
uint32_t ptmsi;
|
||||||
|
char imsi[OSMO_IMSI_BUF_SIZE];
|
||||||
} assign_req;
|
} assign_req;
|
||||||
/* OSMO_GPRS_RLCMAC_GMMRR_PAGE | Ind */
|
/* OSMO_GPRS_RLCMAC_GMMRR_PAGE | Ind */
|
||||||
struct {
|
struct {
|
||||||
|
|
|
@ -459,6 +459,8 @@ static int gprs_gmm_submit_gmmrr_assing_req(struct gprs_gmm_entity *gmme)
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
gmm_prim_tx = gprs_gmm_prim_alloc_gmmrr_assign_req(gmme->old_tlli, gmme->tlli);
|
gmm_prim_tx = gprs_gmm_prim_alloc_gmmrr_assign_req(gmme->old_tlli, gmme->tlli);
|
||||||
|
gmm_prim_tx->gmmrr.assign_req.ptmsi = gmme->ptmsi;
|
||||||
|
OSMO_STRLCPY_ARRAY(gmm_prim_tx->gmmrr.assign_req.imsi, gmme->imsi);
|
||||||
|
|
||||||
rc = gprs_gmm_prim_call_down_cb(gmm_prim_tx);
|
rc = gprs_gmm_prim_call_down_cb(gmm_prim_tx);
|
||||||
return rc;
|
return rc;
|
||||||
|
|
|
@ -56,6 +56,7 @@ struct gprs_rlcmac_entity *gprs_rlcmac_entity_alloc(uint32_t tlli)
|
||||||
goto err_free_gre;
|
goto err_free_gre;
|
||||||
|
|
||||||
gre->tlli = tlli;
|
gre->tlli = tlli;
|
||||||
|
gre->ptmsi = GSM_RESERVED_TMSI;
|
||||||
llist_add_tail(&gre->entry, &g_rlcmac_ctx->gre_list);
|
llist_add_tail(&gre->entry, &g_rlcmac_ctx->gre_list);
|
||||||
|
|
||||||
return gre;
|
return gre;
|
||||||
|
|
|
@ -426,6 +426,8 @@ static int rlcmac_prim_handle_gmmrr_assign_req(struct osmo_gprs_rlcmac_prim *rlc
|
||||||
goto free_ret;
|
goto free_ret;
|
||||||
}
|
}
|
||||||
gprs_rlcmac_entity_free(gre);
|
gprs_rlcmac_entity_free(gre);
|
||||||
|
gre = NULL;
|
||||||
|
goto free_ret;
|
||||||
} else {
|
} else {
|
||||||
/* Case "update", both old_tlli and new_tlli are valid */
|
/* Case "update", both old_tlli and new_tlli are valid */
|
||||||
gre = gprs_rlcmac_find_entity_by_tlli(old_tlli);
|
gre = gprs_rlcmac_find_entity_by_tlli(old_tlli);
|
||||||
|
@ -438,6 +440,11 @@ static int rlcmac_prim_handle_gmmrr_assign_req(struct osmo_gprs_rlcmac_prim *rlc
|
||||||
gre->tlli = new_tlli;
|
gre->tlli = new_tlli;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* cache/update knowledge about this GMME's PTMSI and IMSI. It will be
|
||||||
|
* needed later on to match paging requests: */
|
||||||
|
gre->ptmsi = rlcmac_prim->gmmrr.assign_req.ptmsi;
|
||||||
|
OSMO_STRLCPY_ARRAY(gre->imsi, rlcmac_prim->gmmrr.assign_req.imsi);
|
||||||
|
|
||||||
free_ret:
|
free_ret:
|
||||||
msgb_free(rlcmac_prim->oph.msg);
|
msgb_free(rlcmac_prim->oph.msg);
|
||||||
return rc;
|
return rc;
|
||||||
|
|
|
@ -904,6 +904,8 @@ static void test_dl_tbf_ccch_assign(void)
|
||||||
|
|
||||||
printf("=== %s start ===\n", __func__);
|
printf("=== %s start ===\n", __func__);
|
||||||
prepare_test();
|
prepare_test();
|
||||||
|
uint32_t ptmsi = 0x00001234;
|
||||||
|
char *imsi = "1234567890";
|
||||||
uint32_t tlli = 0x0000001;
|
uint32_t tlli = 0x0000001;
|
||||||
uint8_t ts_nr = 7;
|
uint8_t ts_nr = 7;
|
||||||
uint8_t usf = 0;
|
uint8_t usf = 0;
|
||||||
|
@ -913,6 +915,8 @@ static void test_dl_tbf_ccch_assign(void)
|
||||||
|
|
||||||
/* Notify RLCMAC about our TLLI */
|
/* Notify RLCMAC about our TLLI */
|
||||||
rlcmac_prim = osmo_gprs_rlcmac_prim_alloc_gmmrr_assign_req(GPRS_RLCMAC_TLLI_UNASSIGNED, tlli);
|
rlcmac_prim = osmo_gprs_rlcmac_prim_alloc_gmmrr_assign_req(GPRS_RLCMAC_TLLI_UNASSIGNED, tlli);
|
||||||
|
rlcmac_prim->gmmrr.assign_req.ptmsi = ptmsi;
|
||||||
|
OSMO_STRLCPY_ARRAY(rlcmac_prim->gmmrr.assign_req.imsi, imsi);
|
||||||
rc = osmo_gprs_rlcmac_prim_upper_down(rlcmac_prim);
|
rc = osmo_gprs_rlcmac_prim_upper_down(rlcmac_prim);
|
||||||
|
|
||||||
OSMO_ASSERT(sizeof(ccch_imm_ass_pkt_dl_tbf) == GSM_MACBLOCK_LEN);
|
OSMO_ASSERT(sizeof(ccch_imm_ass_pkt_dl_tbf) == GSM_MACBLOCK_LEN);
|
||||||
|
@ -951,6 +955,8 @@ static void test_dl_tbf_ccch_assign_requests_ul_tbf_pacch(void)
|
||||||
printf("=== %s start ===\n", __func__);
|
printf("=== %s start ===\n", __func__);
|
||||||
prepare_test();
|
prepare_test();
|
||||||
RlcMacDownlink_t dl_block;
|
RlcMacDownlink_t dl_block;
|
||||||
|
uint32_t ptmsi = 0x00001234;
|
||||||
|
char *imsi = "1234567890";
|
||||||
uint32_t tlli = 0x0000001;
|
uint32_t tlli = 0x0000001;
|
||||||
uint8_t ts_nr = 7;
|
uint8_t ts_nr = 7;
|
||||||
uint8_t usf = 0;
|
uint8_t usf = 0;
|
||||||
|
@ -963,6 +969,8 @@ static void test_dl_tbf_ccch_assign_requests_ul_tbf_pacch(void)
|
||||||
|
|
||||||
/* Notify RLCMAC about our TLLI */
|
/* Notify RLCMAC about our TLLI */
|
||||||
rlcmac_prim = osmo_gprs_rlcmac_prim_alloc_gmmrr_assign_req(GPRS_RLCMAC_TLLI_UNASSIGNED, tlli);
|
rlcmac_prim = osmo_gprs_rlcmac_prim_alloc_gmmrr_assign_req(GPRS_RLCMAC_TLLI_UNASSIGNED, tlli);
|
||||||
|
rlcmac_prim->gmmrr.assign_req.ptmsi = ptmsi;
|
||||||
|
OSMO_STRLCPY_ARRAY(rlcmac_prim->gmmrr.assign_req.imsi, imsi);
|
||||||
rc = osmo_gprs_rlcmac_prim_upper_down(rlcmac_prim);
|
rc = osmo_gprs_rlcmac_prim_upper_down(rlcmac_prim);
|
||||||
|
|
||||||
OSMO_ASSERT(sizeof(ccch_imm_ass_pkt_dl_tbf) == GSM_MACBLOCK_LEN);
|
OSMO_ASSERT(sizeof(ccch_imm_ass_pkt_dl_tbf) == GSM_MACBLOCK_LEN);
|
||||||
|
|
Loading…
Reference in New Issue