aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/gprs/gprs_gmm.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2010-05-18 14:51:18 +0200
committerHarald Welte <laforge@gnumonks.org>2010-05-18 14:51:18 +0200
commit4e38ac7a8aee4d63276d81a4269f6d9124dc1a77 (patch)
treefe3b196eaec86abe4b377e3b91e1b60cc8b11a07 /openbsc/src/gprs/gprs_gmm.c
parent269ae75321174b70d9af622ce0e7a3a91be4a9fd (diff)
[GPRS] SGSN: Correctly set upper 4 bits of PDP address to 0
It's really strange. In GTP those 4 bits are 1, in 04.08 they are zero. Otherwise the IE is exactly the same :/
Diffstat (limited to 'openbsc/src/gprs/gprs_gmm.c')
-rw-r--r--openbsc/src/gprs/gprs_gmm.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/openbsc/src/gprs/gprs_gmm.c b/openbsc/src/gprs/gprs_gmm.c
index 3364713f6..f22421a86 100644
--- a/openbsc/src/gprs/gprs_gmm.c
+++ b/openbsc/src/gprs/gprs_gmm.c
@@ -677,18 +677,27 @@ int gsm48_tx_gsm_act_pdp_acc(struct sgsn_pdp_ctx *pdp)
/* Negotiated LLC SAPI */
msgb_v_put(msg, pdp->sapi);
+
/* FIXME: copy QoS parameters from original request */
//msgb_lv_put(msg, pdp->lib->qos_neg.l, pdp->lib->qos_neg.v);
msgb_lv_put(msg, sizeof(default_qos), (uint8_t *)&default_qos);
+
/* Radio priority 10.5.7.2 */
msgb_v_put(msg, pdp->lib->radio_pri);
+
/* PDP address */
+ /* Highest 4 bits of first byte need to be set to 1, otherwise
+ * the IE is identical with the 04.08 PDP Address IE */
+ pdp->lib->eua.v[0] &= ~0xf0;
msgb_tlv_put(msg, GSM48_IE_GSM_PDP_ADDR,
pdp->lib->eua.l, pdp->lib->eua.v);
+ pdp->lib->eua.v[0] |= 0xf0;
+
/* Optional: Protocol configuration options (FIXME: why 'req') */
if (pdp->lib->pco_req.l && pdp->lib->pco_req.v)
msgb_tlv_put(msg, GSM48_IE_GSM_PROTO_CONF_OPT,
pdp->lib->pco_req.l, pdp->lib->pco_req.v);
+
/* Optional: Packet Flow Identifier */
return gsm48_gmm_sendmsg(msg, 0, pdp->mm);