osmo_bsc_bssap.c: fix incorrect link_id assignment

Every DTAP message coming from the MSC has a header (see struct
dtap_header) that contains message type, length, and link ID.
The link ID indicates SAPI and channel type of a given message.

In dtap_rcvmsg() we allocate a new message buffer and copy the
received message into it. The old message buffer is freed by
the caller then.

The link ID value parsed from DTAP header is usually being stored
in the control buffer of a message buffer (i.e. msgb->cb). Due to
a mistake, it was stored in the old (to be freed) message, while
the new (to be forwarded) message always had link_id = 0x00!

This change resolves the problem with sending SMS during a voice
call, when MT signalling goes through FACCH, while MO signalling
goes through SACCH.

Change-Id: I7675e1ce4436fad836778261ac9d446fa8f81483
Related: OS#3716
This commit is contained in:
Vadim Yanitskiy 2018-12-01 22:06:37 +07:00
parent 24482ad4e2
commit 0620b37189
1 changed files with 1 additions and 1 deletions

View File

@ -940,7 +940,7 @@ static int dtap_rcvmsg(struct gsm_subscriber_connection *conn,
/* pass it to the filter for extra actions */
rc = bsc_scan_msc_msg(conn, gsm48);
/* Store link_id in msgb->cb */
OBSC_LINKID_CB(msg) = header->link_id;
OBSC_LINKID_CB(gsm48) = header->link_id;
dtap_rc = osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_MT_DTAP, gsm48);
if (rc == BSS_SEND_USSD)
bsc_send_welcome_ussd(conn);