aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith Whyte <keith@rhizomatica.org>2022-10-06 23:29:57 +0100
committerKeith Whyte <keith@rhizomatica.org>2022-10-15 01:55:55 +0100
commit28c5a7dea0b1ff3b81666020f0c0206a01fa1b34 (patch)
tree79bf0e045aeddc274c72d99689a4750800de253c
parent89a52cdd1c37f6315682451d7a2edc7fce5c2536 (diff)
Add support for MSC initiated LCLS-CONNECT-CTRL
-rw-r--r--include/osmocom/msc/ran_msg.h5
-rw-r--r--src/libmsc/ran_msg.c1
-rw-r--r--src/libmsc/ran_msg_a.c20
3 files changed, 26 insertions, 0 deletions
diff --git a/include/osmocom/msc/ran_msg.h b/include/osmocom/msc/ran_msg.h
index 86bf63a5b..2b026a0bd 100644
--- a/include/osmocom/msc/ran_msg.h
+++ b/include/osmocom/msc/ran_msg.h
@@ -69,6 +69,7 @@ enum ran_msg_type {
RAN_MSG_HANDOVER_SUCCEEDED,
RAN_MSG_HANDOVER_COMPLETE,
RAN_MSG_HANDOVER_FAILURE,
+ RAN_MSG_LCLS_CONNECT_CTRL,
};
extern const struct value_string ran_msg_type_names[];
@@ -268,6 +269,10 @@ struct ran_msg {
} handover_failure;
struct ran_handover_request handover_request;
struct ran_handover_request_ack handover_request_ack;
+ struct {
+ enum gsm0808_lcls_config config;
+ enum gsm0808_lcls_control control;
+ } lcls_config_ctrl;
};
};
diff --git a/src/libmsc/ran_msg.c b/src/libmsc/ran_msg.c
index e050303db..f4cacb050 100644
--- a/src/libmsc/ran_msg.c
+++ b/src/libmsc/ran_msg.c
@@ -51,6 +51,7 @@ const struct value_string ran_msg_type_names[] = {
{ RAN_MSG_HANDOVER_DETECT, "HANDOVER_DETECT" },
{ RAN_MSG_HANDOVER_COMPLETE, "HANDOVER_COMPLETE" },
{ RAN_MSG_HANDOVER_FAILURE, "HANDOVER_FAILURE" },
+ { RAN_MSG_LCLS_CONNECT_CTRL, "LCLS_CONNECT_CTRL" },
{}
};
diff --git a/src/libmsc/ran_msg_a.c b/src/libmsc/ran_msg_a.c
index 6af229041..aadc01135 100644
--- a/src/libmsc/ran_msg_a.c
+++ b/src/libmsc/ran_msg_a.c
@@ -388,6 +388,11 @@ static int ran_a_decode_sapi_n_reject(struct ran_dec *ran_dec, struct msgb *msg,
return ran_decoded(ran_dec, &ran_dec_msg);
}
+static int ran_a_decode_lcls_connect_ctrl_ack(struct ran_dec *ran_dec, const struct msgb *msg, const struct tlv_parsed *tp)
+{
+ return 0;
+}
+
static int ran_a_decode_lcls_notification(struct ran_dec *ran_dec, const struct msgb *msg, const struct tlv_parsed *tp)
{
const struct tlv_p_entry *ie_lcls_bss_status = TLVP_GET(tp, GSM0808_IE_LCLS_BSS_STATUS);
@@ -816,6 +821,8 @@ static int ran_a_decode_bssmap(struct ran_dec *ran_dec, struct msgb *bssmap)
return ran_a_decode_sapi_n_reject(ran_dec, bssmap, tp);
case BSS_MAP_MSG_LCLS_NOTIFICATION:
return ran_a_decode_lcls_notification(ran_dec, bssmap, tp);
+ case BSS_MAP_MSG_LCLS_CONNECT_CTRL_ACK:
+ return ran_a_decode_lcls_connect_ctrl_ack(ran_dec, bssmap, tp);
/* From current RAN peer, the Handover origin: */
case BSS_MAP_MSG_HANDOVER_REQUIRED:
@@ -921,6 +928,15 @@ static void _gsm0808_assignment_extend_osmux(struct msgb *msg, uint8_t cid)
msg->l3h[1] = msgb_l3len(msg) - 2;
}
+static struct msgb *ran_a_make_lcls_conn_ctrl_command(enum gsm0808_lcls_config config,
+ enum gsm0808_lcls_control control)
+{
+ struct msgb *msg;
+
+ msg = gsm0808_create_lcls_conn_ctrl(config, control);
+ return msg;
+}
+
/* Compose a BSSAP Assignment Command.
* Passing an RTP address is optional.
* The msub is passed merely for error logging. */
@@ -1278,6 +1294,10 @@ static struct msgb *_ran_a_encode(struct osmo_fsm_inst *caller_fi, const struct
case RAN_MSG_HANDOVER_FAILURE:
return ran_a_make_handover_failure(caller_fi, ran_enc_msg);
+ case RAN_MSG_LCLS_CONNECT_CTRL:
+ return ran_a_make_lcls_conn_ctrl_command(ran_enc_msg->lcls_config_ctrl.config,
+ ran_enc_msg->lcls_config_ctrl.control);
+
default:
LOG_RAN_A_ENC(caller_fi, LOGL_ERROR, "Unimplemented RAN-encode message type: %s\n",
ran_msg_type_name(ran_enc_msg->msg_type));