pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/32317 )
Change subject: sm: Handle PCO in rx PDP Ctx Accept ......................................................................
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);