pespin has uploaded this change for review.
sua: Do SUA specific SNM msg validation
SUA SNM messages contain IEs different than those of related M3UA SNM
messages. Until now it was fine because we only checked for mandatory
IEs, but it's not the case anymore.
Change-Id: Iba32835035867175fa83f3c1e0639918b37432b5
---
M src/sua.c
1 file changed, 80 insertions(+), 5 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-sigtran refs/changes/99/43399/1
diff --git a/src/sua.c b/src/sua.c
index fdd2275..58dc7aa 100644
--- a/src/sua.c
+++ b/src/sua.c
@@ -188,6 +188,12 @@
#define SUA_MSG_PART_CLASS_DATA(mandatory) \
XUA_MSG_PART_CLASS(SUA_IEI_DATA, (mandatory), 0, UINT16_MAX)
+#define SUA_MSG_PART_CLASS_USER_CAUSE(mandatory) \
+ XUA_MSG_PART_CLASS_U32(SUA_IEI_USER_CAUSE, (mandatory))
+
+#define SUA_MSG_PART_CLASS_SMI(mandatory) \
+ XUA_MSG_PART_CLASS_U32(SUA_IEI_SMI, (mandatory))
+
#define SUA_MSG_PART_CLASS_IMPORTANCE(mandatory) \
XUA_MSG_PART_CLASS_U32(SUA_IEI_IMPORTANCE, (mandatory))
@@ -200,6 +206,75 @@
#define SUA_MSG_PART_CLASS_SEGMENTATION(mandatory) \
XUA_MSG_PART_CLASS_U32(SUA_IEI_SEGMENTATION, (mandatory))
+#define SUA_MSG_PART_CLASS_CONG_LEVEL(mandatory) \
+ XUA_MSG_PART_CLASS_U32(SUA_IEI_CONG_LEVEL, (mandatory))
+
+#define SUA_MSG_PART_CLASS_SSN(mandatory) \
+ XUA_MSG_PART_CLASS_U32(SUA_IEI_SSN, (mandatory))
+
+/* SNM */
+static const struct xua_msg_part_class duna_ies[] = {
+ SUA_MSG_PART_CLASS_ROUTE_CTX(false),
+ SUA_MSG_PART_CLASS_AFFECTED_PC(true),
+ SUA_MSG_PART_CLASS_SSN(false),
+ SUA_MSG_PART_CLASS_SMI(false),
+ SUA_MSG_PART_CLASS_INFO_STRING(false),
+ XUA_MSG_PART_CLASS_EOF
+};
+static const struct xua_msg_part_class dava_ies[] = {
+ SUA_MSG_PART_CLASS_ROUTE_CTX(false),
+ SUA_MSG_PART_CLASS_AFFECTED_PC(true),
+ SUA_MSG_PART_CLASS_SSN(false),
+ SUA_MSG_PART_CLASS_SMI(false),
+ SUA_MSG_PART_CLASS_INFO_STRING(false),
+ XUA_MSG_PART_CLASS_EOF
+};
+static const struct xua_msg_part_class daud_ies[] = {
+ SUA_MSG_PART_CLASS_ROUTE_CTX(false),
+ SUA_MSG_PART_CLASS_AFFECTED_PC(true),
+ SUA_MSG_PART_CLASS_SSN(false),
+ SUA_MSG_PART_CLASS_USER_CAUSE(false),
+ SUA_MSG_PART_CLASS_INFO_STRING(false),
+ XUA_MSG_PART_CLASS_EOF
+};
+static const struct xua_msg_part_class scon_ies[] = {
+ SUA_MSG_PART_CLASS_ROUTE_CTX(false),
+ SUA_MSG_PART_CLASS_AFFECTED_PC(true),
+ SUA_MSG_PART_CLASS_SSN(false),
+ SUA_MSG_PART_CLASS_CONG_LEVEL(true),
+ SUA_MSG_PART_CLASS_SMI(false),
+ SUA_MSG_PART_CLASS_INFO_STRING(false),
+ XUA_MSG_PART_CLASS_EOF
+};
+static const struct xua_msg_part_class dupu_ies[] = {
+ SUA_MSG_PART_CLASS_ROUTE_CTX(false),
+ SUA_MSG_PART_CLASS_AFFECTED_PC(true),
+ SUA_MSG_PART_CLASS_USER_CAUSE(true),
+ SUA_MSG_PART_CLASS_INFO_STRING(false),
+ XUA_MSG_PART_CLASS_EOF
+};
+static const struct xua_msg_part_class drst_ies[] = {
+ SUA_MSG_PART_CLASS_ROUTE_CTX(false),
+ SUA_MSG_PART_CLASS_AFFECTED_PC(true),
+ SUA_MSG_PART_CLASS_SSN(false),
+ SUA_MSG_PART_CLASS_SMI(false),
+ SUA_MSG_PART_CLASS_INFO_STRING(false),
+ XUA_MSG_PART_CLASS_EOF
+};
+const struct xua_msg_class sua_msg_class_snm = {
+ .name = "SNM",
+ /* message types are same as m3ua: */
+ .msgt_names = m3ua_snm_msgt_names,
+ .ies = {
+ IES(SUA_SNM_DUNA, duna_ies),
+ IES(SUA_SNM_DAVA, dava_ies),
+ IES(SUA_SNM_DAUD, daud_ies),
+ IES(SUA_SNM_SCON, scon_ies),
+ IES(SUA_SNM_DUPU, dupu_ies),
+ IES(SUA_SNM_DRST, drst_ies),
+ },
+};
+
static const struct xua_msg_part_class cldt_ies[] = {
SUA_MSG_PART_CLASS_ROUTE_CTX(true),
SUA_MSG_PART_CLASS_PROTO_CLASS(true),
@@ -232,7 +307,7 @@
{ SUA_CL_CLDR, "CLDR" },
{ 0, NULL }
};
-static const struct xua_msg_class msg_class_cl = {
+static const struct xua_msg_class sua_msg_class_cl = {
.name = "CL",
.msgt_names = sua_cl_msgt_names,
.iei_names = sua_iei_names,
@@ -357,7 +432,7 @@
{ SUA_CO_COIT, "COIT" },
{ 0, NULL }
};
-static const struct xua_msg_class msg_class_co = {
+static const struct xua_msg_class sua_msg_class_co = {
.name = "CO",
.msgt_names = sua_co_msgt_names,
.iei_names = sua_iei_names,
@@ -383,11 +458,11 @@
.log_subsys = DLSUA,
.class = {
[SUA_MSGC_MGMT] = &m3ua_msg_class_mgmt,
- [SUA_MSGC_SNM] = &m3ua_msg_class_snm,
+ [SUA_MSGC_SNM] = &sua_msg_class_snm,
[SUA_MSGC_ASPSM] = &m3ua_msg_class_aspsm,
[SUA_MSGC_ASPTM] = &m3ua_msg_class_asptm,
- [SUA_MSGC_CL] = &msg_class_cl,
- [SUA_MSGC_CO] = &msg_class_co,
+ [SUA_MSGC_CL] = &sua_msg_class_cl,
+ [SUA_MSGC_CO] = &sua_msg_class_co,
[SUA_MSGC_RKM] = &m3ua_msg_class_rkm,
},
};
To view, visit change 43399. To unsubscribe, or for help writing mail filters, visit settings.