pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/32735 )
Change subject: gmm: Allow passing old RAI during attach ......................................................................
gmm: Allow passing old RAI during attach
This is stored by the MS and hence shall be passed by the application.
Change-Id: I22ffa8a169c09445e7126892616f61b8d01cbfe7 --- M include/osmocom/gprs/gmm/gmm_prim.h M src/gmm/gmm_pdu.c M src/gmm/gmm_prim.c M tests/gmm/gmm_prim_test.c 4 files changed, 26 insertions(+), 11 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-gprs refs/changes/35/32735/1
diff --git a/include/osmocom/gprs/gmm/gmm_prim.h b/include/osmocom/gprs/gmm/gmm_prim.h index 42dc90a..665b3df 100644 --- a/include/osmocom/gprs/gmm/gmm_prim.h +++ b/include/osmocom/gprs/gmm/gmm_prim.h @@ -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 @@ 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 @@ 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 { diff --git a/src/gmm/gmm_pdu.c b/src/gmm/gmm_pdu.c index 785932c..1182482 100644 --- a/src/gmm/gmm_pdu.c +++ b/src/gmm/gmm_pdu.c @@ -181,7 +181,6 @@ 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 @@ *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); diff --git a/src/gmm/gmm_prim.c b/src/gmm/gmm_prim.c index af8f663..4951651 100644 --- a/src/gmm/gmm_prim.c +++ b/src/gmm/gmm_prim.c @@ -385,6 +385,7 @@ 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 @@ 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, diff --git a/tests/gmm/gmm_prim_test.c b/tests/gmm/gmm_prim_test.c index b66ca51..1b14b38 100644 --- a/tests/gmm/gmm_prim_test.c +++ b/tests/gmm/gmm_prim_test.c @@ -306,6 +306,13 @@ 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);