aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2023-06-21 13:35:38 +0200
committerlaforge <laforge@osmocom.org>2023-07-17 12:29:42 +0000
commit9bbdc34a658d8a8f17f1fe677d8fbd28be363894 (patch)
tree7daccd8b831140874312c0bb9279f277783b2a78
parent2d27e2ccb10d9773d2d8bf5bfe6e8f08d34c7a7c (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.h2
-rw-r--r--src/libmsc/ran_msg_a.c14
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;
}