Change in libosmocore[master]: SGsAP protocol definitions (header + C file)

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Sun Oct 21 12:35:35 UTC 2018


Harald Welte has submitted this change and it was merged. ( https://gerrit.osmocom.org/11412 )

Change subject: SGsAP protocol definitions (header + C file)
......................................................................

SGsAP protocol definitions (header + C file)

Change-Id: Idddfc9b851eb4c2fa7dd661a9ce1b03a04883109
---
M include/Makefile.am
A include/osmocom/gsm/protocol/gsm_29_118.h
M src/gsm/Makefile.am
A src/gsm/gsm29118.c
M src/gsm/libosmogsm.map
5 files changed, 304 insertions(+), 1 deletion(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/include/Makefile.am b/include/Makefile.am
index 19695d1..59a5fed 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -114,6 +114,7 @@
                        osmocom/gsm/protocol/gsm_09_02.h \
                        osmocom/gsm/protocol/gsm_12_21.h \
 		       osmocom/gsm/protocol/gsm_23_003.h \
+		       osmocom/gsm/protocol/gsm_29_118.h \
                        osmocom/gsm/protocol/gsm_44_318.h \
                        osmocom/gsm/protocol/ipaccess.h \
                        osmocom/gsm/protocol/smpp34_osmocom.h \
diff --git a/include/osmocom/gsm/protocol/gsm_29_118.h b/include/osmocom/gsm/protocol/gsm_29_118.h
new file mode 100644
index 0000000..24e9de2
--- /dev/null
+++ b/include/osmocom/gsm/protocol/gsm_29_118.h
@@ -0,0 +1,169 @@
+#pragma once
+
+
+/* TS 29.118 Section 9.2 */
+enum sgsap_msg_type {
+	/* unassigned */
+	SGSAP_MSGT_PAGING_REQ			= 0x01,
+	SGSAP_MSGT_PAGING_REJ			= 0x02,
+	/* unassigned */
+	SGSAP_MSGT_SERVICE_REQ			= 0x06,
+	SGSAP_MSGT_DL_UD			= 0x07,
+	SGSAP_MSGT_UL_UD			= 0x08,
+	SGSAP_MSGT_LOC_UPD_REQ			= 0x09,
+	SGSAP_MSGT_LOC_UPD_ACK			= 0x0a,
+	SGSAP_MSGT_LOC_UPD_REJ			= 0x0b,
+	SGSAP_MSGT_TMSI_REALL_CMPL		= 0x0c,
+	SGSAP_MSGT_ALERT_REQ			= 0x0d,
+	SGSAP_MSGT_ALERT_ACK			= 0x0e,
+	SGSAP_MSGT_ALERT_REJ			= 0x0f,
+	SGSAP_MSGT_UE_ACT_IND			= 0x10,
+	SGSAP_MSGT_EPS_DET_IND			= 0x11,
+	SGSAP_MSGT_EPS_DET_ACK			= 0x12,
+	SGSAP_MSGT_IMSI_DET_IND			= 0x13,
+	SGSAP_MSGT_IMSI_DET_ACK			= 0x14,
+	SGSAP_MSGT_RESET_IND			= 0x15,
+	SGSAP_MSGT_RESET_ACK			= 0x16,
+	SGSAP_MSGT_SERVICE_ABORT_REQ		= 0x17,
+	SGSAP_MSGT_MO_CSFB_IND			= 0x18,
+	/* unassigned */
+	SGSAP_MSGT_MM_INFO_REQ			= 0x1a,
+	SGSAP_MSGT_RELEASE_REQ			= 0x1b,
+	/* unassigned */
+	SGSAP_MSGT_STATUS			= 0x1d,
+	/* unassigned */
+	SGSAP_MSGT_UE_UNREACHABLE		= 0x1f,
+};
+const struct value_string sgsap_msg_type_names[];
+static inline const char *sgsap_msg_type_name(enum sgsap_msg_type msgt) {
+	return get_value_string(sgsap_msg_type_names, msgt);
+}
+
+/* TS 29.118 Section 9.3 */
+enum sgsap_iei {
+	SGSAP_IE_IMSI				= 0x01,
+	SGSAP_IE_VLR_NAME			= 0x02,
+	SGSAP_IE_TMSI				= 0x03,
+	SGSAP_IE_LAI				= 0x04,
+	SGSAP_IE_CHAN_NEEDED			= 0x05,
+	SGSAP_IE_EMLPP_PRIORITY			= 0x06,
+	SGSAP_IE_TMSI_STATUS			= 0x07,
+	SGSAP_IE_SGS_CAUSE			= 0x08,
+	SGSAP_IE_MME_NAME			= 0x09,
+	SGSAP_IE_EPS_LU_TYPE			= 0x0a,
+	SGSAP_IE_GLOBAL_CN_ID			= 0x0b,
+	SGSAP_IE_MOBILE_ID			= 0x0e,
+	SGSAP_IE_REJECT_CAUSE			= 0x0f,
+	SGSAP_IE_IMSI_DET_EPS_TYPE		= 0x10,
+	SGSAP_IE_IMSI_DET_NONEPS_TYPE		= 0x11,
+	SGSAP_IE_IMEISV				= 0x15,
+	SGSAP_IE_NAS_MSG_CONTAINER		= 0x16,
+	SGSAP_IE_MM_INFO			= 0x17,
+	SGSAP_IE_ERR_MSG			= 0x1b,
+	SGSAP_IE_CLI				= 0x1c,
+	SGSAP_IE_LCS_CLIENT_ID			= 0x1d,
+	SGSAP_IE_LCS_INDICATOR			= 0x1e,
+	SGSAP_IE_SS_CODE			= 0x1f,
+	SGSAP_IE_SERVICE_INDICATOR		= 0x20,
+	SGSAP_IE_UE_TIMEZONE			= 0x21,
+	SGSAP_IE_MS_CLASSMARK2			= 0x22,
+	SGSAP_IE_TAI				= 0x23,
+	SGSAP_IE_EUTRAN_CGI			= 0x24,
+	SGSAP_IE_UE_EMM_MODE			= 0x25,
+	SGSAP_IE_ADDL_PAGING_INDICATORS		= 0x26,
+	SGSAP_IE_TMSI_BASED_NRI_CONT		= 0x27,
+};
+
+
+/* TS 29.118 Section 9.4.2 */
+enum sgsap_eps_lu_type {
+	SGSAP_EPS_LUT_IMSI_ATTACH		= 0x01,
+	SGSAP_EPS_LUT_NORMAL			= 0x02,
+};
+const struct value_string sgsap_eps_lu_type_names[];
+static inline const char *sgsap_eps_lu_type_name(enum sgsap_eps_lu_type lut) {
+	return get_value_string(sgsap_eps_lu_type_names, lut);
+}
+
+/* TS 29.118 Section 9.4.7 */
+enum sgsap_imsi_det_eps_type {
+	SGSAP_ID_EPS_T_NETWORK_INITIATED	= 0x01,
+	SGSAP_ID_EPS_T_UE_INITIATED		= 0x02,
+	SGSAP_ID_EPS_T_EPS_NOT_ALLOWED		= 0x03,
+};
+const struct value_string sgsap_ismi_det_eps_type_names[];
+static inline const char *sgsap_imsi_det_eps_type_name(enum sgsap_imsi_det_eps_type idt) {
+	return get_value_string(sgsap_ismi_det_eps_type_names, idt);
+}
+
+/* TS 29.118 Section 9.4.8 */
+enum sgsap_imsi_det_noneps_type {
+	SGSAP_ID_NONEPS_T_EXPLICIT_UE_NONEPS		= 0x01,
+	SGSAP_ID_NONEPS_T_COMBINED_UE_EPS_NONEPS	= 0x02,
+	SGSAP_ID_NONEPS_T_IMPLICIT_UE_EPS_NONEPS	= 0x03,
+};
+const struct value_string sgsap_ismi_det_noneps_type_names[];
+static inline const char *sgsap_imsi_det_noneps_type_name(enum sgsap_imsi_det_noneps_type idt) {
+	return get_value_string(sgsap_ismi_det_noneps_type_names, idt);
+}
+
+/* TS 29.118 Section 9.4.17 */
+enum sgsap_service_ind {
+	SGSAP_SERV_IND_CS_CALL		= 0x01,
+	SGSAP_SERV_IND_SMS		= 0x02,
+};
+const struct value_string sgsap_service_ind_names[];
+static inline const char *sgsap_service_ind_name(enum sgsap_service_ind si) {
+	return get_value_string(sgsap_service_ind_names, si);
+}
+
+/* TS 29.118 Section 9.4.18 */
+enum sgsap_sgs_cause {
+	SGSAP_SGS_CAUSE_IMSI_DET_EPS		= 0x01,
+	SGSAP_SGS_CAUSE_IMSI_DET_EPS_NONEPS	= 0x02,
+	SGSAP_SGS_CAUSE_IMSI_UNKNOWN		= 0x03,
+	SGSAP_SGS_CAUSE_IMSI_DET_NON_EPS	= 0x04,
+	SGSAP_SGS_CAUSE_IMSI_IMPL_DET_NON_EPS	= 0x05,
+	SGSAP_SGS_CAUSE_UE_UNREACHABLE		= 0x06,
+	SGSAP_SGS_CAUSE_MSG_INCOMP_STATE	= 0x07,
+	SGSAP_SGS_CAUSE_MISSING_MAND_IE		= 0x08,
+	SGSAP_SGS_CAUSE_INVALID_MAND_IE		= 0x09,
+	SGSAP_SGS_CAUSE_COND_IE_ERROR		= 0x0a,
+	SGSAP_SGS_CAUSE_SEMANT_INCORR_MSG	= 0x0b,
+	SGSAP_SGS_CAUSE_MSG_UNKNOWN		= 0x0c,
+	SGSAP_SGS_CAUSE_MT_CSFB_REJ_USER	= 0x0d,
+	SGSAP_SGS_CAUSE_UE_TEMP_UNREACHABLE	= 0x0e,
+};
+const struct value_string sgsap_sgs_cause_names[];
+static inline const char *sgsap_sgs_cause_name(enum sgsap_sgs_cause cause) {
+	return get_value_string(sgsap_sgs_cause_names, cause);
+}
+
+/* TS 29.118 Section 9.4.21c */
+enum sgsap_ue_emm_mode {
+	SGSAP_UE_EMM_MODE_IDLE			= 0x00,
+	SGSAP_UE_EMM_MODE_CONNECTED		= 0x01,
+};
+const struct value_string sgsap_ue_emm_mode_names[];
+static inline const char *sgsap_ue_emm_mode_name(enum sgsap_ue_emm_mode mode) {
+	return get_value_string(sgsap_ue_emm_mode_names, mode);
+}
+
+/* TS 29.118 Section 10.1 Table 10.1.2 */
+#define SGS_TS5_DEFAULT		10	/* Guards the Paging Procedure at the VLR */
+#define SGS_TS6_2_DEFAULT	40	/* Guards the TMSI reallocation procedure */
+#define SGS_TS7_DEFAULT		 4	/* Guards the non-EPS alert procedure */
+#define SGS_TS11_DEFAULT	 4	/* Guards the VLR reset procedure */
+#define SGS_TS14_DEFAULT	10	/* Guards the UE fallback to UTRAN/GERAN */
+#define SGS_TS15_DEFAULT	10	/* Guards the MO UE fallback to UTRAN/GERAN */
+
+/* TS 29.118 Section 10.2 Table 10.2.1 */
+#define SGS_NS7_DEFAULT		2
+#define SGS_NS11_DEFAULT	2
+/* TS 29.118 Section 10.2 Table 10.2.2 */
+#define SGS_NS8_DEFAULT		2
+#define SGS_NS9_DEFAULT		2
+#define SGS_NS10_DEFAULT	2
+#define SGS_NS12_DEFAULT	2
+
+const struct tlv_definition sgsap_ie_tlvdef;
diff --git a/src/gsm/Makefile.am b/src/gsm/Makefile.am
index 29299a6..e28ea33 100644
--- a/src/gsm/Makefile.am
+++ b/src/gsm/Makefile.am
@@ -30,7 +30,8 @@
 			milenage/aes-internal.c milenage/aes-internal-enc.c \
 			milenage/milenage.c gan.c ipa.c gsm0341.c apn.c \
 			gsup.c gprs_gea.c gsm0503_conv.c oap.c gsm0808_utils.c \
-			gsm23003.c mncc.c bts_features.c oap_client.c
+			gsm23003.c mncc.c bts_features.c oap_client.c \
+			gsm29118.c
 libgsmint_la_LDFLAGS = -no-undefined
 libgsmint_la_LIBADD = $(top_builddir)/src/libosmocore.la
 
diff --git a/src/gsm/gsm29118.c b/src/gsm/gsm29118.c
new file mode 100644
index 0000000..de625a9
--- /dev/null
+++ b/src/gsm/gsm29118.c
@@ -0,0 +1,123 @@
+#include <osmocom/core/utils.h>
+#include <osmocom/gsm/tlv.h>
+
+#include <osmocom/gsm/protocol/gsm_29_118.h>
+
+const struct value_string sgsap_msg_type_names[] = {
+	{ SGSAP_MSGT_PAGING_REQ,	"PAGING-REQUEST" },
+	{ SGSAP_MSGT_PAGING_REJ,	"PAGING-REJECT" },
+	{ SGSAP_MSGT_SERVICE_REQ,	"SERVICE-REQUEST" },
+	{ SGSAP_MSGT_DL_UD,		"DOWNLINK-UNITDATA" },
+	{ SGSAP_MSGT_UL_UD,		"UPLINK-UNITDATA" },
+	{ SGSAP_MSGT_LOC_UPD_REQ,	"LOCATION-UPDATE-REQUEST" },
+	{ SGSAP_MSGT_LOC_UPD_ACK,	"LOCATION-UPDATE-ACCEPT" },
+	{ SGSAP_MSGT_LOC_UPD_REJ,	"LOCATION-UPDATE-REJECT" },
+	{ SGSAP_MSGT_TMSI_REALL_CMPL,	"TMSI-REALLOCATION-COMPLETE" },
+	{ SGSAP_MSGT_ALERT_REQ,		"ALERT-REQQUEST" },
+	{ SGSAP_MSGT_ALERT_ACK,		"ALERT-ACK" },
+	{ SGSAP_MSGT_ALERT_REJ,		"ALERT-REJECT" },
+	{ SGSAP_MSGT_UE_ACT_IND,	"UE-ACTIVITY-INDICATION" },
+	{ SGSAP_MSGT_EPS_DET_IND,	"EPS-DETACH-INDICATION" },
+	{ SGSAP_MSGT_EPS_DET_ACK,	"EPS-DETACH-ACK" },
+	{ SGSAP_MSGT_IMSI_DET_IND,	"IMSI-DETACH-INDICATION" },
+	{ SGSAP_MSGT_IMSI_DET_ACK,	"IMSI-DETACH-ACK" },
+	{ SGSAP_MSGT_RESET_IND,		"RESET-INDICATION" },
+	{ SGSAP_MSGT_RESET_ACK,		"RESET-ACK" },
+	{ SGSAP_MSGT_SERVICE_ABORT_REQ,	"SERVICE-ABORT-REQUEST" },
+	{ SGSAP_MSGT_MO_CSFB_IND,	"MO-CSFB-INDICATION" },
+	{ SGSAP_MSGT_MM_INFO_REQ,	"MM-INFO-REQUEST" },
+	{ SGSAP_MSGT_RELEASE_REQ,	"RELEASE-REQUEST" },
+	{ SGSAP_MSGT_STATUS,		"STATUS" },
+	{ SGSAP_MSGT_UE_UNREACHABLE,	"UE-UNREACHABLE" },
+	{ 0, NULL }
+};
+
+const struct value_string sgsap_eps_lu_type_names[] = {
+	{ SGSAP_EPS_LUT_IMSI_ATTACH,	"IMSI Attach" },
+	{ SGSAP_EPS_LUT_NORMAL,		"Normal" },
+	{ 0, NULL }
+};
+
+const struct value_string sgsap_ismi_det_eps_type_names[] = {
+	{ SGSAP_ID_EPS_T_NETWORK_INITIATED,	"Network initiated IMSI detach from EPS" },
+	{ SGSAP_ID_EPS_T_UE_INITIATED,		"UE initiated IMSI detach from EPS" },
+	{ SGSAP_ID_EPS_T_EPS_NOT_ALLOWED,	"EPS not allowed" },
+	{ 0, NULL }
+};
+
+const struct value_string sgsap_ismi_det_noneps_type_names[] = {
+	{ SGSAP_ID_NONEPS_T_EXPLICIT_UE_NONEPS,
+	  "Explicit UE initiated IMSI detach from non-EPS" },
+	{ SGSAP_ID_NONEPS_T_COMBINED_UE_EPS_NONEPS,
+	  "Combined UE initiated IMSI detach from EPS and non-EPS" },
+	{ SGSAP_ID_NONEPS_T_IMPLICIT_UE_EPS_NONEPS,
+	  "Implicit network initiated IMSI detach from EPS and non-EPS" },
+	{ 0, NULL }
+};
+
+const struct value_string sgsap_service_ind_names[] = {
+	{ SGSAP_SERV_IND_CS_CALL,	"CS Call" },
+	{ SGSAP_SERV_IND_SMS,		"SMS" },
+	{ 0, NULL }
+};
+
+const struct value_string sgsap_sgs_cause_names[] = {
+	{ SGSAP_SGS_CAUSE_IMSI_DET_EPS,		"IMSI detached for EPS" },
+	{ SGSAP_SGS_CAUSE_IMSI_DET_EPS_NONEPS,	"IMSI detached for EPS and non-EPS" },
+	{ SGSAP_SGS_CAUSE_IMSI_UNKNOWN,		"IMSI unknown" },
+	{ SGSAP_SGS_CAUSE_IMSI_DET_NON_EPS,	"IMSI detached for non-EPS" },
+	{ SGSAP_SGS_CAUSE_IMSI_IMPL_DET_NON_EPS,"IMSI implicitly detached for non-EPS" },
+	{ SGSAP_SGS_CAUSE_UE_UNREACHABLE,	"UE unreachable" },
+	{ SGSAP_SGS_CAUSE_MSG_INCOMP_STATE,	"Message not compatible with protocol state" },
+	{ SGSAP_SGS_CAUSE_MISSING_MAND_IE,	"Missing mandatory IE" },
+	{ SGSAP_SGS_CAUSE_INVALID_MAND_IE,	"Invalid mandatory IE" },
+	{ SGSAP_SGS_CAUSE_COND_IE_ERROR,	"Conditional IE error" },
+	{ SGSAP_SGS_CAUSE_SEMANT_INCORR_MSG,	"Semantically incorrect message" },
+	{ SGSAP_SGS_CAUSE_MSG_UNKNOWN,		"Message unknown" },
+	{ SGSAP_SGS_CAUSE_MT_CSFB_REJ_USER,	"MT CSFB call rejected by user" },
+	{ SGSAP_SGS_CAUSE_UE_TEMP_UNREACHABLE,	"UE temporarily unreachable" },
+	{ 0, NULL }
+};
+
+
+const struct value_string sgsap_ue_emm_mode_names[] = {
+	{ SGSAP_UE_EMM_MODE_IDLE, 		"EMM-IDLE" },
+	{ SGSAP_UE_EMM_MODE_CONNECTED,		"EMM-CONNECTED" },
+	{ 0, NULL }
+};
+
+const struct tlv_definition sgsap_ie_tlvdef = {
+	.def = {
+		[SGSAP_IE_IMSI]			= { TLV_TYPE_TLV },
+		[SGSAP_IE_VLR_NAME]		= { TLV_TYPE_TLV },
+		[SGSAP_IE_TMSI]			= { TLV_TYPE_TLV },
+		[SGSAP_IE_LAI]			= { TLV_TYPE_TLV },
+		[SGSAP_IE_CHAN_NEEDED]		= { TLV_TYPE_TLV },
+		[SGSAP_IE_EMLPP_PRIORITY]	= { TLV_TYPE_TLV },
+		[SGSAP_IE_TMSI_STATUS]		= { TLV_TYPE_TLV },
+		[SGSAP_IE_SGS_CAUSE]		= { TLV_TYPE_TLV },
+		[SGSAP_IE_MME_NAME]		= { TLV_TYPE_TLV },
+		[SGSAP_IE_EPS_LU_TYPE]		= { TLV_TYPE_TLV },
+		[SGSAP_IE_GLOBAL_CN_ID]		= { TLV_TYPE_TLV },
+		[SGSAP_IE_MOBILE_ID]		= { TLV_TYPE_TLV },
+		[SGSAP_IE_REJECT_CAUSE]		= { TLV_TYPE_TLV },
+		[SGSAP_IE_IMSI_DET_EPS_TYPE]	= { TLV_TYPE_TLV },
+		[SGSAP_IE_IMSI_DET_NONEPS_TYPE]	= { TLV_TYPE_TLV },
+		[SGSAP_IE_IMEISV]		= { TLV_TYPE_TLV },
+		[SGSAP_IE_NAS_MSG_CONTAINER]	= { TLV_TYPE_TLV },
+		[SGSAP_IE_MM_INFO]		= { TLV_TYPE_TLV },
+		[SGSAP_IE_ERR_MSG]		= { TLV_TYPE_TLV },
+		[SGSAP_IE_CLI]			= { TLV_TYPE_TLV },
+		[SGSAP_IE_LCS_CLIENT_ID]	= { TLV_TYPE_TLV },
+		[SGSAP_IE_LCS_INDICATOR]	= { TLV_TYPE_TLV },
+		[SGSAP_IE_SS_CODE]		= { TLV_TYPE_TLV },
+		[SGSAP_IE_SERVICE_INDICATOR]	= { TLV_TYPE_TLV },
+		[SGSAP_IE_UE_TIMEZONE]		= { TLV_TYPE_TLV },
+		[SGSAP_IE_MS_CLASSMARK2]	= { TLV_TYPE_TLV },
+		[SGSAP_IE_TAI]			= { TLV_TYPE_TLV },
+		[SGSAP_IE_EUTRAN_CGI]		= { TLV_TYPE_TLV },
+		[SGSAP_IE_UE_EMM_MODE]		= { TLV_TYPE_TLV },
+		[SGSAP_IE_ADDL_PAGING_INDICATORS]={ TLV_TYPE_TLV },
+		[SGSAP_IE_TMSI_BASED_NRI_CONT]	= { TLV_TYPE_TLV },
+	},
+};
diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map
index dcc491d..3cc2ec5 100644
--- a/src/gsm/libosmogsm.map
+++ b/src/gsm/libosmogsm.map
@@ -505,5 +505,14 @@
 osmo_oap_client_init;
 osmo_oap_client_register;
 
+sgsap_msg_type_names;
+sgsap_eps_lu_type_names;
+sgsap_ismi_det_eps_type_names;
+sgsap_ismi_det_noneps_type_names;
+sgsap_service_ind_names;
+sgsap_sgs_cause_names;
+sgsap_ue_emm_mode_names;
+sgsap_ie_tlvdef;
+
 local: *;
 };

-- 
To view, visit https://gerrit.osmocom.org/11412
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: Idddfc9b851eb4c2fa7dd661a9ce1b03a04883109
Gerrit-Change-Number: 11412
Gerrit-PatchSet: 3
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder (1000002)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20181021/f86aeb49/attachment.htm>


More information about the gerrit-log mailing list