pespin has uploaded this change for review.
sm: Handle PCO in rx PDP Ctx Accept
Related: OS#5501
Change-Id: I15ff08cbefb463c8785a138406921563941e7e7d
---
M src/sm/sm.c
1 file changed, 25 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-gprs refs/changes/17/32317/1
diff --git a/src/sm/sm.c b/src/sm/sm.c
index c57ef3f..0f39708 100644
--- a/src/sm/sm.c
+++ b/src/sm/sm.c
@@ -208,6 +208,10 @@
sm_prim_tx->smreg.ms_id = sme->ms->ms_id;
sm_prim_tx->smreg.pdp_act_cnf.accepted = (cause != 0);
sm_prim_tx->smreg.pdp_act_cnf.nsapi = sme->nsapi;
+ sm_prim_tx->smreg.pdp_act_cnf.pco_len = sme->pco_len;
+ if (sme->pco_len)
+ memcpy(sm_prim_tx->smreg.pdp_act_cnf.pco, &sme->pco, sme->pco_len);
+
if (sm_prim_tx->smreg.pdp_act_cnf.accepted) {
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));
@@ -319,6 +323,17 @@
if (rc < 0)
goto rejected;
}
+
+ if (TLVP_PRESENT(&tp, GSM48_IE_GSM_PROTO_CONF_OPT)) {
+ if (TLVP_LEN(&tp, GSM48_IE_GSM_PROTO_CONF_OPT) > ARRAY_SIZE(sme->pco)) {
+ LOGSME(sme, LOGL_ERROR,
+ "Rx SM Activate PDP Context Accept: PCO size too big! %u\n", qos_len);
+ goto rejected;
+ }
+ sme->pco_len = TLVP_LEN(&tp, GSM48_IE_GSM_PROTO_CONF_OPT);
+ if (sme->pco_len)
+ memcpy(sme->pco, TLVP_VAL(&tp, GSM48_IE_GSM_PROTO_CONF_OPT), sme->pco_len);
+ }
}
rc = osmo_fsm_inst_dispatch(sme->ms_fsm.fi, GPRS_SM_MS_EV_RX_ACT_PDP_CTX_ACC, NULL);
To view, visit change 32317. To unsubscribe, or for help writing mail filters, visit settings.