aboutsummaryrefslogtreecommitdiffstats
path: root/src/libmsc/gsm_04_11.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2018-04-09 16:35:01 +0200
committerHarald Welte <laforge@gnumonks.org>2018-04-09 16:41:10 +0200
commit0e2fa5dcb55f77f282f926570b6da0459bd3971c (patch)
tree0dd5b0829ebae764cbbd96066d86be3df90eade6 /src/libmsc/gsm_04_11.c
parent93c7463fcea24517ef367101609f34264570f1d0 (diff)
DTAP: Ensure proper DLCI is used in MSC-originated DTAP
The DLCI field of the DTAP header indicates the SAPI as well as the data link (main DCCH or SACCH). We must make sure to use the correct DLCI when sending DTAP to the BSC. We achieve this by * storing the DLCI in the msgb->cb while parsing the DTAP header * storing the received DLCI (from msgb->cb) in the transaction for mobile-originated transactions * using the trans->dlci to sent msgb->cb when transmitting L3 * filling the DTAP DLCI value from msgb->cb when transmitting DTAP For MSC-originated transactions, we choose a DLCI value corresponding to the service (SAPI=0 for CC, SAPI=3 for SMS) and store that in trans->dlci. Closes: OS#3150 Change-Id: If511b20f52575054cab1346d99a8cb68d827fdbf
Diffstat (limited to 'src/libmsc/gsm_04_11.c')
-rw-r--r--src/libmsc/gsm_04_11.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/libmsc/gsm_04_11.c b/src/libmsc/gsm_04_11.c
index f82aa6d55..aa6049002 100644
--- a/src/libmsc/gsm_04_11.c
+++ b/src/libmsc/gsm_04_11.c
@@ -137,6 +137,7 @@ static int gsm411_cp_sendmsg(struct msgb *msg, struct gsm_trans *trans,
/* Outgoing needs the highest bit set */
gh->proto_discr = trans->protocol | (trans->transaction_id<<4);
gh->msg_type = msg_type;
+ OMSC_LINKID_CB(msg) = trans->dlci;
DEBUGP(DLSMS, "sending CP message (trans=%x)\n", trans->transaction_id);
@@ -947,6 +948,7 @@ int gsm0411_rcv_sms(struct gsm_subscriber_connection *conn,
gsm411_rl_recv, gsm411_mn_send);
trans->conn = msc_subscr_conn_get(conn, MSC_CONN_USE_TRANS_SMS);
+ trans->dlci = OMSC_LINKID_CB(msg); /* DLCI as received from BSC */
new_trans = 1;
cm_service_request_concludes(conn, msg);
@@ -1029,6 +1031,8 @@ int gsm411_send_sms(struct gsm_subscriber_connection *conn, struct gsm_sms *sms)
trans->sms.sms = sms;
trans->conn = msc_subscr_conn_get(conn, MSC_CONN_USE_TRANS_SMS);
+ trans->dlci = 0x03;
+ /* FIXME: specify SACCH in case we already have active TCH */
/* Hardcode SMSC Originating Address for now */
data = (uint8_t *)msgb_put(msg, 8);