diff options
author | Andreas Eversberg <jolly@eversberg.eu> | 2023-06-21 13:35:38 +0200 |
---|---|---|
committer | laforge <laforge@osmocom.org> | 2023-07-17 12:29:42 +0000 |
commit | 9bbdc34a658d8a8f17f1fe677d8fbd28be363894 (patch) | |
tree | 7daccd8b831140874312c0bb9279f277783b2a78 | |
parent | 2d27e2ccb10d9773d2d8bf5bfe6e8f08d34c7a7c (diff) |
ASCI: Add callref to assignment command
The (optional) call reference is required to assign a calling subscriber
to a voice group/bcast channel. The BSC can then determine to which
existing VGCS/VBS channel the MS is assigned to.
This IE is part of the GSM standard TS 48.008 (see ยง3.2.1.1)
Change-Id: I7955c6e0eebc930f85f360dda46be17cbd39e181
Related: OS#4854
-rw-r--r-- | include/osmocom/msc/ran_msg.h | 2 | ||||
-rw-r--r-- | src/libmsc/ran_msg_a.c | 14 |
2 files changed, 8 insertions, 8 deletions
diff --git a/include/osmocom/msc/ran_msg.h b/include/osmocom/msc/ran_msg.h index 0dadd4f3a..dc1483cb5 100644 --- a/include/osmocom/msc/ran_msg.h +++ b/include/osmocom/msc/ran_msg.h @@ -109,6 +109,8 @@ struct ran_assignment_command { bool call_id_present; uint32_t call_id; struct osmo_lcls *lcls; + bool callref_present; + struct gsm0808_group_callref callref; }; struct ran_cipher_mode_command { diff --git a/src/libmsc/ran_msg_a.c b/src/libmsc/ran_msg_a.c index 570a8d1ed..25330458e 100644 --- a/src/libmsc/ran_msg_a.c +++ b/src/libmsc/ran_msg_a.c @@ -1375,13 +1375,6 @@ static int ran_a_channel_type_to_speech_codec_list(struct gsm0808_speech_codec_l return 0; } -static void _gsm0808_assignment_extend_osmux(struct msgb *msg, uint8_t cid) -{ - OSMO_ASSERT(msg->l3h[1] == msgb_l3len(msg) - 2); /*TL not in len */ - msgb_tv_put(msg, GSM0808_IE_OSMO_OSMUX_CID, cid); - msg->l3h[1] = msgb_l3len(msg) - 2; -} - /* Compose a BSSAP Assignment Command. * Passing an RTP address is optional. * The msub is passed merely for error logging. */ @@ -1468,8 +1461,13 @@ static struct msgb *ran_a_make_assignment_command(struct osmo_fsm_inst *log_fi, return NULL; } + /* Append optional IEs: Group Call Reference and Osmux CID */ + OSMO_ASSERT(msg->l3h[1] == msgb_l3len(msg) - 2); /* TL not in len */ + if (ac->callref_present) + gsm0808_enc_group_callref(msg, &ac->callref); if (ac->osmux_present) - _gsm0808_assignment_extend_osmux(msg, ac->osmux_cid); + msgb_tv_put(msg, GSM0808_IE_OSMO_OSMUX_CID, ac->osmux_cid); + msg->l3h[1] = msgb_l3len(msg) - 2; return msg; } |