pespin submitted this change.

View Change


Approvals: Jenkins Builder: Verified pespin: Looks good to me, approved
sm: Handle radio_prio,qos,llc_sapi in rx PDP Ctx Accept

Related: OS#5501
Change-Id: Icbd9ba82b6d8cbcfcaf5a80ddc801139c409c585
---
M include/osmocom/gprs/sm/sm_prim.h
M include/osmocom/gprs/sm/sm_private.h
M src/sm/sm.c
3 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/include/osmocom/gprs/sm/sm_prim.h b/include/osmocom/gprs/sm/sm_prim.h
index 4f16ae4..86a36d2 100644
--- a/include/osmocom/gprs/sm/sm_prim.h
+++ b/include/osmocom/gprs/sm/sm_prim.h
@@ -82,6 +82,7 @@
enum osmo_gprs_sm_pdp_addr_ietf_type pdp_addr_ietf_type;
struct osmo_sockaddr pdp_addr_v4;
struct osmo_sockaddr pdp_addr_v6;
+ uint8_t radio_prio; /* TS 24.008 10.5.7.2 */
uint8_t qos[OSMO_GPRS_SM_QOS_MAXLEN];
uint8_t qos_len;
} acc;
diff --git a/include/osmocom/gprs/sm/sm_private.h b/include/osmocom/gprs/sm/sm_private.h
index 751123f..163014e 100644
--- a/include/osmocom/gprs/sm/sm_private.h
+++ b/include/osmocom/gprs/sm/sm_private.h
@@ -103,6 +103,7 @@
struct osmo_sockaddr pdp_addr_v4;
struct osmo_sockaddr pdp_addr_v6;

+ uint8_t radio_prio; /* TS 24.008 10.5.7.2 */
uint8_t qos[OSMO_GPRS_SM_QOS_MAXLEN];
uint8_t qos_len;

diff --git a/src/sm/sm.c b/src/sm/sm.c
index d760ae6..c57ef3f 100644
--- a/src/sm/sm.c
+++ b/src/sm/sm.c
@@ -212,6 +212,10 @@
sm_prim_tx->smreg.pdp_act_cnf.acc.pdp_addr_ietf_type = sme->pdp_addr_ietf_type;
memcpy(&sm_prim_tx->smreg.pdp_act_cnf.acc.pdp_addr_v4, &sme->pdp_addr_v4, sizeof(sme->pdp_addr_v4));
memcpy(&sm_prim_tx->smreg.pdp_act_cnf.acc.pdp_addr_v6, &sme->pdp_addr_v6, sizeof(sme->pdp_addr_v6));
+ sm_prim_tx->smreg.pdp_act_cnf.acc.radio_prio = sme->radio_prio;
+ sm_prim_tx->smreg.pdp_act_cnf.acc.qos_len = sme->qos_len;
+ if (sme->qos_len)
+ memcpy(sm_prim_tx->smreg.pdp_act_cnf.acc.qos, &sme->qos, sme->qos_len);
} else {
sm_prim_tx->smreg.pdp_act_cnf.rej.cause = cause;
}
@@ -269,10 +273,8 @@
{
struct tlv_parsed tp;
int rc;
- uint8_t radio_prio, llc_sapi;
uint8_t *ofs = (uint8_t *)gh;
uint8_t qos_len;
- uint8_t *qos;

ofs += sizeof(*gh);
//uint8_t transaction_id = gsm48_hdr_trans_id(gh);
@@ -281,22 +283,25 @@

if (len < (ofs + 2) - (uint8_t *)gh)
goto tooshort;
- llc_sapi = *ofs++;
+ sme->llc_sapi = *ofs++;
qos_len = *ofs++;

+ if (qos_len > ARRAY_SIZE(sme->qos)) {
+ LOGSME(sme, LOGL_ERROR,
+ "Rx SM Activate PDP Context Accept: QoS size too big! %u\n", qos_len);
+ goto rejected;
+ }
+
if (len < (ofs + qos_len) - (uint8_t *)gh)
goto tooshort;
- qos = ofs;
+ memcpy(sme->qos, ofs, qos_len);
+
ofs += qos_len;

if (len < (ofs + 1) - (uint8_t *)gh)
goto tooshort;

- radio_prio = *ofs++;
-
- (void)llc_sapi;
- (void)qos;
- (void)radio_prio;
+ sme->radio_prio = *ofs++;

if (len > ofs - (uint8_t *)gh) {
rc = gprs_sm_tlv_parse(&tp, ofs, len - (ofs - (uint8_t *)gh));

To view, visit change 32316. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: libosmo-gprs
Gerrit-Branch: master
Gerrit-Change-Id: Icbd9ba82b6d8cbcfcaf5a80ddc801139c409c585
Gerrit-Change-Number: 32316
Gerrit-PatchSet: 2
Gerrit-Owner: pespin <pespin@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: pespin <pespin@sysmocom.de>
Gerrit-MessageType: merged