pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmocom-bb/+/32643 )
Change subject: layer23: modem: pass pco & qos from apn ......................................................................
layer23: modem: pass pco & qos from apn
Change-Id: I4088e3e96a58bd667627023f144a05137415dd32 --- M src/host/layer23/include/osmocom/bb/common/apn.h M src/host/layer23/src/common/apn.c M src/host/layer23/src/modem/sm.c 3 files changed, 25 insertions(+), 6 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/43/32643/1
diff --git a/src/host/layer23/include/osmocom/bb/common/apn.h b/src/host/layer23/include/osmocom/bb/common/apn.h index c449530..7378221 100644 --- a/src/host/layer23/include/osmocom/bb/common/apn.h +++ b/src/host/layer23/include/osmocom/bb/common/apn.h @@ -20,6 +20,9 @@ #include <osmocom/core/linuxlist.h> #include <osmocom/core/select.h> #include <osmocom/core/tun.h> + +#include <osmocom/gprs/sm/sm.h> + #include <osmocom/bb/common/apn_fsm.h>
struct osmocom_ms; @@ -31,6 +34,10 @@ struct osmobb_pdp_ctx { uint8_t nsapi; uint8_t llc_sapi; + uint8_t qos[OSMO_GPRS_SM_QOS_MAXLEN]; + uint8_t qos_len; + uint8_t pco[OSMO_GPRS_SM_PCO_MAXLEN]; + uint8_t pco_len; };
struct osmobb_apn { diff --git a/src/host/layer23/src/common/apn.c b/src/host/layer23/src/common/apn.c index 4ea5d3a..f69014a 100644 --- a/src/host/layer23/src/common/apn.c +++ b/src/host/layer23/src/common/apn.c @@ -54,6 +54,11 @@ /* FIXME: may want to configure or pick free one in the future: */ apn->pdp.nsapi = 6; apn->pdp.llc_sapi = OSMO_GPRS_SM_LLC_SAPI_SAPI3; + + /* QoS zeroed to 14 bytes is a valid QoS seen sent by some phones. Use + * that as default for now. */ + apn->pdp.qos_len = 14; + llist_add_tail(&apn->list, &ms->gprs.apn_list); return apn;
diff --git a/src/host/layer23/src/modem/sm.c b/src/host/layer23/src/modem/sm.c index 63f922a..e4b8de6 100644 --- a/src/host/layer23/src/modem/sm.c +++ b/src/host/layer23/src/modem/sm.c @@ -233,8 +233,6 @@ const struct gsm_subscriber *subscr = &ms->subscr; enum osmo_gprs_sm_pdp_addr_ietf_type pdp_addr_ietf_type; struct osmo_sockaddr pdp_addr_any = {0}; - uint8_t qos[OSMO_GPRS_SM_QOS_MAXLEN] = {0}; - uint8_t pco[OSMO_GPRS_SM_QOS_MAXLEN] = {0}; int rc;
if (apn->cfg.apn_type_mask & APN_TYPE_IPv4v6) { @@ -254,10 +252,10 @@ sm_prim->smreg.pdp_act_req.pdp_addr_ietf_type = pdp_addr_ietf_type; sm_prim->smreg.pdp_act_req.pdp_addr_v4 = pdp_addr_any; sm_prim->smreg.pdp_act_req.pdp_addr_v6 = pdp_addr_any; - memcpy(sm_prim->smreg.pdp_act_req.qos, qos, sizeof(qos)); - sm_prim->smreg.pdp_act_req.qos_len = 1; - memcpy(sm_prim->smreg.pdp_act_req.pco, pco, sizeof(pco)); - sm_prim->smreg.pdp_act_req.pco_len = 1; + memcpy(sm_prim->smreg.pdp_act_req.qos, apn->pdp.qos, apn->pdp.qos_len); + sm_prim->smreg.pdp_act_req.qos_len = apn->pdp.qos_len; + memcpy(sm_prim->smreg.pdp_act_req.pco, apn->pdp.pco, apn->pdp.pco_len); + sm_prim->smreg.pdp_act_req.pco_len = apn->pdp.pco_len; OSMO_STRLCPY_ARRAY(sm_prim->smreg.pdp_act_req.apn, apn->cfg.name); sm_prim->smreg.pdp_act_req.gmm.ptmsi = subscr->ptmsi; OSMO_STRLCPY_ARRAY(sm_prim->smreg.pdp_act_req.gmm.imsi, subscr->imsi);