diff --git a/openair-cn/OAI_EPC/oai_epc.c b/openair-cn/OAI_EPC/oai_epc.c index b8eff1ca8c233520612857339e304362a8fdf964..05f5944b0499f6e6095c85946c5e16e8ee576a9a 100644 --- a/openair-cn/OAI_EPC/oai_epc.c +++ b/openair-cn/OAI_EPC/oai_epc.c @@ -74,7 +74,9 @@ int main(int argc, char *argv[]) /* Calling each layer init function */ CHECK_INIT_RETURN(log_init(&mme_config, oai_epc_log_specific)); - CHECK_INIT_RETURN(itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, NULL)); + CHECK_INIT_RETURN(itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, + tasks_info, messages_info, messages_definition_xml, + mme_config.itti_config.log_file)); CHECK_INIT_RETURN(nas_init(&mme_config)); CHECK_INIT_RETURN(sctp_init(&mme_config)); diff --git a/openair-cn/S1AP/s1ap_eNB_itti_messaging.c b/openair-cn/S1AP/s1ap_eNB_itti_messaging.c index 0e1cef7027396d36d07e9eac08bd8dc4247f1118..3531d2c38d659f6590ce13c90f779277a2d75f12 100644 --- a/openair-cn/S1AP/s1ap_eNB_itti_messaging.c +++ b/openair-cn/S1AP/s1ap_eNB_itti_messaging.c @@ -20,7 +20,10 @@ void s1ap_eNB_itti_send_sctp_data_req(instance_t instance, int32_t assoc_id, uin itti_send_msg_to_task(TASK_SCTP, instance, message_p); } -void s1ap_eNB_itti_send_nas_downlink_ind(instance_t instance, uint8_t *nas_pdu, +void s1ap_eNB_itti_send_nas_downlink_ind(instance_t instance, + uint16_t ue_initial_id, + uint32_t eNB_ue_s1ap_id, + uint8_t *nas_pdu, uint32_t nas_pdu_length) { MessageDef *message_p; @@ -30,6 +33,8 @@ void s1ap_eNB_itti_send_nas_downlink_ind(instance_t instance, uint8_t *nas_pdu, s1ap_downlink_nas = &message_p->msg.s1ap_downlink_nas; + s1ap_downlink_nas->ue_initial_id = ue_initial_id; + s1ap_downlink_nas->eNB_ue_s1ap_id = eNB_ue_s1ap_id; s1ap_downlink_nas->nas_pdu.buffer = nas_pdu; s1ap_downlink_nas->nas_pdu.length = nas_pdu_length; diff --git a/openair-cn/S1AP/s1ap_eNB_itti_messaging.h b/openair-cn/S1AP/s1ap_eNB_itti_messaging.h index 1b20423e73ed0c215f98ca127adfef055bfb0e02..e6fbcce11463c6a5f05701b801d1271527471834 100644 --- a/openair-cn/S1AP/s1ap_eNB_itti_messaging.h +++ b/openair-cn/S1AP/s1ap_eNB_itti_messaging.h @@ -4,7 +4,10 @@ void s1ap_eNB_itti_send_sctp_data_req(instance_t instance, int32_t assoc_id, uint8_t *buffer, uint32_t buffer_length, uint16_t stream); -void s1ap_eNB_itti_send_nas_downlink_ind(instance_t instance, uint8_t *nas_pdu, +void s1ap_eNB_itti_send_nas_downlink_ind(instance_t instance, + uint16_t ue_initial_id, + uint32_t eNB_ue_s1ap_id, + uint8_t *nas_pdu, uint32_t nas_pdu_length); #endif /* S1AP_ENB_ITTI_MESSAGING_H_ */ diff --git a/openair-cn/S1AP/s1ap_eNB_nas_procedures.c b/openair-cn/S1AP/s1ap_eNB_nas_procedures.c index 9c6b97f842fbcc061362a93a1827888ecd0f59eb..29214cde8dd4f6aec7d941b23d1e5c2d72f8bc4e 100644 --- a/openair-cn/S1AP/s1ap_eNB_nas_procedures.c +++ b/openair-cn/S1AP/s1ap_eNB_nas_procedures.c @@ -258,6 +258,8 @@ int s1ap_eNB_handle_nas_downlink(uint32_t assoc_id, /* Forward the NAS PDU to RRC */ s1ap_eNB_itti_send_nas_downlink_ind(s1ap_eNB_instance->instance, + ue_desc_p->ue_initial_id, + ue_desc_p->eNB_ue_s1ap_id, downlink_NAS_transport_p->nas_pdu.buf, downlink_NAS_transport_p->nas_pdu.size); diff --git a/openair-cn/UTILS/mme_config.c b/openair-cn/UTILS/mme_config.c index 5529a2e731839f0852db372ca5b53b4dd6354368..36ee5309f047dfa25a6cd35a54e7f22944ff9acd 100644 --- a/openair-cn/UTILS/mme_config.c +++ b/openair-cn/UTILS/mme_config.c @@ -86,7 +86,9 @@ void config_init(mme_config_t *mme_config_p) mme_config_p->ipv4.sgw_ip_netmask_for_S11 = DEFAULT_SGW_IP_NETMASK_FOR_S11; mme_config_p->s6a_config.conf_file = S6A_CONF_FILE; + mme_config_p->itti_config.queue_size = ITTI_QUEUE_SIZE_MAX; + mme_config_p->itti_config.log_file = NULL; mme_config_p->sctp_config.in_streams = SCTP_IN_STREAMS; mme_config_p->sctp_config.out_streams = SCTP_OUT_STREAMS; @@ -199,6 +201,7 @@ static void config_display(mme_config_t *mme_config_p) mme_config_p->ipv4.mme_ip_netmask_for_S11); fprintf(stdout, "- ITTI:\n"); fprintf(stdout, " queue size .....: %u (bytes)\n", mme_config_p->itti_config.queue_size); + fprintf(stdout, " log file .......: %s\n", mme_config_p->itti_config.log_file); fprintf(stdout, "- SCTP:\n"); fprintf(stdout, " in streams .....: %u\n", mme_config_p->sctp_config.in_streams); fprintf(stdout, " out streams ....: %u\n", mme_config_p->sctp_config.out_streams); @@ -227,6 +230,8 @@ static void usage(void) fprintf(stdout, "-c<path>\n"); fprintf(stdout, " Set the configuration file for mme\n"); fprintf(stdout, " See template in UTILS/CONF\n"); + fprintf(stdout, "-K<file>\n"); + fprintf(stdout, " Output intertask messages to provided file\n"); fprintf(stdout, "-V Print %s version and return\n", PACKAGE_NAME); fprintf(stdout, "-v[1-2] Debug level:\n"); fprintf(stdout, " 1 -> ASN1 XER printf on and ASN1 debug off\n"); @@ -241,7 +246,7 @@ int config_parse_opt_line(int argc, char *argv[], mme_config_t *mme_config_p) int c; config_init(mme_config_p); /* Parsing command line */ - while ((c = getopt (argc, argv, "c:hi:v:V")) != -1) { + while ((c = getopt (argc, argv, "c:hi:K:v:V")) != -1) { switch (c) { case 'c': { /* Store the given configuration file. If no file is given, @@ -272,6 +277,9 @@ int config_parse_opt_line(int argc, char *argv[], mme_config_t *mme_config_p) exit(0); nwGtpv1uDisplayBanner(); } break; + case 'K': + mme_config_p->itti_config.log_file = strdup(optarg); + break; case 'h': /* Fall through */ default: usage(); diff --git a/openair-cn/UTILS/mme_config.h b/openair-cn/UTILS/mme_config.h index bb587356d8da5008b83582cb169cc0f261af52f6..0c8501d9083c18d204e539ee4d08b90ac315db01 100644 --- a/openair-cn/UTILS/mme_config.h +++ b/openair-cn/UTILS/mme_config.h @@ -111,6 +111,7 @@ typedef struct mme_config_s { } s6a_config; struct { uint32_t queue_size; + char *log_file; } itti_config; } mme_config_t; diff --git a/openair2/COMMON/s1ap_messages_types.h b/openair2/COMMON/s1ap_messages_types.h index 82356edb65fb27e8d80ac8063f4f4432e51393d0..680668f49999443611c267c49651d55df633e7c7 100644 --- a/openair2/COMMON/s1ap_messages_types.h +++ b/openair2/COMMON/s1ap_messages_types.h @@ -245,7 +245,16 @@ typedef struct s1ap_uplink_nas_s { nas_pdu_t nas_pdu; } s1ap_uplink_nas_t; -typedef s1ap_uplink_nas_t s1ap_downlink_nas_t; +typedef struct s1ap_downlink_nas_s { + /* UE id for initial connection to S1AP */ + uint16_t ue_initial_id; + + /* Unique UE identifier within an eNB */ + unsigned eNB_ue_s1ap_id:24; + + /* NAS pdu */ + nas_pdu_t nas_pdu; +} s1ap_downlink_nas_t; typedef struct s1ap_initial_context_setup_req_s { /* UE id for initial connection to S1AP */