merge develop

This commit is contained in:
laurent
2023-03-13 12:45:32 +01:00
183 changed files with 2363 additions and 2610 deletions
+1 -1
View File
@@ -683,7 +683,7 @@ int is_m3ap_MCE_enabled(void)
char *enable_m3 = NULL;
paramdef_t p[] = {
{ "enable_mce_m3", "yes/no", 0, strptr:&enable_m3, defstrval:"", TYPE_STRING, 0 }
{ "enable_mce_m3", "yes/no", 0, .strptr=&enable_m3, .defstrval="", TYPE_STRING, 0 }
};
/* TODO: do it per module - we check only first MCE */
+1 -1
View File
@@ -708,7 +708,7 @@ int is_m3ap_MME_enabled(void)
char *enable_m3 = NULL;
paramdef_t p[] = {
{ "enable_mme_m3", "yes/no", 0, strptr:&enable_m3, defstrval:"", TYPE_STRING, 0 }
{ "enable_mme_m3", "yes/no", 0, .strptr=&enable_m3, .defstrval="", TYPE_STRING, 0 }
};
/* TODO: do it per module - we check only first MME */
@@ -658,7 +658,7 @@ int MME_send_M3_SETUP_RESPONSE(instance_t instance, /*uint32_t assoc_id,*/
ie = (M3AP_M3SetupResponseIEs_t *)calloc(1, sizeof(M3AP_M3SetupResponseIEs_t));
ie->id = M3AP_ProtocolIE_ID_id_CriticalityDiagnostics;
ie->criticality = M3AP_Criticality_ignore;
ie->value.present = M3AP_M3SetupFailureIEs__value_PR_CriticalityDiagnostics;
ie->value.present = M3AP_M3SetupResponseIEs__value_PR_CriticalityDiagnostics;
ie->value.choice.CriticalityDiagnostics.procedureCode = (M3AP_ProcedureCode_t *)calloc(1, sizeof(M3AP_ProcedureCode_t));
*ie->value.choice.CriticalityDiagnostics.procedureCode = M3AP_ProcedureCode_id_m3Setup;
ie->value.choice.CriticalityDiagnostics.triggeringMessage = (M3AP_TriggeringMessage_t *)calloc(1, sizeof(M3AP_TriggeringMessage_t));
@@ -66,8 +66,8 @@ void capture_pdu_session_establishment_accept_msg(uint8_t *buffer, uint32_t msg_
packet_filter_t pf;
if(qos_rule.oc == ROC_CREATE_NEW_QOS_RULE ||
ROC_MODIFY_QOS_RULE_ADD_PF ||
ROC_MODIFY_QOS_RULE_REPLACE_PF) {
qos_rule.oc == ROC_MODIFY_QOS_RULE_ADD_PF ||
qos_rule.oc == ROC_MODIFY_QOS_RULE_REPLACE_PF) {
pf.pf_type.type_1.pf_dir = (*(buffer + offset) & 0x30) >> 4;
pf.pf_type.type_1.pf_id = *(buffer + offset++) & 0x0F;
pf.pf_type.type_1.length = *(buffer + offset++);
+1 -1
View File
@@ -991,7 +991,7 @@ void *nas_nrue_task(void *args_p)
uint8_t offset = 0;
uint8_t *payload_container = pdu_buffer;
offset += SECURITY_PROTECTED_5GS_NAS_MESSAGE_HEADER_LENGTH;
uint16_t payload_container_length = htons(((dl_nas_transport_t *)(pdu_buffer + offset))->payload_container_length);
uint32_t payload_container_length = htons(((dl_nas_transport_t *)(pdu_buffer + offset))->payload_container_length);
if ((payload_container_length >= PAYLOAD_CONTAINER_LENGTH_MIN) &&
(payload_container_length <= PAYLOAD_CONTAINER_LENGTH_MAX))
offset += (PLAIN_5GS_NAS_MESSAGE_HEADER_LENGTH + 3);
+16 -16
View File
@@ -1068,31 +1068,31 @@ static int _at_response_encode_cgpaddr(char* buffer, const at_response_t* data)
if (cgpaddr->PDP_addr_1[i] != NULL) {
/* IPv4 address */
offset += sprintf(buffer+offset, ",%hhu.%hhu.%hhu.%hhu",
(unsigned int)cgpaddr->PDP_addr_1[i][0],
(unsigned int)cgpaddr->PDP_addr_1[i][1],
(unsigned int)cgpaddr->PDP_addr_1[i][2],
(unsigned int)cgpaddr->PDP_addr_1[i][3]);
(unsigned char)cgpaddr->PDP_addr_1[i][0],
(unsigned char)cgpaddr->PDP_addr_1[i][1],
(unsigned char)cgpaddr->PDP_addr_1[i][2],
(unsigned char)cgpaddr->PDP_addr_1[i][3]);
}
if (cgpaddr->PDP_addr_2[i] != NULL) {
/* IPv6 Link-local address prefixe */
offset += sprintf(buffer+offset,
",%hhu.%hhu.%hhu.%hhu.%hhu.%hhu.%hhu.%hhu",
(unsigned int)0xfe, (unsigned int)0x80,
(unsigned int)0, (unsigned int)0,
(unsigned int)0, (unsigned int)0,
(unsigned int)0, (unsigned int)0);
(unsigned char)0xfe, (unsigned char)0x80,
(unsigned char)0, (unsigned char)0,
(unsigned char)0, (unsigned char)0,
(unsigned char)0, (unsigned char)0);
/* IPv6 Link-local address */
offset += sprintf(buffer+offset,
".%hhu.%hhu.%hhu.%hhu.%hhu.%hhu.%hhu.%hhu",
(unsigned int)cgpaddr->PDP_addr_2[i][0],
(unsigned int)cgpaddr->PDP_addr_2[i][1],
(unsigned int)cgpaddr->PDP_addr_2[i][2],
(unsigned int)cgpaddr->PDP_addr_2[i][3],
(unsigned int)cgpaddr->PDP_addr_2[i][4],
(unsigned int)cgpaddr->PDP_addr_2[i][5],
(unsigned int)cgpaddr->PDP_addr_2[i][6],
(unsigned int)cgpaddr->PDP_addr_2[i][7]);
(unsigned char)cgpaddr->PDP_addr_2[i][0],
(unsigned char)cgpaddr->PDP_addr_2[i][1],
(unsigned char)cgpaddr->PDP_addr_2[i][2],
(unsigned char)cgpaddr->PDP_addr_2[i][3],
(unsigned char)cgpaddr->PDP_addr_2[i][4],
(unsigned char)cgpaddr->PDP_addr_2[i][5],
(unsigned char)cgpaddr->PDP_addr_2[i][6],
(unsigned char)cgpaddr->PDP_addr_2[i][7]);
}
offset += sprintf(buffer+offset, "\r\n");
+1 -1
View File
@@ -308,7 +308,7 @@ void *nas_ue_task(void *args_p)
struct epoll_event events[20];
nb_events = itti_get_events(TASK_NAS_UE, events, 20);
if ((nb_events > 0) && (events != NULL)) {
if (nb_events > 0) {
if (nas_ue_process_events(users, events, nb_events) == true) {
LOG_E(NAS, "[UE] Received exit loop\n");
}
+7 -7
View File
@@ -1133,13 +1133,13 @@ static int ngap_gNB_handle_pdusession_modify_request(uint32_t assoc_id, uint32_t
memset(msg, 0, sizeof(*msg));
msg->gNB_ue_ngap_id = gnb_ue_ngap_id;
for (int nb_of_pdusessions_failed = 0; nb_of_pdusessions_failed < ie->value.choice.PDUSessionResourceModifyListModReq.list.count; nb_of_pdusessions_failed++) {
NGAP_PDUSessionResourceModifyItemModReq_t *item_p;
item_p = (NGAP_PDUSessionResourceModifyItemModReq_t *)ie->value.choice.PDUSessionResourceModifyListModReq.list.array[nb_of_pdusessions_failed];
pdusession_failed_t *tmp = &msg->pdusessions_failed[nb_of_pdusessions_failed];
tmp->pdusession_id = item_p->pDUSessionID;
tmp->cause = NGAP_Cause_PR_radioNetwork;
tmp->cause_value = NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID;
}
NGAP_PDUSessionResourceModifyItemModReq_t *item_p;
item_p = (NGAP_PDUSessionResourceModifyItemModReq_t *)ie->value.choice.PDUSessionResourceModifyListModReq.list.array[nb_of_pdusessions_failed];
pdusession_failed_t *tmp = &msg->pdusessions_failed[nb_of_pdusessions_failed];
tmp->pdusession_id = item_p->pDUSessionID;
tmp->cause = NGAP_CAUSE_RADIO_NETWORK;
tmp->cause_value = NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID;
}
msg->nb_of_pdusessions_failed = ie->value.choice.PDUSessionResourceModifyListModReq.list.count;
ngap_gNB_pdusession_modify_resp(amf_desc_p->ngap_gNB_instance->instance,msg);
itti_free(TASK_RRC_GNB, message_p);
+23 -24
View File
@@ -660,36 +660,35 @@ int ngap_gNB_initial_ctxt_resp(instance_t instance, ngap_initial_context_setup_r
for (i = 0; i < initial_ctxt_resp_p->nb_of_pdusessions_failed; i++) {
asn1cSequenceAdd(ie->value.choice.PDUSessionResourceFailedToSetupListCxtRes.list, NGAP_PDUSessionResourceFailedToSetupItemCxtRes_t, item);
NGAP_PDUSessionResourceSetupUnsuccessfulTransfer_t pdusessionUnTransfer = {0};
/* pDUSessionID */
item->pDUSessionID = initial_ctxt_resp_p->pdusessions_failed[i].pdusession_id;
/* cause */
pdusessionUnTransfer.cause.present = initial_ctxt_resp_p->pdusessions_failed[i].cause;
switch (pdusessionUnTransfer.cause.present) {
case NGAP_Cause_PR_radioNetwork:
case NGAP_CAUSE_RADIO_NETWORK:
pdusessionUnTransfer.cause.choice.radioNetwork = initial_ctxt_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_Cause_PR_transport:
case NGAP_CAUSE_TRANSPORT:
pdusessionUnTransfer.cause.choice.transport = initial_ctxt_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_Cause_PR_nas:
case NGAP_CAUSE_NAS:
pdusessionUnTransfer.cause.choice.nas = initial_ctxt_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_Cause_PR_protocol:
case NGAP_CAUSE_PROTOCOL:
pdusessionUnTransfer.cause.choice.protocol = initial_ctxt_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_Cause_PR_misc:
case NGAP_CAUSE_MISC:
pdusessionUnTransfer.cause.choice.misc = initial_ctxt_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_Cause_PR_NOTHING:
default:
case NGAP_CAUSE_NOTHING:
default:
break;
}
@@ -931,29 +930,29 @@ int ngap_gNB_pdusession_setup_resp(instance_t instance, ngap_pdusession_setup_re
/* cause */
pdusessionUnTransfer_p.cause.present = pdusession_failed->cause;
switch (pdusessionUnTransfer_p.cause.present) {
case NGAP_Cause_PR_radioNetwork:
case NGAP_CAUSE_RADIO_NETWORK:
pdusessionUnTransfer_p.cause.choice.radioNetwork = pdusession_failed->cause_value;
break;
case NGAP_Cause_PR_transport:
case NGAP_CAUSE_TRANSPORT:
pdusessionUnTransfer_p.cause.choice.transport = pdusession_failed->cause_value;
break;
case NGAP_Cause_PR_nas:
case NGAP_CAUSE_NAS:
pdusessionUnTransfer_p.cause.choice.nas = pdusession_failed->cause_value;
break;
case NGAP_Cause_PR_protocol:
case NGAP_CAUSE_PROTOCOL:
pdusessionUnTransfer_p.cause.choice.protocol = pdusession_failed->cause_value;
break;
case NGAP_Cause_PR_misc:
case NGAP_CAUSE_MISC:
pdusessionUnTransfer_p.cause.choice.misc = pdusession_failed->cause_value;
break;
case NGAP_Cause_PR_NOTHING:
default:
break;
case NGAP_CAUSE_NOTHING:
default:
break;
}
NGAP_DEBUG("pdusession setup response: failed pdusession ID %ld\n", item->pDUSessionID);
@@ -1091,27 +1090,27 @@ int ngap_gNB_pdusession_modify_resp(instance_t instance, ngap_pdusession_modify_
pdusessionTransfer.cause.present = pdusession_modify_resp_p->pdusessions_failed[i].cause;
switch (pdusessionTransfer.cause.present) {
case NGAP_Cause_PR_radioNetwork:
case NGAP_CAUSE_RADIO_NETWORK:
pdusessionTransfer.cause.choice.radioNetwork = pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
break;
break;
case NGAP_Cause_PR_transport:
case NGAP_CAUSE_TRANSPORT:
pdusessionTransfer.cause.choice.transport = pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_Cause_PR_nas:
case NGAP_CAUSE_NAS:
pdusessionTransfer.cause.choice.nas = pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_Cause_PR_protocol:
case NGAP_CAUSE_PROTOCOL:
pdusessionTransfer.cause.choice.protocol = pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_Cause_PR_misc:
case NGAP_CAUSE_MISC:
pdusessionTransfer.cause.choice.misc = pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_Cause_PR_NOTHING:
case NGAP_CAUSE_NOTHING:
default:
break;
}
+2 -2
View File
@@ -373,7 +373,7 @@ void s1ap_eNB_handle_sctp_association_resp(instance_t instance, sctp_new_associa
timer_kind = timer_kind | SCTP_REQ_WAIT;
if( s1ap_timer_setup( instance_p->sctp_req_timer, 0, TASK_S1AP, instance_p->instance,
timer_kind, S1AP_TIMER_ONE_SHOT, NULL, &s1ap_mme_data_p->timer_id) < 0 ) {
timer_kind, TIMER_ONE_SHOT, NULL, &s1ap_mme_data_p->timer_id) < 0 ) {
S1AP_ERROR("Timer Start NG(SCTP retransmission wait timer) : MME=%d\n",s1ap_mme_data_p->cnx_id);
s1ap_sctp_req( instance_p, s1ap_mme_data_p );
}
@@ -750,7 +750,7 @@ static int s1ap_eNB_generate_s1_setup_request(
timer_kind = timer_kind | S1AP_MMEIND;
timer_kind = timer_kind | S1_SETRSP_WAIT;
if( s1ap_timer_setup(instance_p->s1_setuprsp_wait_timer, 0, TASK_S1AP, instance_p->instance, timer_kind, S1AP_TIMER_ONE_SHOT,
if( s1ap_timer_setup(instance_p->s1_setuprsp_wait_timer, 0, TASK_S1AP, instance_p->instance, timer_kind, TIMER_ONE_SHOT,
NULL, &s1ap_mme_data_p->timer_id) < 0 )
{
S1AP_ERROR("Timer Start NG(S1 Setup Response) : MME=%d\n",s1ap_mme_data_p->cnx_id);
+3 -3
View File
@@ -349,7 +349,7 @@ int s1ap_eNB_handle_s1_setup_failure(uint32_t assoc_id,
timer_kind = timer_kind | S1AP_MMEIND;
timer_kind = timer_kind | S1_SETREQ_WAIT;
if( s1ap_timer_setup(interval_sec, 0, TASK_S1AP, instance_p->instance, timer_kind, S1AP_TIMER_ONE_SHOT,
if( s1ap_timer_setup(interval_sec, 0, TASK_S1AP, instance_p->instance, timer_kind, TIMER_ONE_SHOT,
NULL, &mme_desc_p->timer_id) < 0 ) {
S1AP_ERROR("Timer Start NG(S1 Setup Request) : MME=%d\n",mme_desc_p->cnx_id);
s1ap_eNB_snd_s1_setup_request( instance_p, mme_desc_p );
@@ -1445,7 +1445,7 @@ int s1ap_eNB_handle_e_rab_modify_request(uint32_t assoc_id,
item_p = &(((S1AP_E_RABToBeModifiedItemBearerModReqIEs_t *)
ie->value.choice.E_RABToBeModifiedListBearerModReq.list.array[nb_of_e_rabs_failed])->value.choice.E_RABToBeModifiedItemBearerModReq);
S1AP_E_RAB_MODIFY_RESP(message_p).e_rabs_failed[nb_of_e_rabs_failed].e_rab_id = item_p->e_RAB_ID;
S1AP_E_RAB_MODIFY_RESP(message_p).e_rabs_failed[nb_of_e_rabs_failed].cause = S1AP_Cause_PR_radioNetwork;
S1AP_E_RAB_MODIFY_RESP(message_p).e_rabs_failed[nb_of_e_rabs_failed].cause = S1AP_CAUSE_RADIO_NETWORK;
S1AP_E_RAB_MODIFY_RESP(message_p).e_rabs_failed[nb_of_e_rabs_failed].cause_value = S1AP_CauseRadioNetwork_unknown_mme_ue_s1ap_id;
}
} else {
@@ -1981,7 +1981,7 @@ static int s1ap_eNB_snd_s1_setup_request(
timer_kind = timer_kind | S1AP_MMEIND;
timer_kind = timer_kind | S1_SETRSP_WAIT;
if( s1ap_timer_setup(instance_p->s1_setuprsp_wait_timer, 0, TASK_S1AP, instance_p->instance, timer_kind, S1AP_TIMER_ONE_SHOT,
if( s1ap_timer_setup(instance_p->s1_setuprsp_wait_timer, 0, TASK_S1AP, instance_p->instance, timer_kind, TIMER_ONE_SHOT,
NULL, &s1ap_mme_data_p->timer_id) < 0 )
{
S1AP_ERROR("Timer Start NG(S1 Setup Response) : MME=%d\n",s1ap_mme_data_p->cnx_id);
+147 -137
View File
@@ -687,52 +687,56 @@ int s1ap_eNB_initial_ctxt_resp(
/* optional */
if (initial_ctxt_resp_p->nb_of_e_rabs_failed) {
ie = (S1AP_InitialContextSetupResponseIEs_t *)calloc(1, sizeof(S1AP_InitialContextSetupResponseIEs_t));
ie->id = S1AP_ProtocolIE_ID_id_E_RABFailedToSetupListCtxtSURes;
ie->criticality = S1AP_Criticality_ignore;
ie->value.present = S1AP_InitialContextSetupResponseIEs__value_PR_E_RABList;
ie = (S1AP_InitialContextSetupResponseIEs_t *)calloc(1, sizeof(S1AP_InitialContextSetupResponseIEs_t));
ie->id = S1AP_ProtocolIE_ID_id_E_RABFailedToSetupListCtxtSURes;
ie->criticality = S1AP_Criticality_ignore;
ie->value.present = S1AP_InitialContextSetupResponseIEs__value_PR_E_RABList;
for (i = 0; i < initial_ctxt_resp_p->nb_of_e_rabs_failed; i++) {
S1AP_E_RABItemIEs_t *item;
/* mandatory */
item = (S1AP_E_RABItemIEs_t *)calloc(1, sizeof(S1AP_E_RABItemIEs_t));
item->id = S1AP_ProtocolIE_ID_id_E_RABItem;
item->criticality = S1AP_Criticality_ignore;
item->value.present = S1AP_E_RABItemIEs__value_PR_E_RABItem;
item->value.choice.E_RABItem.e_RAB_ID = initial_ctxt_resp_p->e_rabs_failed[i].e_rab_id;
item->value.choice.E_RABItem.cause.present = initial_ctxt_resp_p->e_rabs_failed[i].cause;
for (i = 0; i < initial_ctxt_resp_p->nb_of_e_rabs_failed; i++) {
S1AP_E_RABItemIEs_t *item;
/* mandatory */
item = (S1AP_E_RABItemIEs_t *)calloc(1, sizeof(S1AP_E_RABItemIEs_t));
item->id = S1AP_ProtocolIE_ID_id_E_RABItem;
item->criticality = S1AP_Criticality_ignore;
item->value.present = S1AP_E_RABItemIEs__value_PR_E_RABItem;
item->value.choice.E_RABItem.e_RAB_ID = initial_ctxt_resp_p->e_rabs_failed[i].e_rab_id;
switch(item->value.choice.E_RABItem.cause.present) {
case S1AP_Cause_PR_radioNetwork:
item->value.choice.E_RABItem.cause.choice.radioNetwork = initial_ctxt_resp_p->e_rabs_failed[i].cause_value;
break;
switch(initial_ctxt_resp_p->e_rabs_failed[i].cause) {
case S1AP_CAUSE_RADIO_NETWORK:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_radioNetwork;
item->value.choice.E_RABItem.cause.choice.radioNetwork = initial_ctxt_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_transport:
item->value.choice.E_RABItem.cause.choice.transport = initial_ctxt_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_CAUSE_TRANSPORT:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_transport;
item->value.choice.E_RABItem.cause.choice.transport = initial_ctxt_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_nas:
item->value.choice.E_RABItem.cause.choice.nas = initial_ctxt_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_CAUSE_NAS:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_nas;
item->value.choice.E_RABItem.cause.choice.nas = initial_ctxt_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_protocol:
item->value.choice.E_RABItem.cause.choice.protocol = initial_ctxt_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_CAUSE_PROTOCOL:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_protocol;
item->value.choice.E_RABItem.cause.choice.protocol = initial_ctxt_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_misc:
item->value.choice.E_RABItem.cause.choice.misc = initial_ctxt_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_CAUSE_MISC:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_misc;
item->value.choice.E_RABItem.cause.choice.misc = initial_ctxt_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_NOTHING:
case S1AP_Cause_PR_NOTHING:
default:
break;
}
S1AP_DEBUG("initial context setup response: failed e_rab ID %ld\n", item->value.choice.E_RABItem.e_RAB_ID);
asn1cSeqAdd(&ie->value.choice.E_RABList.list, item);
break;
}
asn1cSeqAdd(&out->protocolIEs.list, ie);
S1AP_DEBUG("initial context setup response: failed e_rab ID %ld\n", item->value.choice.E_RABItem.e_RAB_ID);
asn1cSeqAdd(&ie->value.choice.E_RABList.list, item);
}
asn1cSeqAdd(&out->protocolIEs.list, ie);
}
/* optional */
@@ -935,51 +939,55 @@ int s1ap_eNB_e_rab_setup_resp(instance_t instance,
/* optional */
if (e_rab_setup_resp_p->nb_of_e_rabs_failed > 0) {
ie = (S1AP_E_RABSetupResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABSetupResponseIEs_t));
ie->id = S1AP_ProtocolIE_ID_id_E_RABFailedToSetupListBearerSURes;
ie->criticality = S1AP_Criticality_ignore;
ie->value.present = S1AP_E_RABSetupResponseIEs__value_PR_E_RABList;
ie = (S1AP_E_RABSetupResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABSetupResponseIEs_t));
ie->id = S1AP_ProtocolIE_ID_id_E_RABFailedToSetupListBearerSURes;
ie->criticality = S1AP_Criticality_ignore;
ie->value.present = S1AP_E_RABSetupResponseIEs__value_PR_E_RABList;
for (i = 0; i < e_rab_setup_resp_p->nb_of_e_rabs_failed; i++) {
S1AP_E_RABItemIEs_t *item;
item = (S1AP_E_RABItemIEs_t *)calloc(1, sizeof(S1AP_E_RABItemIEs_t));
item->id = S1AP_ProtocolIE_ID_id_E_RABItem;
item->criticality = S1AP_Criticality_ignore;
item->value.present = S1AP_E_RABItemIEs__value_PR_E_RABItem;
item->value.choice.E_RABItem.e_RAB_ID = e_rab_setup_resp_p->e_rabs_failed[i].e_rab_id;
item->value.choice.E_RABItem.cause.present = e_rab_setup_resp_p->e_rabs_failed[i].cause;
for (i = 0; i < e_rab_setup_resp_p->nb_of_e_rabs_failed; i++) {
S1AP_E_RABItemIEs_t *item;
item = (S1AP_E_RABItemIEs_t *)calloc(1, sizeof(S1AP_E_RABItemIEs_t));
item->id = S1AP_ProtocolIE_ID_id_E_RABItem;
item->criticality = S1AP_Criticality_ignore;
item->value.present = S1AP_E_RABItemIEs__value_PR_E_RABItem;
item->value.choice.E_RABItem.e_RAB_ID = e_rab_setup_resp_p->e_rabs_failed[i].e_rab_id;
switch(item->value.choice.E_RABItem.cause.present) {
case S1AP_Cause_PR_radioNetwork:
item->value.choice.E_RABItem.cause.choice.radioNetwork = e_rab_setup_resp_p->e_rabs_failed[i].cause_value;
break;
switch(e_rab_setup_resp_p->e_rabs_failed[i].cause) {
case S1AP_CAUSE_RADIO_NETWORK:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_radioNetwork;
item->value.choice.E_RABItem.cause.choice.radioNetwork = e_rab_setup_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_transport:
item->value.choice.E_RABItem.cause.choice.transport = e_rab_setup_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_CAUSE_TRANSPORT:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_transport;
item->value.choice.E_RABItem.cause.choice.transport = e_rab_setup_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_nas:
item->value.choice.E_RABItem.cause.choice.nas = e_rab_setup_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_CAUSE_NAS:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_nas;
item->value.choice.E_RABItem.cause.choice.nas = e_rab_setup_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_protocol:
item->value.choice.E_RABItem.cause.choice.protocol = e_rab_setup_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_CAUSE_PROTOCOL:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_protocol;
item->value.choice.E_RABItem.cause.choice.protocol = e_rab_setup_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_misc:
item->value.choice.E_RABItem.cause.choice.misc = e_rab_setup_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_CAUSE_MISC:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_misc;
item->value.choice.E_RABItem.cause.choice.misc = e_rab_setup_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_NOTHING:
case S1AP_Cause_PR_NOTHING:
default:
break;
}
S1AP_DEBUG("e_rab_setup_resp: failed e_rab ID %ld\n", item->value.choice.E_RABItem.e_RAB_ID);
asn1cSeqAdd(&ie->value.choice.E_RABList.list, item);
break;
}
asn1cSeqAdd(&out->protocolIEs.list, ie);
S1AP_DEBUG("e_rab_setup_resp: failed e_rab ID %ld\n", item->value.choice.E_RABItem.e_RAB_ID);
asn1cSeqAdd(&ie->value.choice.E_RABList.list, item);
}
asn1cSeqAdd(&out->protocolIEs.list, ie);
}
/* optional */
@@ -1095,51 +1103,54 @@ int s1ap_eNB_e_rab_modify_resp(instance_t instance,
/* optional */
if (e_rab_modify_resp_p->nb_of_e_rabs_failed > 0) {
ie = (S1AP_E_RABModifyResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABModifyResponseIEs_t));
ie->id = S1AP_ProtocolIE_ID_id_E_RABFailedToModifyList;
ie->criticality = S1AP_Criticality_ignore;
ie->value.present = S1AP_E_RABModifyResponseIEs__value_PR_E_RABList;
ie = (S1AP_E_RABModifyResponseIEs_t *)calloc(1, sizeof(S1AP_E_RABModifyResponseIEs_t));
ie->id = S1AP_ProtocolIE_ID_id_E_RABFailedToModifyList;
ie->criticality = S1AP_Criticality_ignore;
ie->value.present = S1AP_E_RABModifyResponseIEs__value_PR_E_RABList;
for (i = 0; i < e_rab_modify_resp_p->nb_of_e_rabs_failed; i++) {
S1AP_E_RABItemIEs_t *item;
item = (S1AP_E_RABItemIEs_t *)calloc(1, sizeof(S1AP_E_RABItemIEs_t));
item->id = S1AP_ProtocolIE_ID_id_E_RABItem;
item->criticality = S1AP_Criticality_ignore;
item->value.present = S1AP_E_RABItemIEs__value_PR_E_RABItem;
item->value.choice.E_RABItem.e_RAB_ID = e_rab_modify_resp_p->e_rabs_failed[i].e_rab_id;
item->value.choice.E_RABItem.cause.present = e_rab_modify_resp_p->e_rabs_failed[i].cause;
for (i = 0; i < e_rab_modify_resp_p->nb_of_e_rabs_failed; i++) {
S1AP_E_RABItemIEs_t *item;
item = (S1AP_E_RABItemIEs_t *)calloc(1, sizeof(S1AP_E_RABItemIEs_t));
item->id = S1AP_ProtocolIE_ID_id_E_RABItem;
item->criticality = S1AP_Criticality_ignore;
item->value.present = S1AP_E_RABItemIEs__value_PR_E_RABItem;
item->value.choice.E_RABItem.e_RAB_ID = e_rab_modify_resp_p->e_rabs_failed[i].e_rab_id;
switch(item->value.choice.E_RABItem.cause.present) {
case S1AP_Cause_PR_radioNetwork:
item->value.choice.E_RABItem.cause.choice.radioNetwork = e_rab_modify_resp_p->e_rabs_failed[i].cause_value;
break;
switch(e_rab_modify_resp_p->e_rabs_failed[i].cause) {
case S1AP_CAUSE_RADIO_NETWORK:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_radioNetwork;
item->value.choice.E_RABItem.cause.choice.radioNetwork = e_rab_modify_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_transport:
item->value.choice.E_RABItem.cause.choice.transport = e_rab_modify_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_CAUSE_TRANSPORT:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_transport;
item->value.choice.E_RABItem.cause.choice.transport = e_rab_modify_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_nas:
item->value.choice.E_RABItem.cause.choice.nas = e_rab_modify_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_CAUSE_NAS:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_nas;
item->value.choice.E_RABItem.cause.choice.nas = e_rab_modify_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_protocol:
item->value.choice.E_RABItem.cause.choice.protocol = e_rab_modify_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_CAUSE_PROTOCOL:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_protocol;
item->value.choice.E_RABItem.cause.choice.protocol = e_rab_modify_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_misc:
item->value.choice.E_RABItem.cause.choice.misc = e_rab_modify_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_CAUSE_MISC:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_misc;
item->value.choice.E_RABItem.cause.choice.misc = e_rab_modify_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_NOTHING:
case S1AP_Cause_PR_NOTHING:
default:
break;
}
S1AP_DEBUG("e_rab_modify_resp: failed e_rab ID %ld\n", item->value.choice.E_RABItem.e_RAB_ID);
asn1cSeqAdd(&ie->value.choice.E_RABList.list, item);
break;
}
asn1cSeqAdd(&out->protocolIEs.list, ie);
S1AP_DEBUG("e_rab_modify_resp: failed e_rab ID %ld\n", item->value.choice.E_RABItem.e_RAB_ID);
asn1cSeqAdd(&ie->value.choice.E_RABList.list, item);
}
asn1cSeqAdd(&out->protocolIEs.list, ie);
}
/* optional */
@@ -1243,48 +1254,47 @@ int s1ap_eNB_e_rab_release_resp(instance_t instance,
ie->value.present = S1AP_E_RABReleaseResponseIEs__value_PR_E_RABList;
for (i = 0; i < e_rab_release_resp_p->nb_of_e_rabs_failed; i++) {
S1AP_E_RABItemIEs_t *item;
item = (S1AP_E_RABItemIEs_t *)calloc(1, sizeof(S1AP_E_RABItemIEs_t));
item->id = S1AP_ProtocolIE_ID_id_E_RABItem;
item->criticality = S1AP_Criticality_ignore;
item->value.present = S1AP_E_RABItemIEs__value_PR_E_RABItem;
item->value.choice.E_RABItem.e_RAB_ID = e_rab_release_resp_p->e_rabs_failed[i].e_rab_id;
item->value.choice.E_RABItem.cause.present = e_rab_release_resp_p->e_rabs_failed[i].cause;
S1AP_E_RABItemIEs_t *item;
item = (S1AP_E_RABItemIEs_t *)calloc(1, sizeof(S1AP_E_RABItemIEs_t));
item->id = S1AP_ProtocolIE_ID_id_E_RABItem;
item->criticality = S1AP_Criticality_ignore;
item->value.present = S1AP_E_RABItemIEs__value_PR_E_RABItem;
item->value.choice.E_RABItem.e_RAB_ID = e_rab_release_resp_p->e_rabs_failed[i].e_rab_id;
switch(item->value.choice.E_RABItem.cause.present) {
case S1AP_Cause_PR_radioNetwork:
item->value.choice.E_RABItem.cause.choice.radioNetwork = e_rab_release_resp_p->e_rabs_failed[i].cause_value;
break;
switch(e_rab_release_resp_p->e_rabs_failed[i].cause) {
case S1AP_CAUSE_RADIO_NETWORK:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_radioNetwork;
item->value.choice.E_RABItem.cause.choice.radioNetwork = e_rab_release_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_transport:
item->value.choice.E_RABItem.cause.choice.transport = e_rab_release_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_CAUSE_TRANSPORT:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_transport;
item->value.choice.E_RABItem.cause.choice.transport = e_rab_release_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_nas:
item->value.choice.E_RABItem.cause.choice.nas = e_rab_release_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_CAUSE_NAS:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_nas;
item->value.choice.E_RABItem.cause.choice.nas = e_rab_release_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_protocol:
item->value.choice.E_RABItem.cause.choice.protocol = e_rab_release_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_misc:
item->value.choice.E_RABItem.cause.choice.misc = e_rab_release_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_CAUSE_PROTOCOL:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_protocol;
item->value.choice.E_RABItem.cause.choice.protocol = e_rab_release_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_CAUSE_MISC:
item->value.choice.E_RABItem.cause.present = S1AP_Cause_PR_misc;
item->value.choice.E_RABItem.cause.choice.misc = e_rab_release_resp_p->e_rabs_failed[i].cause_value;
break;
case S1AP_Cause_PR_NOTHING:
default:
break;
}
asn1cSeqAdd(&ie->value.choice.E_RABList.list, item);
break;
}
asn1cSeqAdd(&ie->value.choice.E_RABList.list, item);
}
asn1cSeqAdd(&out->protocolIEs.list, ie);
}
if (s1ap_eNB_encode_pdu(&pdu, &buffer, &length) < 0) {
S1AP_ERROR("Failed to encode release response\n");
/* Encode procedure has failed... */
+11 -11
View File
@@ -38,16 +38,16 @@ extern uint16_t NB_UE_INST;
/* optname helpstr paramflags XXXptr defXXXval type numelt */
/*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
#define UICC_PARAMS_DESC { \
{"imsi", "USIM IMSI\n", 0, strptr:&uicc->imsiStr, defstrval:"2089900007487", TYPE_STRING, 0 }, \
{"nmc_size" "number of digits in NMC", 0, iptr:&uicc->nmc_size, defintval:2, TYPE_INT, 0 }, \
{"key", "USIM Ki\n", 0, strptr:&uicc->keyStr, defstrval:"fec86ba6eb707ed08905757b1bb44b8f", TYPE_STRING, 0 }, \
{"opc", "USIM OPc\n", 0, strptr:&uicc->opcStr, defstrval:"c42449363bbad02b66d16bc975d77cc1", TYPE_STRING, 0 }, \
{"amf", "USIM amf\n", 0, strptr:&uicc->amfStr, defstrval:"8000", TYPE_STRING, 0 }, \
{"sqn", "USIM sqn\n", 0, strptr:&uicc->sqnStr, defstrval:"000000", TYPE_STRING, 0 }, \
{"dnn", "UE dnn (apn)\n", 0, strptr:&uicc->dnnStr, defstrval:"oai", TYPE_STRING, 0 }, \
{"nssai_sst", "UE nssai\n", 0, iptr:&uicc->nssai_sst, defintval:1, TYPE_INT, 0 }, \
{"nssai_sd", "UE nssai\n", 0, iptr:&uicc->nssai_sd, defintval:0xffffff, TYPE_INT, 0 }, \
{"imeisv", "IMEISV\n", 0, strptr:&uicc->imeisvStr, defstrval:"6754567890123413", TYPE_STRING, 0 }, \
{"imsi", "USIM IMSI\n", 0, .strptr=&uicc->imsiStr, .defstrval="2089900007487", TYPE_STRING, 0 }, \
{"nmc_size" "number of digits in NMC", 0, .iptr=&uicc->nmc_size, .defintval=2, TYPE_INT, 0 }, \
{"key", "USIM Ki\n", 0, .strptr=&uicc->keyStr, .defstrval="fec86ba6eb707ed08905757b1bb44b8f", TYPE_STRING, 0 }, \
{"opc", "USIM OPc\n", 0, .strptr=&uicc->opcStr, .defstrval="c42449363bbad02b66d16bc975d77cc1", TYPE_STRING, 0 }, \
{"amf", "USIM amf\n", 0, .strptr=&uicc->amfStr, .defstrval="8000", TYPE_STRING, 0 }, \
{"sqn", "USIM sqn\n", 0, .strptr=&uicc->sqnStr, .defstrval="000000", TYPE_STRING, 0 }, \
{"dnn", "UE dnn (apn)\n", 0, .strptr=&uicc->dnnStr, .defstrval="oai", TYPE_STRING, 0 }, \
{"nssai_sst", "UE nssai\n", 0, .iptr=&uicc->nssai_sst, .defintval=1, TYPE_INT, 0 }, \
{"nssai_sd", "UE nssai\n", 0, .iptr=&uicc->nssai_sd, .defintval=0xffffff, TYPE_INT, 0 }, \
{"imeisv", "IMEISV\n", 0, .strptr=&uicc->imeisvStr, .defstrval="6754567890123413", TYPE_STRING, 0 }, \
};
static uicc_t** uiccArray=NULL;
@@ -133,4 +133,4 @@ uint8_t getImeisvDigit(int Mod_id,uint8_t i)
}
}
return (0x0f & r);
}
}
+2 -2
View File
@@ -998,7 +998,7 @@ static int Gtpv1uHandleGpdu(int h,
//Minimum length of GTP-U header if non of the optional fields are present
unsigned int offset = sizeof(Gtpv1uMsgHeaderT);
uint8_t qfi = -1;
int8_t qfi = -1;
bool rqi = false;
uint32_t NR_PDCP_PDU_SN = 0;
@@ -1232,7 +1232,7 @@ void *gtpv1uTask(void *args) {
itti_receive_msg(TASK_GTPV1_U, &message_p);
if (message_p != NULL ) {
openAddr_t addr= {0};
openAddr_t addr= {{0}};
const instance_t myInstance = ITTI_MSG_DESTINATION_INSTANCE(message_p);
const int msgType = ITTI_MSG_ID(message_p);
LOG_D(GTPU, "GTP-U received %s for instance %ld\n", messages_info[msgType].name, myInstance);