int s1ap_eNB_generate_initial_ue_message(struct s1ap_eNB_UE_description_s *ue_ref, uint8_t *nas_pdu, uint32_t nas_len) { InitialUEMessageIEs_t initialUEmessageIEs; InitialUEMessageIEs_t *initialUEmessageIEs_p = &initialUEmessageIEs; uint8_t *buffer; uint32_t len; char tac[] = { 0x00, 0x01 }; uint8_t id[] = { 0x03, 0x56, 0xf0, 0xd8 }; char identity[] = { 0x02, 0x08, 0x34 }; memset((void *)initialUEmessageIEs_p, 0, sizeof(InitialUEMessageIEs_t)); initialUEmessageIEs.eNB_UE_S1AP_ID = ue_ref->eNB_UE_s1ap_id; initialUEmessageIEs.nas_pdu.buf = nas_pdu; initialUEmessageIEs.nas_pdu.size = nas_len; initialUEmessageIEs.tai.tAC.buf = (uint8_t*)tac; initialUEmessageIEs.tai.tAC.size = 2; initialUEmessageIEs.tai.pLMNidentity.buf = (uint8_t*)identity; initialUEmessageIEs.tai.pLMNidentity.size = 3; initialUEmessageIEs.eutran_cgi.pLMNidentity.buf = (uint8_t*)identity; initialUEmessageIEs.eutran_cgi.pLMNidentity.size = 3; initialUEmessageIEs.eutran_cgi.cell_ID.buf = (uint8_t*)id; initialUEmessageIEs.eutran_cgi.cell_ID.size = 4; initialUEmessageIEs.eutran_cgi.cell_ID.bits_unused = 4; initialUEmessageIEs.rrC_Establishment_Cause = RRC_Establishment_Cause_mo_Data; if (s1ap_eNB_encode_initial_ue_message(initialUEmessageIEs_p, &buffer, &len) < 0) { if (buffer != NULL) free(buffer); return -1; } /* Send encoded message over sctp */ return sctp_send_msg(ue_ref->eNB->assocId, ue_ref->stream_send, buffer, len); }
int s1ap_eNB_generate_initial_ue_message ( uint8_t ** buffer, uint32_t * length) { InitialUEMessageIEs initialUEmessageIEs; InitialUEMessageIEs *initialUEmessageIEs_p = &initialUEmessageIEs; memset (initialUEmessageIEs_p, 0, sizeof (InitialUEMessageIEs)); initialUEmessageIEs.eNB_UE_S1AP_ID = eNB_UE_S1AP_ID; initialUEmessageIEs.nas_pdu.buf = infoNAS; initialUEmessageIEs.nas_pdu.size = sizeof (infoNAS); initialUEmessageIEs.tai.tAC.buf = tac; initialUEmessageIEs.tai.tAC.size = 2; initialUEmessageIEs.tai.pLMNidentity.buf = identity; initialUEmessageIEs.tai.pLMNidentity.size = 3; initialUEmessageIEs.eutran_cgi.pLMNidentity.buf = identity; initialUEmessageIEs.eutran_cgi.pLMNidentity.size = 3; initialUEmessageIEs.eutran_cgi.cell_ID.buf = id; initialUEmessageIEs.eutran_cgi.cell_ID.size = 4; initialUEmessageIEs.eutran_cgi.cell_ID.bits_unused = 4; initialUEmessageIEs.rrC_Establishment_Cause = RRC_Establishment_Cause_mo_Data; return s1ap_eNB_encode_initial_ue_message (initialUEmessageIEs_p, buffer, length); }
static inline int s1ap_eNB_encode_initiating(s1ap_message *s1ap_message_p, uint8_t **buffer, uint32_t *len) { int ret = -1; MessageDef *message_p; char *message_string = NULL; size_t message_string_size; MessagesIds message_id; DevAssert(s1ap_message_p != NULL); message_string = calloc(10000, sizeof(char)); s1ap_string_total_size = 0; switch(s1ap_message_p->procedureCode) { case S1ap_ProcedureCode_id_S1Setup: ret = s1ap_eNB_encode_s1_setup_request( &s1ap_message_p->msg.s1ap_S1SetupRequestIEs, buffer, len); s1ap_xer_print_s1ap_s1setuprequest(s1ap_xer__print2sp, message_string, s1ap_message_p); message_id = S1AP_S1_SETUP_LOG; break; case S1ap_ProcedureCode_id_uplinkNASTransport: ret = s1ap_eNB_encode_uplink_nas_transport( &s1ap_message_p->msg.s1ap_UplinkNASTransportIEs, buffer, len); s1ap_xer_print_s1ap_uplinknastransport(s1ap_xer__print2sp, message_string, s1ap_message_p); message_id = S1AP_UPLINK_NAS_LOG; break; case S1ap_ProcedureCode_id_UECapabilityInfoIndication: ret = s1ap_eNB_encode_ue_capability_info_indication( &s1ap_message_p->msg.s1ap_UECapabilityInfoIndicationIEs, buffer, len); s1ap_xer_print_s1ap_uecapabilityinfoindication(s1ap_xer__print2sp, message_string, s1ap_message_p); message_id = S1AP_UE_CAPABILITY_IND_LOG; break; case S1ap_ProcedureCode_id_initialUEMessage: ret = s1ap_eNB_encode_initial_ue_message( &s1ap_message_p->msg.s1ap_InitialUEMessageIEs, buffer, len); s1ap_xer_print_s1ap_initialuemessage(s1ap_xer__print2sp, message_string, s1ap_message_p); message_id = S1AP_INITIAL_UE_MESSAGE_LOG; break; case S1ap_ProcedureCode_id_NASNonDeliveryIndication: ret = s1ap_eNB_encode_nas_non_delivery( &s1ap_message_p->msg.s1ap_NASNonDeliveryIndication_IEs, buffer, len); s1ap_xer_print_s1ap_nasnondeliveryindication_(s1ap_xer__print2sp, message_string, s1ap_message_p); message_id = S1AP_NAS_NON_DELIVERY_IND_LOG; break; default: S1AP_DEBUG("Unknown procedure ID (%d) for initiating message\n", (int)s1ap_message_p->procedureCode); return ret; break; } message_string_size = strlen(message_string); message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, message_string_size + sizeof (IttiMsgText)); message_p->ittiMsg.s1ap_s1_setup_log.size = message_string_size; memcpy(&message_p->ittiMsg.s1ap_s1_setup_log.text, message_string, message_string_size); itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); free(message_string); return ret; }