Remaining TODO: handle diff MME_UE_S1AP_ID, asn1c compare not tested
This commit is contained in:
@@ -1677,6 +1677,7 @@ add_executable(test_epc_play_scenario
|
||||
${OPENAIR2_DIR}/COMMON/messages_types.h
|
||||
${OPENAIR_BIN_DIR}/messages_xml.h
|
||||
)
|
||||
target_include_directories(test_epc_play_scenario PUBLIC /usr/local/share/asn1c)
|
||||
target_link_libraries (test_epc_play_scenario
|
||||
-Wl,--start-group RRC_LIB S1AP_LIB X2AP_LIB GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS ${ITTI_LIB} ${MSC_LIB} -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES}
|
||||
)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -36,7 +36,7 @@ def outputHeaderToFile(f, filename):
|
||||
f.write("""/*******************************************************************************
|
||||
|
||||
Eurecom OpenAirInterface
|
||||
Copyright(c) 1999 - 2013 Eurecom
|
||||
Copyright(c) 1999 - 2015 Eurecom
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms and conditions of the GNU General Public License,
|
||||
@@ -267,7 +267,7 @@ for key in iesDefs:
|
||||
f.write(" * \\param %s Pointer to the ASN1 structure.\n" % (firstlower))
|
||||
f.write(" * \\param %s Pointer to the ASN1 structure.\n" % (firstlower))
|
||||
f.write(" **/\n")
|
||||
f.write("long %s_compare_%s(\n" % (fileprefix, keylowerunderscore))
|
||||
f.write("asn_comp_rval_t * %s_compare_%s(\n" % (fileprefix, keylowerunderscore))
|
||||
f.write(" %s_t *%s1,\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
|
||||
f.write(" %s_t *%s2);\n\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
|
||||
|
||||
@@ -311,7 +311,7 @@ for key in iesDefs:
|
||||
f.write(" * \\param %s Pointer to the IES structure.\n" % (firstlower))
|
||||
f.write(" * \\param %s Pointer to the IES structure.\n" % (firstlower))
|
||||
f.write(" **/\n")
|
||||
f.write("long %s_compare_%s(\n" % (fileprefix, firstlower.lower()))
|
||||
f.write("asn_comp_rval_t * %s_compare_%s(\n" % (fileprefix, firstlower.lower()))
|
||||
f.write(" %sIEs_t *%s1,\n" % (asn1cStruct, firstlower))
|
||||
f.write(" %sIEs_t *%s2);\n\n" % (asn1cStruct, firstlower))
|
||||
|
||||
@@ -761,11 +761,12 @@ for key in iesDefs:
|
||||
if len(iesDefs[key]["ies"]) == 0:
|
||||
continue
|
||||
|
||||
f.write("long %s_compare_%s(\n" % (fileprefix, re.sub('-', '_', structName.lower())))
|
||||
f.write("asn_comp_rval_t * %s_compare_%s(\n" % (fileprefix, re.sub('-', '_', structName.lower())))
|
||||
f.write(" %s_t *%s1,\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
|
||||
f.write(" %s_t *%s2) {\n\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
|
||||
|
||||
f.write(" long rv = 0;\n\n")
|
||||
f.write(" asn_comp_rval_t *rv = NULL;\n\n")
|
||||
f.write(" asn_comp_rval_t *rv2 = NULL;\n\n")
|
||||
|
||||
f.write(" assert(%s1 != NULL);\n" % (lowerFirstCamelWord(re.sub('-', '_', key))));
|
||||
f.write(" assert(%s2 != NULL);\n" % (lowerFirstCamelWord(re.sub('-', '_', key))));
|
||||
@@ -784,7 +785,7 @@ for key in iesDefs:
|
||||
if loop == 1:
|
||||
#f.write(" %s_IE_t *ie1 = NULL;\n" % (fileprefix_first_upper))
|
||||
#f.write(" %s_IE_t *ie2 = NULL;\n" % (fileprefix_first_upper))
|
||||
f.write(" if (%s1->presenceMask != %s2->presenceMask) return -1;\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), lowerFirstCamelWord(re.sub('-', '_', key))))
|
||||
f.write(" if (%s1->presenceMask != %s2->presenceMask) {rv=calloc(1,sizeof(asn_comp_rval_t));rv->name = asn_DEF_%s.name;rv->structure1 = %s1;rv->structure2 = %s2;rv->err_code = COMPARE_ERR_CODE_VALUE_NULL; return rv;}\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), lowerFirstCamelWord(re.sub('-', '_', key)), ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', key)), lowerFirstCamelWord(re.sub('-', '_', key))))
|
||||
|
||||
if ie[3] == "optional":
|
||||
f.write(" /* Optional field */\n")
|
||||
@@ -795,25 +796,61 @@ for key in iesDefs:
|
||||
|
||||
if ie[2] in ieofielist.keys():
|
||||
f.write(" /* collection field */\n")
|
||||
f.write(" rv = %s_compare_%s(&%s1->%s, &%s2->%s);\n" % (fileprefix, ietypeunderscore.lower(), lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower ))
|
||||
f.write(" if (rv != 0) {rv = rv << 8; rv |= %s_ProtocolIE_ID_id_%s; return rv;}\n" % (fileprefix_first_upper, ienameunderscore))
|
||||
f.write(" rv2 = %s_compare_%s(&%s1->%s, &%s2->%s);\n" % (fileprefix, ietypeunderscore.lower(), lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower ))
|
||||
f.write(" if(rv2) {")
|
||||
f.write(" if (NULL == rv) {")
|
||||
f.write(" rv = rv2;")
|
||||
f.write(" } else {")
|
||||
f.write(" rv2->next = rv;")
|
||||
f.write(" rv = rv2;")
|
||||
f.write(" }")
|
||||
f.write(" rv2 = NULL;")
|
||||
f.write(" }")
|
||||
else:
|
||||
f.write(" /* simple field */\n")
|
||||
f.write(" rv = asn_DEF_%s.compare(&asn_DEF_%s, &%s1->%s, &asn_DEF_%s, &%s2->%s); \n" % (ietypeunderscore, ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower, ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower ))
|
||||
f.write(" if (rv != 0) {rv = rv << 8; rv |= %s_ProtocolIE_ID_id_%s; return rv;}\n" % (fileprefix_first_upper, ienameunderscore))
|
||||
f.write(" rv2 = asn_DEF_%s.compare(&asn_DEF_%s, &%s1->%s, &asn_DEF_%s, &%s2->%s); \n" % (ietypeunderscore, ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower, ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower ))
|
||||
f.write(" if (rv2) {")
|
||||
f.write(" if (NULL == rv) {")
|
||||
f.write(" rv = rv2;")
|
||||
f.write(" } else {")
|
||||
f.write(" rv2->next = rv;")
|
||||
f.write(" rv = rv2;")
|
||||
f.write(" }")
|
||||
f.write(" rv2 = NULL;")
|
||||
f.write(" if (!rv->name) rv->name = asn_DEF_%s.name;" % (ietypeunderscore))
|
||||
f.write(" }")
|
||||
|
||||
f.write(" assert(0);\n");
|
||||
f.write(" }\n\n")
|
||||
|
||||
else:
|
||||
if ie[2] in ieofielist.keys():
|
||||
f.write(" /* Mandatory collection field */\n")
|
||||
f.write(" rv = %s_compare_%s(&%s1->%s, &%s2->%s);\n" % (fileprefix, ietypeunderscore.lower(), lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower ))
|
||||
f.write(" if (rv != 0) {rv = rv << 8; rv |= %s_ProtocolIE_ID_id_%s; return rv;}\n" % (fileprefix_first_upper, ienameunderscore))
|
||||
f.write(" rv2 = %s_compare_%s(&%s1->%s, &%s2->%s);\n" % (fileprefix, ietypeunderscore.lower(), lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower ))
|
||||
f.write(" if (rv2) {\n")
|
||||
f.write(" if (NULL == rv) {\n")
|
||||
f.write(" rv = rv2;\n")
|
||||
f.write(" } else {\n")
|
||||
f.write(" rv2->next = rv;\n")
|
||||
f.write(" rv = rv2;\n")
|
||||
f.write(" }\n")
|
||||
f.write(" rv2 = NULL;\n")
|
||||
f.write(" }\n")
|
||||
|
||||
else:
|
||||
f.write(" /* Mandatory simple field */\n")
|
||||
f.write(" rv = asn_DEF_%s.compare(&asn_DEF_%s, &%s1->%s, &asn_DEF_%s, &%s2->%s);\n" % (ietypeunderscore, ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower, ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower ))
|
||||
f.write(" if (rv != 0) {rv = rv << 8; rv |= %s_ProtocolIE_ID_id_%s; return rv;}\n" % (fileprefix_first_upper, ienameunderscore))
|
||||
f.write(" return 0;\n")
|
||||
f.write(" rv2 = asn_DEF_%s.compare(&asn_DEF_%s, &%s1->%s, &asn_DEF_%s, &%s2->%s);\n" % (ietypeunderscore, ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower, ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower ))
|
||||
f.write(" if(rv2) {\n")
|
||||
f.write(" if (NULL == rv) {\n")
|
||||
f.write(" rv = rv2;\n")
|
||||
f.write(" } else {\n")
|
||||
f.write(" rv2->next = rv;\n")
|
||||
f.write(" rv = rv2;\n")
|
||||
f.write(" }\n")
|
||||
f.write(" rv2 = NULL;\n")
|
||||
f.write(" if (!rv->name) rv->name = asn_DEF_%s.name;\n" % (ietypeunderscore))
|
||||
f.write(" }\n")
|
||||
f.write(" return rv;\n")
|
||||
f.write("}\n\n")
|
||||
|
||||
for (key, value) in iesDefs.items():
|
||||
@@ -832,19 +869,29 @@ for (key, value) in iesDefs.items():
|
||||
|
||||
f.write("extern asn_TYPE_descriptor_t asn_DEF_%s;\n" % (ietypeunderscore))
|
||||
|
||||
f.write("long %s_compare_%s(\n" % (fileprefix, re.sub('-', '_', i).lower()))
|
||||
f.write("asn_comp_rval_t * %s_compare_%s(\n" % (fileprefix, re.sub('-', '_', i).lower()))
|
||||
f.write(" %sIEs_t *%sIEs1,\n" % (re.sub('-', '_', i), lowerFirstCamelWord(re.sub('-', '_', i))))
|
||||
f.write(" %sIEs_t *%sIEs2) {\n\n" % (re.sub('-', '_', i), lowerFirstCamelWord(re.sub('-', '_', i))))
|
||||
f.write(" int i;\n")
|
||||
f.write(" long rv = 0;\n")
|
||||
f.write(" asn_comp_rval_t *rv = NULL;\n\n")
|
||||
f.write(" asn_comp_rval_t *rv2 = NULL;\n\n")
|
||||
|
||||
|
||||
f.write(" assert(%sIEs1 != NULL);\n" % (lowerFirstCamelWord(re.sub('-', '_', i))));
|
||||
f.write(" assert(%sIEs2 != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', i))));
|
||||
|
||||
f.write(" for (i = 0; i < %sIEs1->%s.count; i++) {\n" % (lowerFirstCamelWord(re.sub('-', '_', i)), re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
|
||||
f.write(" rv = asn_DEF_%s.compare(&asn_DEF_%s, %sIEs1->%s.array[i], &asn_DEF_%s, %sIEs2->%s.array[i]);\n" % (ietypeunderscore, ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', i)), re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))), ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', i)), re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
|
||||
f.write(" if (rv != 0) return rv;\n")
|
||||
f.write(" rv2 = asn_DEF_%s.compare(&asn_DEF_%s, %sIEs1->%s.array[i], &asn_DEF_%s, %sIEs2->%s.array[i]);\n" % (ietypeunderscore, ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', i)), re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))), ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', i)), re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
|
||||
f.write(" if(rv2) {")
|
||||
f.write(" if (NULL == rv) {")
|
||||
f.write(" rv = rv2;")
|
||||
f.write(" } else {")
|
||||
f.write(" rv2->next = rv;")
|
||||
f.write(" rv = rv2;")
|
||||
f.write(" }")
|
||||
f.write(" rv2 = NULL;")
|
||||
f.write(" }")
|
||||
f.write(" }\n")
|
||||
f.write(" return 0;\n")
|
||||
f.write(" return rv;\n")
|
||||
f.write("}\n\n")
|
||||
|
||||
|
||||
@@ -286,14 +286,26 @@ const char * const et_chunk_type_cid2str(const sctp_cid_t chunk_type)
|
||||
const char * const et_error_match2str(const int err)
|
||||
{
|
||||
switch (err) {
|
||||
case -ET_ERROR_MATCH_PACKET_SCTP_CHUNK_TYPE: return "SCTP_CHUNK_TYPE"; break;
|
||||
case -ET_ERROR_MATCH_PACKET_SCTP_PPID: return "SCTP_PPID"; break;
|
||||
case -ET_ERROR_MATCH_PACKET_SCTP_ASSOC_ID: return "SCTP_ASSOC_ID"; break;
|
||||
case -ET_ERROR_MATCH_PACKET_SCTP_STREAM_ID: return "SCTP_STREAM_ID"; break;
|
||||
case -ET_ERROR_MATCH_PACKET_SCTP_SSN: return "SCTP_SSN"; break;
|
||||
case -ET_ERROR_MATCH_PACKET_S1AP_PRESENT: return "S1AP_PRESENT"; break;
|
||||
case -ET_ERROR_MATCH_PACKET_S1AP_PROCEDURE_CODE: return "S1AP_PROCEDURE_CODE"; break;
|
||||
case -ET_ERROR_MATCH_PACKET_S1AP_CRITICALITY: return "S1AP_CRITICALITY"; break;
|
||||
// from asn_compare.h
|
||||
case COMPARE_ERR_CODE_NO_MATCH: return "CODE_NO_MATCH"; break;
|
||||
case COMPARE_ERR_CODE_TYPE_MISMATCH: return "TYPE_MISMATCH"; break;
|
||||
case COMPARE_ERR_CODE_TYPE_ARG_NULL: return "TYPE_ARG_NULL"; break;
|
||||
case COMPARE_ERR_CODE_VALUE_NULL: return "VALUE_NULL"; break;
|
||||
case COMPARE_ERR_CODE_VALUE_ARG_NULL: return "VALUE_ARG_NULL"; break;
|
||||
case COMPARE_ERR_CODE_CHOICE_NUM: return "CHOICE_NUM"; break;
|
||||
case COMPARE_ERR_CODE_CHOICE_PRESENT: return "CHOICE_PRESENT"; break;
|
||||
case COMPARE_ERR_CODE_CHOICE_MALFORMED: return "CHOICE_MALFORMED"; break;
|
||||
case COMPARE_ERR_CODE_SET_MALFORMED: return "SET_MALFORMED"; break;
|
||||
case COMPARE_ERR_CODE_COLLECTION_NUM_ELEMENTS: return "COLLECTION_NUM_ELEMENTS"; break;
|
||||
// from play_scenario.h
|
||||
case ET_ERROR_MATCH_PACKET_SCTP_CHUNK_TYPE: return "SCTP_CHUNK_TYPE"; break;
|
||||
case ET_ERROR_MATCH_PACKET_SCTP_PPID: return "SCTP_PPID"; break;
|
||||
case ET_ERROR_MATCH_PACKET_SCTP_ASSOC_ID: return "SCTP_ASSOC_ID"; break;
|
||||
case ET_ERROR_MATCH_PACKET_SCTP_STREAM_ID: return "SCTP_STREAM_ID"; break;
|
||||
case ET_ERROR_MATCH_PACKET_SCTP_SSN: return "SCTP_SSN"; break;
|
||||
case ET_ERROR_MATCH_PACKET_S1AP_PRESENT: return "S1AP_PRESENT"; break;
|
||||
case ET_ERROR_MATCH_PACKET_S1AP_PROCEDURE_CODE: return "S1AP_PROCEDURE_CODE"; break;
|
||||
case ET_ERROR_MATCH_PACKET_S1AP_CRITICALITY: return "S1AP_CRITICALITY"; break;
|
||||
default:
|
||||
AssertFatal (0, "ERROR: Unknown match error %d!(TODO handle an1c error codes)\n", err);
|
||||
}
|
||||
@@ -792,9 +804,9 @@ static void et_usage (
|
||||
fprintf (stdout, "Please report any bug to: %s\n",PACKAGE_BUGREPORT);
|
||||
fprintf (stdout, "Usage: %s [options]\n\n", argv[0]);
|
||||
fprintf (stdout, "\n");
|
||||
fprintf (stdout, "Client options:\n");
|
||||
fprintf (stdout, "\t-S | --server <server network @> File name (with no path) of a test scenario that has to be replayed (TODO in future?)\n");
|
||||
fprintf (stdout, "Server options:\n");
|
||||
//fprintf (stdout, "Client options:\n");
|
||||
//fprintf (stdout, "\t-S | --server <server network @> File name (with no path) of a test scenario that has to be replayed (TODO in future?)\n");
|
||||
//fprintf (stdout, "Server options:\n");
|
||||
fprintf (stdout, "\t-d | --test-dir <dir> Directory where a set of files related to a particular test are located\n");
|
||||
fprintf (stdout, "\t-c | --enb-conf-file <file> Provide an eNB config file, valid for the testbed\n");
|
||||
fprintf (stdout, "\t-s | --scenario <file> File name (with no path) of a test scenario that has to be replayed ()\n");
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
#include "s1ap_ies_defs.h"
|
||||
#include "play_scenario_s1ap_eNB_defs.h"
|
||||
#include "hashtable.h"
|
||||
#include "asn_compare.h"
|
||||
|
||||
// powers of 2
|
||||
#define ET_BIT_MASK_MATCH_SCTP_STREAM 1
|
||||
@@ -179,8 +180,10 @@ typedef enum {
|
||||
ET_FSM_STATE_END
|
||||
} et_fsm_state_t;
|
||||
|
||||
enum COMPARE_ERR_CODE_e;
|
||||
|
||||
typedef enum {
|
||||
ET_ERROR_MATCH_START = 1,
|
||||
ET_ERROR_MATCH_START = COMPARE_ERR_CODE_END,
|
||||
ET_ERROR_MATCH_PACKET_SCTP_CHUNK_TYPE = ET_ERROR_MATCH_START,
|
||||
ET_ERROR_MATCH_PACKET_SCTP_PPID,
|
||||
ET_ERROR_MATCH_PACKET_SCTP_ASSOC_ID,
|
||||
@@ -415,7 +418,8 @@ void et_s1ap_eNB_insert_new_instance(s1ap_eNB_instance_t *new_instance_p);
|
||||
struct s1ap_eNB_mme_data_s *et_s1ap_eNB_get_MME(s1ap_eNB_instance_t *instance_p,int32_t assoc_id, uint16_t cnx_id);
|
||||
s1ap_eNB_instance_t *et_s1ap_eNB_get_instance(instance_t instance);
|
||||
void et_s1ap_eNB_itti_send_sctp_data_req(instance_t instance, int32_t assoc_id, uint8_t *buffer,uint32_t buffer_length, uint16_t stream);
|
||||
long et_s1ap_is_matching(et_s1ap_t * const s1ap1, et_s1ap_t * const s1ap2, const uint32_t constraints);
|
||||
int et_handle_s1ap_mismatch(et_packet_t * const spacket, et_packet_t * const rx_packet);
|
||||
asn_comp_rval_t* et_s1ap_is_matching(et_s1ap_t * const s1ap1, et_s1ap_t * const s1ap2, const uint32_t constraints);
|
||||
et_packet_t* et_build_packet_from_s1ap_data_ind(et_event_s1ap_data_ind_t * const s1ap_data_ind);
|
||||
int et_scenario_set_packet_received(et_packet_t * const packet);
|
||||
int et_s1ap_process_rx_packet(et_event_s1ap_data_ind_t * const sctp_data_ind);
|
||||
@@ -451,10 +455,10 @@ void et_parse_sctp(xmlDocPtr doc, const xmlNode const *sctp_node, et_sctp_hdr_t
|
||||
et_packet_t* et_parse_xml_packet(xmlDocPtr doc, xmlNodePtr node);
|
||||
et_scenario_t* et_generate_scenario(const char * const et_scenario_filename );
|
||||
//-------------------------
|
||||
long et_s1ap_ies_is_matching(const S1AP_PDU_PR present, s1ap_message * const m1, s1ap_message * const m2, const uint32_t constraints);
|
||||
asn_comp_rval_t * et_s1ap_ies_is_matching(const S1AP_PDU_PR present, s1ap_message * const m1, s1ap_message * const m2, const uint32_t constraints);
|
||||
//-------------------------
|
||||
long et_sctp_data_is_matching(sctp_datahdr_t * const sctp1, sctp_datahdr_t * const sctp2, const uint32_t constraints);
|
||||
long et_sctp_is_matching(et_sctp_hdr_t * const sctp1, et_sctp_hdr_t * const sctp2, const uint32_t constraints);
|
||||
asn_comp_rval_t * et_sctp_data_is_matching(sctp_datahdr_t * const sctp1, sctp_datahdr_t * const sctp2, const uint32_t constraints);
|
||||
asn_comp_rval_t * et_sctp_is_matching(et_sctp_hdr_t * const sctp1, et_sctp_hdr_t * const sctp2, const uint32_t constraints);
|
||||
//------------------------------------------------------------------------------
|
||||
void et_print_hex_octets(const unsigned char * const byte_stream, const unsigned long int num);
|
||||
int et_is_file_exists ( const char const * file_nameP, const char const *file_roleP);
|
||||
|
||||
@@ -189,30 +189,363 @@ void et_s1ap_eNB_itti_send_sctp_data_req(instance_t instance, int32_t assoc_id,
|
||||
itti_send_msg_to_task(TASK_SCTP, instance, message_p);
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
long et_s1ap_is_matching(et_s1ap_t * const s1ap1, et_s1ap_t * const s1ap2, const uint32_t constraints)
|
||||
int et_handle_s1ap_mismatch(et_packet_t * const spacket, et_packet_t * const rx_packet)
|
||||
{
|
||||
if (s1ap1->pdu.present != s1ap2->pdu.present) return -ET_ERROR_MATCH_PACKET_S1AP_PRESENT;
|
||||
S1ap_MME_UE_S1AP_ID_t scenario_mme_ue_s1ap_id = 0;
|
||||
S1ap_MME_UE_S1AP_ID_t rx_mme_ue_s1ap_id = 0;
|
||||
S1AP_PDU_PR present;
|
||||
|
||||
present = rx_packet->sctp_hdr.u.data_hdr.payload.pdu.present;
|
||||
|
||||
switch (rx_packet->sctp_hdr.u.data_hdr.payload.message.procedureCode) {
|
||||
case S1ap_ProcedureCode_id_HandoverPreparation:
|
||||
if (present == S1AP_PDU_PR_initiatingMessage) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequiredIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequiredIEs.mme_ue_s1ap_id;
|
||||
} else {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverCommandIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverCommandIEs.mme_ue_s1ap_id;
|
||||
}
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_HandoverResourceAllocation:
|
||||
if (present == S1AP_PDU_PR_initiatingMessage) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequestIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequestIEs.mme_ue_s1ap_id;
|
||||
} else if (present == S1AP_PDU_PR_successfulOutcome) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequestAcknowledgeIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequestAcknowledgeIEs.mme_ue_s1ap_id;
|
||||
} else if (present == S1AP_PDU_PR_unsuccessfulOutcome) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverFailureIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverFailureIEs.mme_ue_s1ap_id;
|
||||
}
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_HandoverNotification:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverNotifyIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverNotifyIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_PathSwitchRequest:
|
||||
//rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_PathSwitchRequestIEs.mme_ue_s1ap_id;
|
||||
//scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_PathSwitchRequestIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_HandoverCancel:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverCancelIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverCancelIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_E_RABSetup:
|
||||
if (present == S1AP_PDU_PR_initiatingMessage) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABSetupRequestIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABSetupRequestIEs.mme_ue_s1ap_id;
|
||||
} else {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABSetupResponseIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABSetupResponseIEs.mme_ue_s1ap_id;
|
||||
}
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_E_RABModify:
|
||||
if (present == S1AP_PDU_PR_initiatingMessage) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABModifyRequestIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABModifyRequestIEs.mme_ue_s1ap_id;
|
||||
} else {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABModifyResponseIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABModifyResponseIEs.mme_ue_s1ap_id;
|
||||
}
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_E_RABRelease:
|
||||
if (present == S1AP_PDU_PR_initiatingMessage) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABReleaseCommandIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABReleaseCommandIEs.mme_ue_s1ap_id;
|
||||
} else {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABReleaseResponseIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABReleaseResponseIEs.mme_ue_s1ap_id;
|
||||
}
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_E_RABReleaseIndication:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABReleaseIndicationIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABReleaseIndicationIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_InitialContextSetup:
|
||||
if (present == S1AP_PDU_PR_initiatingMessage) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_InitialContextSetupRequestIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_InitialContextSetupRequestIEs.mme_ue_s1ap_id;
|
||||
} else {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_InitialContextSetupResponseIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_InitialContextSetupResponseIEs.mme_ue_s1ap_id;
|
||||
}
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_Paging:
|
||||
//rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_PagingIEs.mme_ue_s1ap_id;
|
||||
//scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_PagingIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_downlinkNASTransport:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkNASTransportIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkNASTransportIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_initialUEMessage:
|
||||
//rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_InitialUEMessageIEs.mme_ue_s1ap_id;
|
||||
//scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_InitialUEMessageIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_uplinkNASTransport:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkNASTransportIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkNASTransportIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_Reset:
|
||||
//rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ResetIEs.mme_ue_s1ap_id;
|
||||
//scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ResetIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_ErrorIndication:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ErrorIndicationIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ErrorIndicationIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_NASNonDeliveryIndication:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_NASNonDeliveryIndication_IEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_NASNonDeliveryIndication_IEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_S1Setup:
|
||||
/*if (present == S1AP_PDU_PR_initiatingMessage) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupRequestIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupRequestIEs.mme_ue_s1ap_id;
|
||||
} else if (present == S1AP_PDU_PR_successfulOutcome) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupResponseIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupResponseIEs.mme_ue_s1ap_id;
|
||||
} else if (present == S1AP_PDU_PR_unsuccessfulOutcome) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupFailureIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupFailureIEs.mme_ue_s1ap_id;
|
||||
}*/
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_UEContextReleaseRequest:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseRequestIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseRequestIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_DownlinkS1cdma2000tunneling:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkS1cdma2000tunnelingIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkS1cdma2000tunnelingIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_UplinkS1cdma2000tunneling:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkS1cdma2000tunnelingIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkS1cdma2000tunnelingIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_UEContextModification:
|
||||
if (present == S1AP_PDU_PR_initiatingMessage) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextModificationRequestIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextModificationRequestIEs.mme_ue_s1ap_id;
|
||||
} else if (present == S1AP_PDU_PR_successfulOutcome) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextModificationResponseIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextModificationResponseIEs.mme_ue_s1ap_id;
|
||||
} else if (present == S1AP_PDU_PR_unsuccessfulOutcome) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextModificationFailureIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextModificationFailureIEs.mme_ue_s1ap_id;
|
||||
}
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_UECapabilityInfoIndication:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UECapabilityInfoIndicationIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UECapabilityInfoIndicationIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_UEContextRelease:
|
||||
if (present == S1AP_PDU_PR_initiatingMessage) {
|
||||
//rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseCommandIEs.mme_ue_s1ap_id;
|
||||
//scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseCommandIEs.mme_ue_s1ap_id;
|
||||
} else {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseCompleteIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseCompleteIEs.mme_ue_s1ap_id;
|
||||
}
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_eNBStatusTransfer:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBStatusTransferIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBStatusTransferIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_MMEStatusTransfer:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEStatusTransferIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEStatusTransferIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_DeactivateTrace:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DeactivateTraceIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DeactivateTraceIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_TraceStart:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_TraceStartIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_TraceStartIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_TraceFailureIndication:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_TraceFailureIndicationIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_TraceFailureIndicationIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_ENBConfigurationUpdate:
|
||||
/*if (present == S1AP_PDU_PR_initiatingMessage) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateIEs.mme_ue_s1ap_id;
|
||||
} else if (present == S1AP_PDU_PR_successfulOutcome) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateAcknowledgeIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateAcknowledgeIEs.mme_ue_s1ap_id;
|
||||
} else {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateFailureIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateFailureIEs.mme_ue_s1ap_id;
|
||||
}*/
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_MMEConfigurationUpdate:
|
||||
/*if (present == S1AP_PDU_PR_initiatingMessage) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateIEs.mme_ue_s1ap_id;
|
||||
} else if (present == S1AP_PDU_PR_successfulOutcome) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateAcknowledgeIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateAcknowledgeIEs.mme_ue_s1ap_id;
|
||||
} else {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateFailureIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateFailureIEs.mme_ue_s1ap_id;
|
||||
}*/
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_LocationReportingControl:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_LocationReportingControlIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_LocationReportingControlIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_LocationReportingFailureIndication:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_LocationReportingFailureIndicationIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_LocationReportingFailureIndicationIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_LocationReport:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_LocationReportIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_LocationReportIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_OverloadStart:
|
||||
//rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_OverloadStartIEs.mme_ue_s1ap_id;
|
||||
//scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_OverloadStartIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_OverloadStop:
|
||||
//rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_OverloadStopIEs.mme_ue_s1ap_id;
|
||||
//scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_OverloadStopIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_WriteReplaceWarning:
|
||||
/*if (present == S1AP_PDU_PR_initiatingMessage) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_WriteReplaceWarningRequestIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_WriteReplaceWarningRequestIEs.mme_ue_s1ap_id;
|
||||
} else {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_WriteReplaceWarningResponseIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_WriteReplaceWarningResponseIEs.mme_ue_s1ap_id;
|
||||
}*/
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_eNBDirectInformationTransfer:
|
||||
//rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBDirectInformationTransferIEs.mme_ue_s1ap_id;
|
||||
//scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBDirectInformationTransferIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_MMEDirectInformationTransfer:
|
||||
//rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEDirectInformationTransferIEs.mme_ue_s1ap_id;
|
||||
//scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEDirectInformationTransferIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_PrivateMessage:
|
||||
case S1ap_ProcedureCode_id_eNBConfigurationTransfer:
|
||||
case S1ap_ProcedureCode_id_MMEConfigurationTransfer:
|
||||
AssertFatal(0, "TODO");
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_CellTrafficTrace:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_CellTrafficTraceIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_CellTrafficTraceIEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_Kill:
|
||||
/*if (present == S1AP_PDU_PR_initiatingMessage) {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_KillRequestIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_KillRequestIEs.mme_ue_s1ap_id;
|
||||
} else {
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_KillResponseIEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_KillResponseIEs.mme_ue_s1ap_id;
|
||||
}*/
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_downlinkUEAssociatedLPPaTransport:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_uplinkUEAssociatedLPPaTransport:
|
||||
rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id;
|
||||
scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_downlinkNonUEAssociatedLPPaTransport:
|
||||
//rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkNonUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id;
|
||||
//scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkNonUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_uplinkNonUEAssociatedLPPaTransport:
|
||||
//rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkNonUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id;
|
||||
//scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkNonUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id;
|
||||
break;
|
||||
|
||||
default:
|
||||
AssertFatal(0, "Unknown procedure code %ld", rx_packet->sctp_hdr.u.data_hdr.payload.message.procedureCode);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
asn_comp_rval_t * et_s1ap_is_matching(et_s1ap_t * const s1ap1, et_s1ap_t * const s1ap2, const uint32_t constraints)
|
||||
{
|
||||
asn_comp_rval_t *rv = NULL;
|
||||
if (s1ap1->pdu.present != s1ap2->pdu.present) {rv = calloc(1, sizeof(asn_comp_rval_t)); rv->err_code = ET_ERROR_MATCH_PACKET_S1AP_PRESENT; return rv;}
|
||||
switch (s1ap1->pdu.present) {
|
||||
case S1AP_PDU_PR_NOTHING:
|
||||
break;
|
||||
case S1AP_PDU_PR_initiatingMessage:
|
||||
if (s1ap1->pdu.choice.initiatingMessage.procedureCode != s1ap2->pdu.choice.initiatingMessage.procedureCode) return -ET_ERROR_MATCH_PACKET_S1AP_PROCEDURE_CODE;
|
||||
if (s1ap1->pdu.choice.initiatingMessage.criticality != s1ap2->pdu.choice.initiatingMessage.criticality) return -ET_ERROR_MATCH_PACKET_S1AP_CRITICALITY;
|
||||
if (s1ap1->pdu.choice.initiatingMessage.procedureCode != s1ap2->pdu.choice.initiatingMessage.procedureCode)
|
||||
{rv = calloc(1, sizeof(asn_comp_rval_t)); rv->err_code = ET_ERROR_MATCH_PACKET_S1AP_PROCEDURE_CODE; return rv;}
|
||||
if (s1ap1->pdu.choice.initiatingMessage.criticality != s1ap2->pdu.choice.initiatingMessage.criticality)
|
||||
{rv = calloc(1, sizeof(asn_comp_rval_t)); rv->err_code = ET_ERROR_MATCH_PACKET_S1AP_CRITICALITY; return rv;}
|
||||
break;
|
||||
case S1AP_PDU_PR_successfulOutcome:
|
||||
if (s1ap1->pdu.choice.successfulOutcome.procedureCode != s1ap2->pdu.choice.successfulOutcome.procedureCode) return -ET_ERROR_MATCH_PACKET_S1AP_PROCEDURE_CODE;
|
||||
if (s1ap1->pdu.choice.successfulOutcome.criticality != s1ap2->pdu.choice.successfulOutcome.criticality) return -ET_ERROR_MATCH_PACKET_S1AP_CRITICALITY;
|
||||
if (s1ap1->pdu.choice.successfulOutcome.procedureCode != s1ap2->pdu.choice.successfulOutcome.procedureCode)
|
||||
{rv = calloc(1, sizeof(asn_comp_rval_t)); rv->err_code = ET_ERROR_MATCH_PACKET_S1AP_PROCEDURE_CODE; return rv;}
|
||||
if (s1ap1->pdu.choice.successfulOutcome.criticality != s1ap2->pdu.choice.successfulOutcome.criticality)
|
||||
{rv = calloc(1, sizeof(asn_comp_rval_t)); rv->err_code = ET_ERROR_MATCH_PACKET_S1AP_CRITICALITY; return rv;}
|
||||
break;
|
||||
case S1AP_PDU_PR_unsuccessfulOutcome:
|
||||
if (s1ap1->pdu.choice.unsuccessfulOutcome.procedureCode != s1ap2->pdu.choice.unsuccessfulOutcome.procedureCode) return -ET_ERROR_MATCH_PACKET_S1AP_PROCEDURE_CODE;
|
||||
if (s1ap1->pdu.choice.unsuccessfulOutcome.criticality != s1ap2->pdu.choice.unsuccessfulOutcome.criticality) return -ET_ERROR_MATCH_PACKET_S1AP_CRITICALITY;
|
||||
if (s1ap1->pdu.choice.unsuccessfulOutcome.procedureCode != s1ap2->pdu.choice.unsuccessfulOutcome.procedureCode)
|
||||
{rv = calloc(1, sizeof(asn_comp_rval_t)); rv->err_code = ET_ERROR_MATCH_PACKET_S1AP_PROCEDURE_CODE; return rv;}
|
||||
if (s1ap1->pdu.choice.unsuccessfulOutcome.criticality != s1ap2->pdu.choice.unsuccessfulOutcome.criticality)
|
||||
{rv = calloc(1, sizeof(asn_comp_rval_t)); rv->err_code = ET_ERROR_MATCH_PACKET_S1AP_CRITICALITY; return rv;}
|
||||
break;
|
||||
default:
|
||||
AssertFatal(0, "Unknown pdu.present %d", s1ap1->pdu.present);
|
||||
}
|
||||
|
||||
if (s1ap1->binary_stream_allocated_size == s1ap2->binary_stream_allocated_size) {
|
||||
if (memcmp((void*)s1ap1->binary_stream, (void*)s1ap2->binary_stream, s1ap1->binary_stream_allocated_size) == 0) return 0;
|
||||
if (memcmp((void*)s1ap1->binary_stream, (void*)s1ap2->binary_stream, s1ap1->binary_stream_allocated_size) == 0) return NULL;
|
||||
}
|
||||
// if no matching, may be the scenario need minor corrections (same enb_ue_s1ap_id but need to update mme_ue_s1ap_id)
|
||||
return et_s1ap_ies_is_matching(s1ap1->pdu.present, &s1ap1->message, &s1ap2->message, constraints);
|
||||
@@ -284,10 +617,12 @@ int et_scenario_set_packet_received(et_packet_t * const packet)
|
||||
//------------------------------------------------------------------------------
|
||||
int et_s1ap_process_rx_packet(et_event_s1ap_data_ind_t * const s1ap_data_ind)
|
||||
{
|
||||
et_packet_t * packet = NULL;
|
||||
et_packet_t * rx_packet = NULL;
|
||||
unsigned long int not_found = 1;
|
||||
long rv = 0;
|
||||
et_packet_t *packet = NULL;
|
||||
et_packet_t *rx_packet = NULL;
|
||||
unsigned long int not_found = 1;
|
||||
asn_comp_rval_t *comp_results = NULL;
|
||||
asn_comp_rval_t *comp_results2 = NULL;
|
||||
unsigned char error_code = 0;
|
||||
|
||||
AssertFatal (NULL != s1ap_data_ind, "Bad parameter sctp_data_ind\n");
|
||||
rx_packet = et_build_packet_from_s1ap_data_ind(s1ap_data_ind);
|
||||
@@ -317,20 +652,35 @@ int et_s1ap_process_rx_packet(et_event_s1ap_data_ind_t * const s1ap_data_ind)
|
||||
// not_found threshold may sure depend on number of mme, may be not sure on number of UE
|
||||
while ((NULL != packet) && (not_found < 5)) {
|
||||
if (packet->action == ET_PACKET_ACTION_S1C_RECEIVE) {
|
||||
rv = et_sctp_is_matching(&packet->sctp_hdr, &rx_packet->sctp_hdr, g_constraints);
|
||||
if (0 == rv) {
|
||||
comp_results = et_sctp_is_matching(&packet->sctp_hdr, &rx_packet->sctp_hdr, g_constraints);
|
||||
if (NULL == comp_results) {
|
||||
S1AP_DEBUG("Compare RX packet with packet: num %u | original frame number %u \n", packet->packet_number, packet->original_frame_number);
|
||||
packet->timestamp_packet.tv_sec = rx_packet->timestamp_packet.tv_sec;
|
||||
packet->timestamp_packet.tv_usec = rx_packet->timestamp_packet.tv_usec;
|
||||
return et_scenario_set_packet_received(packet);
|
||||
} else {
|
||||
S1AP_DEBUG("Compare RX packet with packet: num %u | original frame number %u failed:%s\n",
|
||||
packet->packet_number, packet->original_frame_number, et_error_match2str(rv));
|
||||
// asn1 compare no match return code, may not collide with non asn1 error return codes
|
||||
// (each asn1 rc <= 166 (enum e_S1ap_ProtocolIE_ID, in generated file S1ap_ProtocolIE_ID.h))
|
||||
if ((rv > 0) || (rv <= -ET_ERROR_MATCH_END)) {
|
||||
//TODO MME_UE_S1AP_ID, etc.
|
||||
AssertFatal(0,"Some work needed there");
|
||||
S1AP_DEBUG("Compare RX packet with packet: num %u | original frame number %u failed\n",
|
||||
packet->packet_number, packet->original_frame_number);
|
||||
while (comp_results) {
|
||||
S1AP_DEBUG("Result err code %s(%u) ASN1 struct name %s\n",
|
||||
et_error_match2str(comp_results->err_code), comp_results->err_code, comp_results->name);
|
||||
// (each asn1 rc <= 166 (enum e_S1ap_ProtocolIE_ID, in generated file S1ap_ProtocolIE_ID.h))
|
||||
if (comp_results->err_code == COMPARE_ERR_CODE_NO_MATCH) {
|
||||
//TODO MME_UE_S1AP_ID, etc.
|
||||
// get latest error code
|
||||
if (strcmp(comp_results->name, "S1ap-MME-UE-S1AP-ID") == 0) {
|
||||
if (0 == et_handle_s1ap_mismatch((et_packet_t *const)packet, (et_packet_t *const)rx_packet)) {
|
||||
packet->timestamp_packet.tv_sec = rx_packet->timestamp_packet.tv_sec;
|
||||
packet->timestamp_packet.tv_usec = rx_packet->timestamp_packet.tv_usec;
|
||||
return et_scenario_set_packet_received(packet);
|
||||
}
|
||||
} else {
|
||||
AssertFatal(0,"Some work needed there");
|
||||
}
|
||||
}
|
||||
comp_results2 = comp_results;
|
||||
comp_results = comp_results2->next;
|
||||
et_free_pointer(comp_results2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,9 +58,9 @@ extern et_scenario_t *g_scenario;
|
||||
extern uint32_t g_constraints;
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
long et_s1ap_ies_is_matching(const S1AP_PDU_PR present, s1ap_message * const m1, s1ap_message * const m2, const uint32_t constraints)
|
||||
asn_comp_rval_t * et_s1ap_ies_is_matching(const S1AP_PDU_PR present, s1ap_message * const m1, s1ap_message * const m2, const uint32_t constraints)
|
||||
{
|
||||
long ret = 0;
|
||||
asn_comp_rval_t *ret = NULL;
|
||||
AssertFatal(m1 != NULL, "bad parameter m1");
|
||||
AssertFatal(m2 != NULL, "bad parameter m2");
|
||||
AssertFatal((present == S1AP_PDU_PR_initiatingMessage) ||
|
||||
@@ -401,6 +401,8 @@ long et_s1ap_ies_is_matching(const S1AP_PDU_PR present, s1ap_message * const m1,
|
||||
case S1ap_ProcedureCode_id_PrivateMessage:
|
||||
case S1ap_ProcedureCode_id_eNBConfigurationTransfer:
|
||||
case S1ap_ProcedureCode_id_MMEConfigurationTransfer:
|
||||
AssertFatal(0, "TODO");
|
||||
break;
|
||||
|
||||
case S1ap_ProcedureCode_id_CellTrafficTrace:
|
||||
ret = s1ap_compare_s1ap_celltraffictraceies(
|
||||
|
||||
@@ -44,27 +44,36 @@
|
||||
#include "play_scenario.h"
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
long et_sctp_data_is_matching(sctp_datahdr_t * const sctp1, sctp_datahdr_t * const sctp2, const uint32_t constraints)
|
||||
asn_comp_rval_t * et_sctp_data_is_matching(sctp_datahdr_t * const sctp1, sctp_datahdr_t * const sctp2, const uint32_t constraints)
|
||||
{
|
||||
asn_comp_rval_t *rv = NULL;
|
||||
// no comparison for ports
|
||||
if (sctp1->ppid != sctp2->ppid) {
|
||||
S1AP_WARN("No Matching SCTP PPID %u %u\n", sctp1->ppid, sctp2->ppid);
|
||||
return -ET_ERROR_MATCH_PACKET_SCTP_PPID;
|
||||
rv = calloc(1, sizeof(asn_comp_rval_t));
|
||||
rv->err_code = ET_ERROR_MATCH_PACKET_SCTP_PPID;
|
||||
return rv;
|
||||
}
|
||||
if (sctp1->assoc_id != sctp2->assoc_id) {
|
||||
S1AP_WARN("No Matching SCTP assoc id %u %u\n", sctp1->assoc_id, sctp2->assoc_id);
|
||||
return -ET_ERROR_MATCH_PACKET_SCTP_ASSOC_ID;
|
||||
rv = calloc(1, sizeof(asn_comp_rval_t));
|
||||
rv->err_code = ET_ERROR_MATCH_PACKET_SCTP_ASSOC_ID;
|
||||
return rv;
|
||||
}
|
||||
if (sctp1->stream != sctp2->stream) {
|
||||
if (constraints & ET_BIT_MASK_MATCH_SCTP_STREAM) {
|
||||
return -ET_ERROR_MATCH_PACKET_SCTP_STREAM_ID;
|
||||
rv = calloc(1, sizeof(asn_comp_rval_t));
|
||||
rv->err_code = ET_ERROR_MATCH_PACKET_SCTP_STREAM_ID;
|
||||
return rv;
|
||||
} else {
|
||||
S1AP_WARN("No Matching SCTP stream %u %u\n", sctp1->stream, sctp2->stream);
|
||||
}
|
||||
}
|
||||
if (sctp1->ssn != sctp2->ssn) {
|
||||
if (constraints & ET_BIT_MASK_MATCH_SCTP_SSN) {
|
||||
return -ET_ERROR_MATCH_PACKET_SCTP_SSN;
|
||||
rv = calloc(1, sizeof(asn_comp_rval_t));
|
||||
rv->err_code = ET_ERROR_MATCH_PACKET_SCTP_SSN;
|
||||
return rv;
|
||||
} else {
|
||||
S1AP_WARN("No Matching SCTP STREAM SN %u %u\n", sctp1->ssn, sctp2->ssn);
|
||||
}
|
||||
@@ -73,10 +82,16 @@ long et_sctp_data_is_matching(sctp_datahdr_t * const sctp1, sctp_datahdr_t * con
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
long et_sctp_is_matching(et_sctp_hdr_t * const sctp1, et_sctp_hdr_t * const sctp2, const uint32_t constraints)
|
||||
asn_comp_rval_t * et_sctp_is_matching(et_sctp_hdr_t * const sctp1, et_sctp_hdr_t * const sctp2, const uint32_t constraints)
|
||||
{
|
||||
// no comparison for ports
|
||||
if (sctp1->chunk_type != sctp2->chunk_type) return -ET_ERROR_MATCH_PACKET_SCTP_CHUNK_TYPE;
|
||||
asn_comp_rval_t *rv = NULL;
|
||||
if (sctp1->chunk_type != sctp2->chunk_type){
|
||||
S1AP_WARN("No Matching chunk_type %u %u\n", sctp1->chunk_type, sctp2->chunk_type);
|
||||
rv = calloc(1, sizeof(asn_comp_rval_t));
|
||||
rv->err_code = ET_ERROR_MATCH_PACKET_SCTP_CHUNK_TYPE;
|
||||
return rv;
|
||||
}
|
||||
switch (sctp1->chunk_type) {
|
||||
case SCTP_CID_DATA:
|
||||
return et_sctp_data_is_matching(&sctp1->u.data_hdr, &sctp2->u.data_hdr, constraints);
|
||||
@@ -92,5 +107,5 @@ long et_sctp_is_matching(et_sctp_hdr_t * const sctp1, et_sctp_hdr_t * const sctp
|
||||
AssertFatal(0, "Not needed now cid %d", sctp1->chunk_type);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user