Add support for MSC initiated LCLS-CONNECT-CTRL
Change-Id: Ib30ee53ded8f09e819eae770489a92cc60b2c9a3
diff --git a/include/osmocom/msc/ran_msg.h b/include/osmocom/msc/ran_msg.h
index 86bf63a..2b026a0 100644
--- a/include/osmocom/msc/ran_msg.h
+++ b/include/osmocom/msc/ran_msg.h
@@ -69,6 +69,7 @@
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 @@
} 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 e050303..f4cacb0 100644
--- a/src/libmsc/ran_msg.c
+++ b/src/libmsc/ran_msg.c
@@ -51,6 +51,7 @@
{ 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 6af2290..aadc011 100644
--- a/src/libmsc/ran_msg_a.c
+++ b/src/libmsc/ran_msg_a.c
@@ -388,6 +388,11 @@
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 @@
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 @@
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 @@
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));