gmm: Allow passing old RAI during attach
This is stored by the MS and hence shall be passed by the application. Change-Id: I22ffa8a169c09445e7126892616f61b8d01cbfe7
This commit is contained in:
parent
a57e7293df
commit
1d1b704dca
|
@ -14,6 +14,7 @@
|
|||
#include <osmocom/core/utils.h>
|
||||
#include <osmocom/core/prim.h>
|
||||
#include <osmocom/gsm/protocol/gsm_23_003.h>
|
||||
#include <osmocom/gsm/gsm48.h>
|
||||
#include <osmocom/gprs/gmm/gmm.h>
|
||||
|
||||
struct osmo_gprs_llc_prim;
|
||||
|
@ -108,7 +109,8 @@ struct osmo_gprs_gmm_gmmreg_prim {
|
|||
char imsi[OSMO_IMSI_BUF_SIZE];
|
||||
char imei[GSM23003_IMEI_NUM_DIGITS + 1];
|
||||
char imeisv[GSM23003_IMEISV_NUM_DIGITS+1];
|
||||
/* attach-type, READY-timer, STANDBY-timer */
|
||||
struct gprs_ra_id old_rai;
|
||||
/* READY-timer, STANDBY-timer */
|
||||
} attach_req;
|
||||
/* OSMO_GPRS_GMM_GMMREG_ATTACH | Cnf 6.6.1.2 / Rej 6.6.1.3 */
|
||||
struct {
|
||||
|
@ -212,7 +214,8 @@ struct osmo_gprs_gmm_gmmsm_prim {
|
|||
char imsi[OSMO_IMSI_BUF_SIZE];
|
||||
char imei[GSM23003_IMEI_NUM_DIGITS + 1];
|
||||
char imeisv[GSM23003_IMEISV_NUM_DIGITS+1];
|
||||
/* attach-type, READY-timer, STANDBY-timer */
|
||||
struct gprs_ra_id old_rai;
|
||||
/* READY-timer, STANDBY-timer */
|
||||
} establish_req;
|
||||
/* OSMO_GPRS_GMM_GMMSM_ESTABLISH | Cnf/Rej */
|
||||
struct {
|
||||
|
|
|
@ -181,7 +181,6 @@ int gprs_gmm_build_attach_req(struct gprs_gmm_entity *gmme,
|
|||
uint8_t *l;
|
||||
int rc;
|
||||
struct gsm48_ra_id *raid_enc;
|
||||
struct gprs_ra_id raid;
|
||||
|
||||
gh = (struct gsm48_hdr *) msgb_put(msg, sizeof(*gh));
|
||||
gh->proto_discr = GSM48_PDISC_MM_GPRS;
|
||||
|
@ -221,15 +220,8 @@ int gprs_gmm_build_attach_req(struct gprs_gmm_entity *gmme,
|
|||
*l = rc;
|
||||
|
||||
/* Old routing area identification 0.5.5.15 */
|
||||
raid = (struct gprs_ra_id){ /* TODO: fill this correctly */
|
||||
.mcc = 0,
|
||||
.mnc = 0,
|
||||
.mnc_3_digits = false,
|
||||
.lac = 0,
|
||||
.rac = 0,
|
||||
};
|
||||
raid_enc = (struct gsm48_ra_id *)msgb_put(msg, sizeof(struct gsm48_ra_id));
|
||||
gsm48_encode_ra(raid_enc, &raid);
|
||||
gsm48_encode_ra(raid_enc, &gmme->ra);
|
||||
|
||||
/* MS Radio Access capability 10.5.5.12a */
|
||||
rc = encode_ms_ra_acc_cap(gmme, msg);
|
||||
|
|
|
@ -385,6 +385,7 @@ static int gprs_gmm_prim_handle_gmmreg_attach_req(struct osmo_gprs_gmm_prim *gmm
|
|||
OSMO_STRLCPY_ARRAY(gmme->imei, gmm_prim->gmmreg.attach_req.imei);
|
||||
if (gmm_prim->gmmreg.attach_req.imeisv[0] != '\0')
|
||||
OSMO_STRLCPY_ARRAY(gmme->imeisv, gmm_prim->gmmreg.attach_req.imeisv);
|
||||
memcpy(&gmme->ra, &gmm_prim->gmmreg.attach_req.old_rai, sizeof(gmme->ra));
|
||||
|
||||
rc = gprs_gmm_ms_fsm_ctx_request_attach(&gmme->ms_fsm,
|
||||
gmm_prim->gmmreg.attach_req.attach_type,
|
||||
|
@ -497,6 +498,7 @@ static int gprs_gmm_prim_handle_gmmsm_establish_req(struct osmo_gprs_gmm_prim *g
|
|||
OSMO_STRLCPY_ARRAY(gmme->imei, gmm_prim->gmmsm.establish_req.imei);
|
||||
if (gmm_prim->gmmsm.establish_req.imeisv[0] != '\0')
|
||||
OSMO_STRLCPY_ARRAY(gmme->imeisv, gmm_prim->gmmsm.establish_req.imeisv);
|
||||
memcpy(&gmme->ra, &gmm_prim->gmmsm.establish_req.old_rai, sizeof(gmme->ra));
|
||||
|
||||
rc = gprs_gmm_ms_fsm_ctx_request_attach(&gmme->ms_fsm,
|
||||
gmm_prim->gmmsm.establish_req.attach_type,
|
||||
|
|
|
@ -306,6 +306,13 @@ static void test_gmm_prim_ms_gmmreg(void)
|
|||
OSMO_STRLCPY_ARRAY(gmm_prim->gmmreg.attach_req.imsi, imsi);
|
||||
OSMO_STRLCPY_ARRAY(gmm_prim->gmmreg.attach_req.imei, imei);
|
||||
OSMO_STRLCPY_ARRAY(gmm_prim->gmmreg.attach_req.imeisv, imeisv);
|
||||
gmm_prim->gmmreg.attach_req.old_rai = (struct gprs_ra_id){
|
||||
.mcc = 0,
|
||||
.mnc = 0,
|
||||
.mnc_3_digits = false,
|
||||
.lac = 0,
|
||||
.rac = 0,
|
||||
};
|
||||
rc = osmo_gprs_gmm_prim_upper_down(gmm_prim);
|
||||
OSMO_ASSERT(rc == 0);
|
||||
|
||||
|
|
Loading…
Reference in New Issue