pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmocom-bb/+/32597 )
Change subject: layer23: Store and use SAPI & NSAPI in apn->pdp ......................................................................
layer23: Store and use SAPI & NSAPI in apn->pdp
Change-Id: If82c94ca9c84a94e63a9a5d642a27a7b4e3ff089 --- 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 M src/host/layer23/src/modem/sndcp.c 4 files changed, 24 insertions(+), 10 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/97/32597/1
diff --git a/src/host/layer23/include/osmocom/bb/common/apn.h b/src/host/layer23/include/osmocom/bb/common/apn.h index 538b31d..c449530 100644 --- a/src/host/layer23/include/osmocom/bb/common/apn.h +++ b/src/host/layer23/include/osmocom/bb/common/apn.h @@ -28,6 +28,11 @@ #define APN_TYPE_IPv6 0x02 /* v6-only */ #define APN_TYPE_IPv4v6 0x04 /* v4v6 dual-stack */
+struct osmobb_pdp_ctx { + uint8_t nsapi; + uint8_t llc_sapi; +}; + struct osmobb_apn { /* list of APNs inside MS */ struct llist_head list; @@ -52,6 +57,7 @@ } cfg; struct osmo_tundev *tun; struct apn_fsm_ctx fsm; + struct osmobb_pdp_ctx pdp; };
struct osmobb_apn *apn_alloc(struct osmocom_ms *ms, const char *name); diff --git a/src/host/layer23/src/common/apn.c b/src/host/layer23/src/common/apn.c index b9b032c..4ea5d3a 100644 --- a/src/host/layer23/src/common/apn.c +++ b/src/host/layer23/src/common/apn.c @@ -23,6 +23,8 @@
#include <talloc.h>
+#include <osmocom/gprs/sm/sm.h> + #include <osmocom/bb/common/logging.h> #include <osmocom/bb/common/apn.h> #include <osmocom/bb/common/ms.h> @@ -49,6 +51,9 @@ osmo_tundev_set_priv_data(apn->tun, apn);
apn->ms = ms; + /* 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; 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 aac2b52..03982c6 100644 --- a/src/host/layer23/src/modem/sm.c +++ b/src/host/layer23/src/modem/sm.c @@ -229,8 +229,6 @@ struct osmo_gprs_sm_prim *sm_prim; const struct gsm_subscriber *subscr = &ms->subscr; enum osmo_gprs_sm_pdp_addr_ietf_type pdp_addr_ietf_type; - uint8_t nsapi = 6; - enum osmo_gprs_sm_llc_sapi llc_sapi = OSMO_GPRS_SM_LLC_SAPI_SAPI3; 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}; @@ -248,8 +246,8 @@ }
sm_prim = osmo_gprs_sm_prim_alloc_smreg_pdp_act_req(); - sm_prim->smreg.pdp_act_req.nsapi = nsapi; - sm_prim->smreg.pdp_act_req.llc_sapi = llc_sapi; + sm_prim->smreg.pdp_act_req.nsapi = apn->pdp.nsapi; + sm_prim->smreg.pdp_act_req.llc_sapi = apn->pdp.llc_sapi; 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; diff --git a/src/host/layer23/src/modem/sndcp.c b/src/host/layer23/src/modem/sndcp.c index b4b7761..7814e50 100644 --- a/src/host/layer23/src/modem/sndcp.c +++ b/src/host/layer23/src/modem/sndcp.c @@ -181,10 +181,8 @@
/* TODO: look up PDP context IDs from ms once we have GMM layer. */ uint32_t tlli = 0xe1c5d364; - uint8_t sapi = OSMO_GPRS_LLC_SAPI_SNDCP3; - uint8_t nsapi = 1;
- sndcp_prim = osmo_gprs_sndcp_prim_alloc_sn_xid_req(tlli, sapi, nsapi); + sndcp_prim = osmo_gprs_sndcp_prim_alloc_sn_xid_req(tlli, apn->pdp.llc_sapi, apn->pdp.nsapi); OSMO_ASSERT(sndcp_prim); sndcp_prim->sn.xid_req.pcomp_rfc1144.active = set->pcomp_rfc1144.active; sndcp_prim->sn.xid_req.pcomp_rfc1144.s01 = set->pcomp_rfc1144.s01; @@ -203,10 +201,8 @@
/* TODO: look up PDP context IDs from apn->ms once we have GMM layer. */ uint32_t tlli = 0xe1c5d364; - uint8_t sapi = OSMO_GPRS_LLC_SAPI_SNDCP3; - uint8_t nsapi = 1;
- sndcp_prim = osmo_gprs_sndcp_prim_alloc_sn_unitdata_req(tlli, sapi, nsapi, npdu, npdu_len); + sndcp_prim = osmo_gprs_sndcp_prim_alloc_sn_unitdata_req(tlli, apn->pdp.llc_sapi, apn->pdp.nsapi, npdu, npdu_len); OSMO_ASSERT(sndcp_prim); rc = osmo_gprs_sndcp_prim_upper_down(sndcp_prim); return rc;