laforge has submitted this change. (
https://gerrit.osmocom.org/c/osmo-msc/+/33504 )
Change subject: ASCI: Add function to receive VGCS/VBS messages from BSS
......................................................................
ASCI: Add function to receive VGCS/VBS messages from BSS
A voice group/broadcast call has no SCCP connection that is related 1:1
to a calling or called subscriber. Instead there are multiple connections
between MSC and BSS. Some of them control the uplink for each BSS and
some of them assign the channels for each BTS.
SCCP connections are maintained by the VGCS call control. Message from the
RAN are directly forwarded to the VGCS call control.
Change-Id: Ie4a2f19ba75140a6f2de02b709597239c01f02a2
Related: OS#4854
---
M include/osmocom/msc/msc_a.h
M src/libmsc/ran_peer.c
2 files changed, 38 insertions(+), 10 deletions(-)
Approvals:
laforge: Looks good to me, approved
pespin: Looks good to me, but someone else must approve
Jenkins Builder: Verified
diff --git a/include/osmocom/msc/msc_a.h b/include/osmocom/msc/msc_a.h
index 5256744..bef7417 100644
--- a/include/osmocom/msc/msc_a.h
+++ b/include/osmocom/msc/msc_a.h
@@ -37,6 +37,8 @@
#include <osmocom/msc/neighbor_ident.h>
struct ran_infra;
+struct vgcs_bss;
+struct vgcs_bss_cell;
#define MSC_A_USE_LOCATION_UPDATING "lu"
#define MSC_A_USE_CM_SERVICE_CC "cm_service_cc"
@@ -220,6 +222,9 @@
void msc_a_release_cn(struct msc_a *msc_a);
void msc_a_release_mo(struct msc_a *msc_a, enum gsm48_gsm_cause gsm_cause);
+int msc_a_rx_vgcs_bss(struct vgcs_bss *bss, struct ran_conn *from_conn, struct msgb
*msg);
+int msc_a_rx_vgcs_cell(struct vgcs_bss_cell *cell, struct ran_conn *from_conn, struct
msgb *msg);
+
int msc_a_ran_decode_cb(struct osmo_fsm_inst *msc_a_fi, void *data, const struct ran_msg
*msg);
int msc_a_vlr_set_cipher_mode(void *_msc_a, bool umts_aka, bool retrieve_imeisv);
diff --git a/src/libmsc/ran_peer.c b/src/libmsc/ran_peer.c
index 038ef44..880619d 100644
--- a/src/libmsc/ran_peer.c
+++ b/src/libmsc/ran_peer.c
@@ -33,6 +33,7 @@
#include <osmocom/msc/vlr.h>
#include <osmocom/msc/ran_conn.h>
#include <osmocom/msc/cell_id_list.h>
+#include <osmocom/msc/msc_vgcs.h>
static struct osmo_fsm ran_peer_fsm;
@@ -393,18 +394,22 @@
OSMO_ASSERT(ctx->conn);
OSMO_ASSERT(ctx->msg);
- if (!ctx->conn->msc_role) {
+ if (ctx->conn->msc_role) {
+ /* "normal" A connection, dispatch to MSC-I or MSC-T */
+ an_apdu = (struct an_apdu){
+ .an_proto = rp->sri->ran->an_proto,
+ .msg = ctx->msg,
+ };
+ osmo_fsm_inst_dispatch(ctx->conn->msc_role, MSC_EV_FROM_RAN_UP_L2,
&an_apdu);
+ } else if (ctx->conn->vgcs.bss) {
+ /* VGCS call related */
+ msc_a_rx_vgcs_bss(ctx->conn->vgcs.bss, ctx->conn, ctx->msg);
+ } else if (ctx->conn->vgcs.cell) {
+ /* VGCS channel related */
+ msc_a_rx_vgcs_cell(ctx->conn->vgcs.cell, ctx->conn, ctx->msg);
+ } else
LOG_RAN_PEER(rp, LOGL_ERROR,
"Rx CO message on conn that is not associated with any MSC role\n");
- return;
- }
-
- an_apdu = (struct an_apdu){
- .an_proto = rp->sri->ran->an_proto,
- .msg = ctx->msg,
- };
-
- osmo_fsm_inst_dispatch(ctx->conn->msc_role, MSC_EV_FROM_RAN_UP_L2,
&an_apdu);
return;
case RAN_PEER_EV_MSG_DOWN_CO_INITIAL:
--
To view, visit
https://gerrit.osmocom.org/c/osmo-msc/+/33504
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Change-Id: Ie4a2f19ba75140a6f2de02b709597239c01f02a2
Gerrit-Change-Number: 33504
Gerrit-PatchSet: 19
Gerrit-Owner: jolly <andreas(a)eversberg.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-CC: neels <nhofmeyr(a)sysmocom.de>
Gerrit-MessageType: merged