Commit c4e3c774 authored by Navid Nikaein's avatar Navid Nikaein

*updates for OAI E-UTRAN and LTEBox EPC IOT



git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5209 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent ee9a31b9
...@@ -42,8 +42,9 @@ Address : EURECOM, ...@@ -42,8 +42,9 @@ Address : EURECOM,
/* When gtpv1u is compiled for eNB use MACRO from UTILS/log.h, /* When gtpv1u is compiled for eNB use MACRO from UTILS/log.h,
* otherwise use standard fprintf as logger. * otherwise use standard fprintf as logger.
*/ */
#if defined(ENB_MODE) //#if defined(ENB_MODE)
# define GTPU_DEBUG(x, args...) LOG_D(GTPU, x, ##args) #if 0
# define GTPU_DEBUG(x, args...) LOG_I(GTPU, x, ##args)
# define GTPU_INFO(x, args...) LOG_I(GTPU, x, ##args) # define GTPU_INFO(x, args...) LOG_I(GTPU, x, ##args)
# define GTPU_WARN(x, args...) LOG_W(GTPU, x, ##args) # define GTPU_WARN(x, args...) LOG_W(GTPU, x, ##args)
# define GTPU_ERROR(x, args...) LOG_E(GTPU, x, ##args) # define GTPU_ERROR(x, args...) LOG_E(GTPU, x, ##args)
......
...@@ -483,7 +483,7 @@ gtpv1u_new_data_req( ...@@ -483,7 +483,7 @@ gtpv1u_new_data_req(
bearer_p->state); bearer_p->state);
#warning LG: HACK WHILE WAITING FOR NAS, normally return -1 #warning LG: HACK WHILE WAITING FOR NAS, normally return -1
if (bearer_p->state != BEARER_IN_CONFIG) if (bearer_p->state != BEARER_IN_CONFIG)
return -1; return -1;
} }
memset(&stack_req, 0, sizeof(NwGtpv1uUlpApiT)); memset(&stack_req, 0, sizeof(NwGtpv1uUlpApiT));
...@@ -492,6 +492,7 @@ gtpv1u_new_data_req( ...@@ -492,6 +492,7 @@ gtpv1u_new_data_req(
stack_req.apiInfo.sendtoInfo.teid = bearer_p->teid_sgw; stack_req.apiInfo.sendtoInfo.teid = bearer_p->teid_sgw;
stack_req.apiInfo.sendtoInfo.ipAddr = bearer_p->sgw_ip_addr; stack_req.apiInfo.sendtoInfo.ipAddr = bearer_p->sgw_ip_addr;
LOG_W(GTPU, "TX TO TEID %u addr 0x%x\n",bearer_p->teid_sgw, bearer_p->sgw_ip_addr);
rc = nwGtpv1uGpduMsgNew(gtpv1u_data_p->gtpv1u_stack, rc = nwGtpv1uGpduMsgNew(gtpv1u_data_p->gtpv1u_stack,
bearer_p->teid_sgw, bearer_p->teid_sgw,
NW_FALSE, NW_FALSE,
...@@ -533,6 +534,7 @@ static int gtpv1u_create_s1u_tunnel(gtpv1u_enb_create_tunnel_req_t *create_tunne ...@@ -533,6 +534,7 @@ static int gtpv1u_create_s1u_tunnel(gtpv1u_enb_create_tunnel_req_t *create_tunne
hashtable_rc_t hash_rc = HASH_TABLE_KEY_NOT_EXISTS; hashtable_rc_t hash_rc = HASH_TABLE_KEY_NOT_EXISTS;
int i; int i;
ebi_t eps_bearer_id = 0; ebi_t eps_bearer_id = 0;
int ipv4_addr = 0;
message_p = itti_alloc_new_message(TASK_GTPV1_U, GTPV1U_ENB_CREATE_TUNNEL_RESP); message_p = itti_alloc_new_message(TASK_GTPV1_U, GTPV1U_ENB_CREATE_TUNNEL_RESP);
GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).ue_index = create_tunnel_req_pP->ue_index; GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).ue_index = create_tunnel_req_pP->ue_index;
...@@ -576,7 +578,8 @@ static int gtpv1u_create_s1u_tunnel(gtpv1u_enb_create_tunnel_req_t *create_tunne ...@@ -576,7 +578,8 @@ static int gtpv1u_create_s1u_tunnel(gtpv1u_enb_create_tunnel_req_t *create_tunne
} else if (hash_rc == HASH_TABLE_OK) { } else if (hash_rc == HASH_TABLE_OK) {
gtpv1u_ue_data_p->ue_id = create_tunnel_req_pP->ue_index; gtpv1u_ue_data_p->ue_id = create_tunnel_req_pP->ue_index;
gtpv1u_ue_data_p->instance_id = 0; // TO DO gtpv1u_ue_data_p->instance_id = 0; // TO DO
#warning "TO DO TO DO gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].sgw_ip_addr" ipv4_addr =
#warning "TO DO TO DO gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].sgw_ip_addr = (uint32_t)(create_tunnel_req_pP->sgw_addr[i].buffer;"
gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].state = BEARER_IN_CONFIG; gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].state = BEARER_IN_CONFIG;
gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_eNB = s1u_teid; gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_eNB = s1u_teid;
gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_sgw = create_tunnel_req_pP->sgw_S1u_teid[i]; gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_sgw = create_tunnel_req_pP->sgw_S1u_teid[i];
......
...@@ -406,9 +406,9 @@ extern int asn1_xer_print; ...@@ -406,9 +406,9 @@ extern int asn1_xer_print;
# include "s1ap_eNB_default_values.h" # include "s1ap_eNB_default_values.h"
# define S1AP_ERROR(x, args...) LOG_E(S1AP, x, ##args) # define S1AP_ERROR(x, args...) LOG_E(S1AP, x, ##args)
# define S1AP_WARN(x, args...) LOG_W(S1AP, x, ##args) # define S1AP_WARN(x, args...) LOG_W(S1AP, x, ##args)
# define S1AP_TRAF(x, args...) LOG_T(S1AP, x, ##args) # define S1AP_TRAF(x, args...) LOG_I(S1AP, x, ##args)
# define S1AP_INFO(x, args...) LOG_I(S1AP, x, ##args) # define S1AP_INFO(x, args...) LOG_I(S1AP, x, ##args)
# define S1AP_DEBUG(x, args...) LOG_D(S1AP, x, ##args) # define S1AP_DEBUG(x, args...) LOG_I(S1AP, x, ##args)
#else #else
# include "mme_default_values.h" # include "mme_default_values.h"
# define S1AP_ERROR(x, args...) do { fprintf(stdout, "[S1AP][E]"x, ##args); } while(0) # define S1AP_ERROR(x, args...) do { fprintf(stdout, "[S1AP][E]"x, ##args); } while(0)
......
...@@ -82,8 +82,8 @@ static int s1ap_eNB_decode_initiating_message(s1ap_message *message, ...@@ -82,8 +82,8 @@ static int s1ap_eNB_decode_initiating_message(s1ap_message *message,
default: default:
S1AP_ERROR("Unknown procedure ID (%d) for initiating message\n", S1AP_ERROR("Unknown procedure ID (%d) for initiating message\n",
(int)initiating_p->procedureCode); (int)initiating_p->procedureCode);
AssertFatal( 0 , "Unknown procedure ID (%d) for initiating message\n", //AssertFatal( 0 , "Unknown procedure ID (%d) for initiating message\n",
(int)initiating_p->procedureCode); // (int)initiating_p->procedureCode);
return -1; return -1;
} }
......
...@@ -402,14 +402,14 @@ void s1ap_eNB_nas_non_delivery_ind(instance_t instance, ...@@ -402,14 +402,14 @@ void s1ap_eNB_nas_non_delivery_ind(instance_t instance,
int s1ap_eNB_initial_ctxt_resp( int s1ap_eNB_initial_ctxt_resp(
instance_t instance, s1ap_initial_context_setup_resp_t *initial_ctxt_resp_p) instance_t instance, s1ap_initial_context_setup_resp_t *initial_ctxt_resp_p)
{ {
s1ap_eNB_instance_t *s1ap_eNB_instance_p; s1ap_eNB_instance_t *s1ap_eNB_instance_p = NULL;
struct s1ap_eNB_ue_context_s *ue_context_p; struct s1ap_eNB_ue_context_s *ue_context_p = NULL;
S1ap_InitialContextSetupResponseIEs_t *initial_ies_p; S1ap_InitialContextSetupResponseIEs_t *initial_ies_p = NULL;
s1ap_message message; s1ap_message message;
uint8_t *buffer; uint8_t *buffer = NULL;
uint32_t length; uint32_t length;
int ret = -1; int ret = -1;
int i; int i;
......
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
# include "UTIL/LOG/log.h" # include "UTIL/LOG/log.h"
# define SCTP_ERROR(x, args...) LOG_E(SCTP, x, ##args) # define SCTP_ERROR(x, args...) LOG_E(SCTP, x, ##args)
# define SCTP_WARN(x, args...) LOG_W(SCTP, x, ##args) # define SCTP_WARN(x, args...) LOG_W(SCTP, x, ##args)
# define SCTP_DEBUG(x, args...) LOG_D(SCTP, x, ##args) # define SCTP_DEBUG(x, args...) LOG_I(SCTP, x, ##args)
#else #else
# define SCTP_ERROR(x, args...) do { fprintf(stderr, "[SCTP][E]"x, ##args); } while(0) # define SCTP_ERROR(x, args...) do { fprintf(stderr, "[SCTP][E]"x, ##args); } while(0)
# define SCTP_DEBUG(x, args...) do { fprintf(stdout, "[SCTP][D]"x, ##args); } while(0) # define SCTP_DEBUG(x, args...) do { fprintf(stdout, "[SCTP][D]"x, ##args); } while(0)
......
...@@ -549,17 +549,17 @@ inline void sctp_eNB_read_from_socket(struct sctp_cnx_list_elm_s *sctp_cnx) ...@@ -549,17 +549,17 @@ inline void sctp_eNB_read_from_socket(struct sctp_cnx_list_elm_s *sctp_cnx)
} else { } else {
sctp_cnx->nb_messages++; sctp_cnx->nb_messages++;
if (sinfo.sinfo_ppid != sctp_cnx->ppid) { if (ntohl(sinfo.sinfo_ppid) != sctp_cnx->ppid) {
/* Mismatch in Payload Protocol Identifier, /* Mismatch in Payload Protocol Identifier,
* may be we received unsollicited traffic from stack other than S1AP. * may be we received unsollicited traffic from stack other than S1AP.
*/ */
SCTP_ERROR("Received data from peer with unsollicited PPID %d, expecting %d\n", SCTP_ERROR("Received data from peer with unsollicited PPID %d, expecting %d\n",
sinfo.sinfo_ppid, sctp_cnx->ppid); ntohl(sinfo.sinfo_ppid), sctp_cnx->ppid);
} }
SCTP_DEBUG("[%d][%d] Msg of length %d received from port %u, on stream %d, PPID %d\n", SCTP_DEBUG("[%d][%d] Msg of length %d received from port %u, on stream %d, PPID %d\n",
sinfo.sinfo_assoc_id, sctp_cnx->sd, n, ntohs(addr.sin_port), sinfo.sinfo_assoc_id, sctp_cnx->sd, n, ntohs(addr.sin_port),
sinfo.sinfo_stream, sinfo.sinfo_ppid); sinfo.sinfo_stream, ntohl(sinfo.sinfo_ppid));
sctp_itti_send_new_message_ind(sctp_cnx->task_id, sctp_itti_send_new_message_ind(sctp_cnx->task_id,
sinfo.sinfo_assoc_id, sinfo.sinfo_assoc_id,
......
This diff is collapsed.
...@@ -2943,7 +2943,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,ui ...@@ -2943,7 +2943,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,ui
phy_vars_eNB->eNB_UE_stats[i].UL_rssi[j] = dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[j]) phy_vars_eNB->eNB_UE_stats[i].UL_rssi[j] = dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[j])
- phy_vars_eNB->rx_total_gain_eNB_dB; - phy_vars_eNB->rx_total_gain_eNB_dB;
#ifdef DEBUG_PHY_PROC #ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[eNB %d] Frame %d subframe %d: ULSCH %d RX power (%d,%d) dB\n", LOG_I(PHY,"[eNB %d] Frame %d subframe %d: ULSCH %d RX power (%d,%d) dB\n",
phy_vars_eNB->Mod_id,frame,last_slot>>1,i, phy_vars_eNB->Mod_id,frame,last_slot>>1,i,
dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[0]), dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[0]),
dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[1])); dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[1]));
...@@ -3058,9 +3058,10 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,ui ...@@ -3058,9 +3058,10 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,ui
} }
// If we've dropped the UE, go back to PRACH mode for this UE // If we've dropped the UE, go back to PRACH mode for this UE
if (phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid] == 20) { #if !defined(EXMIMO_IOT)
LOG_I(PHY,"[eNB %d] frame %d, subframe %d, UE %d: ULSCH consecutive error count reached, removing UE\n", if (phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid] == 20) {
phy_vars_eNB->Mod_id,frame,last_slot>>1, i); LOG_I(PHY,"[eNB %d] frame %d, subframe %d, UE %d: ULSCH consecutive error count reached %u, removing UE\n",
phy_vars_eNB->Mod_id,frame,last_slot>>1, i, phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid]);
phy_vars_eNB->eNB_UE_stats[i].mode = PRACH; phy_vars_eNB->eNB_UE_stats[i].mode = PRACH;
#ifdef OPENAIR2 #ifdef OPENAIR2
mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id, mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
...@@ -3070,6 +3071,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,ui ...@@ -3070,6 +3071,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,ui
remove_ue(phy_vars_eNB->eNB_UE_stats[i].crnti,phy_vars_eNB,abstraction_flag); remove_ue(phy_vars_eNB->eNB_UE_stats[i].crnti,phy_vars_eNB,abstraction_flag);
phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid]=0; phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors[harq_pid]=0;
} }
#endif
} }
} // ulsch in error } // ulsch in error
else { else {
......
...@@ -2468,8 +2468,8 @@ int main(int argc, char **argv) { ...@@ -2468,8 +2468,8 @@ int main(int argc, char **argv) {
} //ABStraction } //ABStraction
if ( (test_perf != 0) && (100 * effective_rate > test_perf )) { if ( (test_perf != 0) && (100 * effective_rate > test_perf )) {
fprintf(bler_fd,"SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err\n"); fprintf(time_meas_fd,"SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err\n");
fprintf(bler_fd,"%f;%d;%d;%f;%d;%d;%d;%d;%d;%d;%d;%d;%d\n", fprintf(time_meas_fd,"%f;%d;%d;%f;%d;%d;%d;%d;%d;%d;%d;%d;%d\n",
SNR, SNR,
mcs, mcs,
PHY_vars_eNB->dlsch_eNB[0][0]->harq_processes[0]->TBS, PHY_vars_eNB->dlsch_eNB[0][0]->harq_processes[0]->TBS,
......
ENB_APP_DIR = $(OPENAIR2_TOP)/ENB_APP ENB_APP_DIR = $(OPENAIR2_TOP)/ENB_APP
ENB_APP_OBJS = $(ENB_APP_DIR)/enb_app.o $(ENB_APP_DIR)/enb_config.o ENB_APP_OBJS = $(ENB_APP_DIR)/enb_app.o \
$(ENB_APP_DIR)/enb_config.o
ENB_APP_incl = \ ENB_APP_incl = \
-I$(ENB_APP_DIR) -I$(ENB_APP_DIR)
\ No newline at end of file
/******************************************************************************* /*******************************************************************************
Eurecom OpenAirInterface 2
Eurecom OpenAirInterface Copyright(c) 1999 - 2014 Eurecom
Copyright(c) 1999 - 2012 Eurecom
This program is free software; you can redistribute it and/or modify it
This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License,
under the terms and conditions of the GNU General Public License, version 2, as published by the Free Software Foundation.
version 2, as published by the Free Software Foundation.
This program is distributed in the hope it will be useful, but WITHOUT
This program is distributed in the hope it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
more details.
You should have received a copy of the GNU General Public License along with
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc.,
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in
The full GNU General Public License is included in this distribution in the file called "COPYING".
the file called "COPYING".
Contact Information
Contact Information Openair Admin: openair_admin@eurecom.fr
Openair Admin: openair_admin@eurecom.fr Openair Tech : openair_tech@eurecom.fr
Openair Tech : openair_tech@eurecom.fr Forums : http://forums.eurecom.fsr/openairinterface
Forums : http://forums.eurecom.fr/openairinterface Address : EURECOM,
Address : EURECOM, Campus SophiaTech, 450 Route des Chappes Campus SophiaTech,
06410 Biot FRANCE 450 Route des Chappes,
CS 50193
*******************************************************************************/ 06904 Biot Sophia Antipolis cedex,
FRANCE
*******************************************************************************/
/*
enb_app.c
-------------------
AUTHOR : Laurent Winckel, Sebastien ROUX, Lionel GAUTHIER
COMPANY : EURECOM
EMAIL : Lionel.Gauthier@eurecom.fr
*/
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
...@@ -47,9 +56,7 @@ ...@@ -47,9 +56,7 @@
# if defined(ENABLE_USE_MME) # if defined(ENABLE_USE_MME)
# include "s1ap_eNB.h" # include "s1ap_eNB.h"
# include "sctp_eNB_task.h" # include "sctp_eNB_task.h"
# if defined(LINK_PDCP_TO_GTPV1U) # include "gtpv1u_eNB_task.h"
# include "gtpv1u_eNB_defs.h"
# endif
# endif # endif
extern unsigned char NB_eNB_INST; extern unsigned char NB_eNB_INST;
...@@ -169,7 +176,7 @@ static uint32_t eNB_app_register(uint32_t enb_id_start, uint32_t enb_id_end, con ...@@ -169,7 +176,7 @@ static uint32_t eNB_app_register(uint32_t enb_id_start, uint32_t enb_id_end, con
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
void *eNB_app_task(void *args_p) void *eNB_app_task(void *args_p)
{ {
const Enb_properties_array_t *enb_properties = NULL; const Enb_properties_array_t *enb_properties_p = NULL;
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
uint32_t enb_nb = 1; /* Default number of eNB is 1 */ uint32_t enb_nb = 1; /* Default number of eNB is 1 */
uint32_t enb_id_start = 0; uint32_t enb_id_start = 0;
...@@ -199,25 +206,22 @@ void *eNB_app_task(void *args_p) ...@@ -199,25 +206,22 @@ void *eNB_app_task(void *args_p)
# endif # endif
# endif # endif
enb_properties = enb_config_get(); enb_properties_p = enb_config_get();
AssertFatal (enb_nb <= enb_properties->number, AssertFatal (enb_nb <= enb_properties_p->number,
"Number of eNB is greater than eNB defined in configuration file (%d/%d)!", "Number of eNB is greater than eNB defined in configuration file (%d/%d)!",
enb_nb, enb_properties->number); enb_nb, enb_properties_p->number);
for (enb_id = enb_id_start; (enb_id < enb_id_end) ; enb_id++) for (enb_id = enb_id_start; (enb_id < enb_id_end) ; enb_id++)
{ {
configure_phy(enb_id, enb_properties); configure_phy(enb_id, enb_properties_p);
configure_rrc(enb_id, enb_properties); configure_rrc(enb_id, enb_properties_p);
} }
# if defined(ENABLE_USE_MME) # if defined(ENABLE_USE_MME)
# if defined(LINK_PDCP_TO_GTPV1U)
gtpv1u_eNB_init(enb_properties->properties[0]);
# endif
/* Try to register each eNB */ /* Try to register each eNB */
registered_enb = 0; registered_enb = 0;
register_enb_pending = eNB_app_register (enb_id_start, enb_id_end, enb_properties); register_enb_pending = eNB_app_register (enb_id_start, enb_id_end, enb_properties_p);
# else # else
/* Start L2L1 task */ /* Start L2L1 task */
msg_p = itti_alloc_new_message(TASK_ENB_APP, INITIALIZE_MESSAGE); msg_p = itti_alloc_new_message(TASK_ENB_APP, INITIALIZE_MESSAGE);
...@@ -293,7 +297,7 @@ void *eNB_app_task(void *args_p) ...@@ -293,7 +297,7 @@ void *eNB_app_task(void *args_p)
sleep(ENB_REGISTER_RETRY_DELAY); sleep(ENB_REGISTER_RETRY_DELAY);
/* Restart the registration process */ /* Restart the registration process */
registered_enb = 0; registered_enb = 0;
register_enb_pending = eNB_app_register (enb_id_start, enb_id_end, enb_properties); register_enb_pending = eNB_app_register (enb_id_start, enb_id_end, enb_properties_p);
} }
} }
} }
...@@ -313,7 +317,7 @@ void *eNB_app_task(void *args_p) ...@@ -313,7 +317,7 @@ void *eNB_app_task(void *args_p)
{ {
/* Restart the registration process */ /* Restart the registration process */
registered_enb = 0; registered_enb = 0;
register_enb_pending = eNB_app_register (enb_id_start, enb_id_end, enb_properties); register_enb_pending = eNB_app_register (enb_id_start, enb_id_end, enb_properties_p);
} }
break; break;
# endif # endif
......
/******************************************************************************* /*******************************************************************************
Eurecom OpenAirInterface 2
Eurecom OpenAirInterface Copyright(c) 1999 - 2014 Eurecom
Copyright(c) 1999 - 2012 Eurecom
This program is free software; you can redistribute it and/or modify it
This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License,
under the terms and conditions of the GNU General Public License, version 2, as published by the Free Software Foundation.
version 2, as published by the Free Software Foundation.
This program is distributed in the hope it will be useful, but WITHOUT
This program is distributed in the hope it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
more details.
You should have received a copy of the GNU General Public License along with
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc.,
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in
The full GNU General Public License is included in this distribution in the file called "COPYING".
the file called "COPYING".
Contact Information
Contact Information Openair Admin: openair_admin@eurecom.fr
Openair Admin: openair_admin@eurecom.fr Openair Tech : openair_tech@eurecom.fr
Openair Tech : openair_tech@eurecom.fr Forums : http://forums.eurecom.fsr/openairinterface
Forums : http://forums.eurecom.fr/openairinterface Address : EURECOM,
Address : EURECOM, Campus SophiaTech, 450 Route des Chappes Campus SophiaTech,
06410 Biot FRANCE 450 Route des Chappes,
CS 50193
06904 Biot Sophia Antipolis cedex,
FRANCE
*******************************************************************************/ *******************************************************************************/
/*
enb_app.h
-------------------
AUTHOR : Laurent Winckel, Sebastien ROUX, Lionel GAUTHIER
COMPANY : EURECOM
EMAIL : Lionel.Gauthier@eurecom.fr
*/
#ifndef ENB_APP_H_ #ifndef ENB_APP_H_
#define ENB_APP_H_ #define ENB_APP_H_
void *eNB_app_task(void *args_p); void *eNB_app_task(void *args_p);
#endif /* ENB_APP_H_ */ #endif /* ENB_APP_H_ */
...@@ -84,8 +84,12 @@ ...@@ -84,8 +84,12 @@
#define CCCH 0 // srb0 #define CCCH 0 // srb0
#define DCCH 1 // srb1 #define DCCH 1 // srb1
#define DCCH1 2 // srb2 #define DCCH1 2 // srb2
#define DTCH 3 // DTCH + lcid < 11
#ifdef EXMIMO_IOT
#define DTCH 5 // DTCH + lcid < 11
#else
#define DTCH 3
#endif
#define MCCH 4 // MCCH #define MCCH 4 // MCCH
#define MTCH 1 // MTCH #define MTCH 1 // MTCH
......
...@@ -2259,14 +2259,11 @@ void schedule_ulsch_rnti(module_id_t module_idP, ...@@ -2259,14 +2259,11 @@ void schedule_ulsch_rnti(module_id_t module_idP,
status = mac_get_rrc_status(module_idP,1,next_ue); status = mac_get_rrc_status(module_idP,1,next_ue);
#ifndef EXMIMO_IOT
if (status < RRC_CONNECTED) if (status < RRC_CONNECTED)
cqi_req = 0; cqi_req = 0;
else else
cqi_req = 1; cqi_req = 1;
#else
cqi_req = 0;
#endif
if (round > 0) { if (round > 0) {
ndi = eNB_mac_inst[module_idP].UE_template[ue_mod_id].oldNDI_UL[harq_pid]; ndi = eNB_mac_inst[module_idP].UE_template[ue_mod_id].oldNDI_UL[harq_pid];
......
...@@ -77,6 +77,9 @@ endif ...@@ -77,6 +77,9 @@ endif
RRC_OBJS += $(RRC_DIR)/rrc_eNB.o RRC_OBJS += $(RRC_DIR)/rrc_eNB.o
RRC_OBJS += $(RRC_DIR)/rrc_eNB_S1AP.o RRC_OBJS += $(RRC_DIR)/rrc_eNB_S1AP.o
ifdef USE_MME
RRC_OBJS += $(RRC_DIR)/rrc_eNB_GTPV1U.o
endif
RRC_OBJS += $(RRC_DIR)/rrc_common.o RRC_OBJS += $(RRC_DIR)/rrc_common.o
RRC_OBJS += $(RRC_DIR)/L2_interface.o RRC_OBJS += $(RRC_DIR)/L2_interface.o
......
...@@ -663,7 +663,7 @@ uint8_t do_SIB2_AT4(uint8_t Mod_id, ...@@ -663,7 +663,7 @@ uint8_t do_SIB2_AT4(uint8_t Mod_id,
(*sib2)->radioResourceConfigCommon.prach_Config.prach_ConfigInfo.prach_FreqOffset = 0; (*sib2)->radioResourceConfigCommon.prach_Config.prach_ConfigInfo.prach_FreqOffset = 0;
// PDSCH-Config // PDSCH-Config
(*sib2)->radioResourceConfigCommon.pdsch_ConfigCommon.referenceSignalPower=24; (*sib2)->radioResourceConfigCommon.pdsch_ConfigCommon.referenceSignalPower=-24;
(*sib2)->radioResourceConfigCommon.pdsch_ConfigCommon.p_b=0; (*sib2)->radioResourceConfigCommon.pdsch_ConfigCommon.p_b=0;
// PUSCH-Config // PUSCH-Config
...@@ -1489,7 +1489,7 @@ uint8_t do_RRCConnectionSetup(uint8_t Mod_id, ...@@ -1489,7 +1489,7 @@ uint8_t do_RRCConnectionSetup(uint8_t Mod_id,
physicalConfigDedicated2->uplinkPowerControlDedicated = CALLOC(1,sizeof(*physicalConfigDedicated2->uplinkPowerControlDedicated)); physicalConfigDedicated2->uplinkPowerControlDedicated = CALLOC(1,sizeof(*physicalConfigDedicated2->uplinkPowerControlDedicated));
physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH = CALLOC(1,sizeof(*physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH)); physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH = CALLOC(1,sizeof(*physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH));
physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH = CALLOC(1,sizeof(*physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH)); physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH = CALLOC(1,sizeof(*physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH));
physicalConfigDedicated2->cqi_ReportConfig = NULL;//CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig)); physicalConfigDedicated2->cqi_ReportConfig = CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig));
physicalConfigDedicated2->soundingRS_UL_ConfigDedicated = NULL;//CALLOC(1,sizeof(*physicalConfigDedicated2->soundingRS_UL_ConfigDedicated)); physicalConfigDedicated2->soundingRS_UL_ConfigDedicated = NULL;//CALLOC(1,sizeof(*physicalConfigDedicated2->soundingRS_UL_ConfigDedicated));
physicalConfigDedicated2->antennaInfo = CALLOC(1,sizeof(*physicalConfigDedicated2->antennaInfo)); physicalConfigDedicated2->antennaInfo = CALLOC(1,sizeof(*physicalConfigDedicated2->antennaInfo));
physicalConfigDedicated2->schedulingRequestConfig = CALLOC(1,sizeof(*physicalConfigDedicated2->schedulingRequestConfig)); physicalConfigDedicated2->schedulingRequestConfig = CALLOC(1,sizeof(*physicalConfigDedicated2->schedulingRequestConfig));
...@@ -1544,11 +1544,16 @@ uint8_t do_RRCConnectionSetup(uint8_t Mod_id, ...@@ -1544,11 +1544,16 @@ uint8_t do_RRCConnectionSetup(uint8_t Mod_id,
physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.bits_unused=0; physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.bits_unused=0;
// CQI ReportConfig // CQI ReportConfig
/*
physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportModeAperiodic=CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportModeAperiodic)); physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportModeAperiodic=CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportModeAperiodic));
assign_enum(physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportModeAperiodic, #ifdef Rel10
CQI_ReportConfig__cqi_ReportModeAperiodic_rm30); // HLC CQI, no PMI *physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportModeAperiodic= CQI_ReportModeAperiodic_rm30;
#else
*physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportModeAperiodic=CQI_ReportConfig__cqi_ReportModeAperiodic_rm30; // HLC CQI, no PMI
#endif
physicalConfigDedicated2->cqi_ReportConfig->nomPDSCH_RS_EPRE_Offset = 0; // 0 dB physicalConfigDedicated2->cqi_ReportConfig->nomPDSCH_RS_EPRE_Offset = 0; // 0 dB
physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic=NULL;
/*
physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic=CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic)); physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic=CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic));
physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->present = CQI_ReportPeriodic_PR_setup; physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->present = CQI_ReportPeriodic_PR_setup;
physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.cqi_PUCCH_ResourceIndex = 0; // n2_pucch physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.cqi_PUCCH_ResourceIndex = 0; // n2_pucch
......
...@@ -74,6 +74,7 @@ ...@@ -74,6 +74,7 @@
#if defined(ENABLE_USE_MME) #if defined(ENABLE_USE_MME)
# include "rrc_eNB_S1AP.h" # include "rrc_eNB_S1AP.h"
# include "rrc_eNB_GTPV1U.h"
# if defined(ENABLE_ITTI) # if defined(ENABLE_ITTI)
# else # else
# include "../../S1AP/s1ap_eNB.h" # include "../../S1AP/s1ap_eNB.h"
...@@ -709,7 +710,7 @@ static void rrc_eNB_generate_defaultRRCConnectionReconfiguration( ...@@ -709,7 +710,7 @@ static void rrc_eNB_generate_defaultRRCConnectionReconfiguration(
// NN: this is the 1st DRB for this ue, so set it to 1 // NN: this is the 1st DRB for this ue, so set it to 1
DRB_config->drb_Identity = (DRB_Identity_t) 1; // (ue_mod_idP+1); //allowed values 1..32 DRB_config->drb_Identity = (DRB_Identity_t) 1; // (ue_mod_idP+1); //allowed values 1..32
DRB_config->logicalChannelIdentity = CALLOC(1, sizeof(long)); DRB_config->logicalChannelIdentity = CALLOC(1, sizeof(long));
*(DRB_config->logicalChannelIdentity) = (long)3; *(DRB_config->logicalChannelIdentity) = (long)5;
DRB_rlc_config = CALLOC(1, sizeof(*DRB_rlc_config)); DRB_rlc_config = CALLOC(1, sizeof(*DRB_rlc_config));
DRB_config->rlc_Config = DRB_rlc_config; DRB_config->rlc_Config = DRB_rlc_config;
...@@ -3094,6 +3095,11 @@ void *rrc_enb_task( ...@@ -3094,6 +3095,11 @@ void *rrc_enb_task(
case S1AP_UE_CONTEXT_RELEASE_REQ: case S1AP_UE_CONTEXT_RELEASE_REQ:
rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_REQ(msg_p, msg_name_p, instance); rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_REQ(msg_p, msg_name_p, instance);
break; break;
case GTPV1U_ENB_CREATE_TUNNEL_RESP:
rrc_eNB_process_GTPV1U_CREATE_TUNNEL_RESP(msg_p, msg_name_p, instance);
break;
# endif # endif
/* Messages from eNB app */ /* Messages from eNB app */
......
This diff is collapsed.
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
# include "s1ap_eNB.h" # include "s1ap_eNB.h"
# include "nas_ue_task.h" # include "nas_ue_task.h"
# include "udp_eNB_task.h" # include "udp_eNB_task.h"
# include "gtpv1u_eNB_task.h"
# endif # endif
# if defined(ENABLE_RAL) # if defined(ENABLE_RAL)
# include "lteRALue.h" # include "lteRALue.h"
...@@ -74,6 +75,12 @@ int create_tasks(uint32_t enb_nb, uint32_t ue_nb) ...@@ -74,6 +75,12 @@ int create_tasks(uint32_t enb_nb, uint32_t ue_nb)
LOG_E(EMU, "Create task for UDP failed\n"); LOG_E(EMU, "Create task for UDP failed\n");
return -1; return -1;
} }
if (itti_create_task (TASK_GTPV1_U, &gtpv1u_eNB_task, NULL) < 0)
{
LOG_E(EMU, "Create task for GTPV1U failed\n");
return -1;
}
} }
if (ue_nb > 0) if (ue_nb > 0)
......
...@@ -94,7 +94,8 @@ def execute(oai, user, pw, logfile,logdir): ...@@ -94,7 +94,8 @@ def execute(oai, user, pw, logfile,logdir):
name = 'Run oai.dlsim.perf.70%' name = 'Run oai.dlsim.perf.70%'
diag = 'no diagnostic is available, check the log file' diag = 'no diagnostic is available, check the log file'
for i in range(len(PRB)): for i in range(len(PRB)):
for j in range(len(MCS)): #for j in range(len(MCS)):
for j in range(0,28):
for k in range(1,ANT_TX): for k in range(1,ANT_TX):
for m in range (1,ANT_RX): for m in range (1,ANT_RX):
for n in range(1,PDCCH): for n in range(1,PDCCH):
...@@ -103,8 +104,10 @@ def execute(oai, user, pw, logfile,logdir): ...@@ -103,8 +104,10 @@ def execute(oai, user, pw, logfile,logdir):
for q in range(MIN_SNR,MAX_SNR): for q in range(MIN_SNR,MAX_SNR):
#if if PRB[i] : #if if PRB[i] :
conf = '-B' + str(PRB[i]) + ' -m'+str(MCS[j]) + ' -y'+str(k) + ' -z'+str(m) +' -c'+str(n) + ' -g'+str(CHANNEL[o]) + ' -x'+str(p) + ' -s'+str(q) + ' -w1.0 -f.1 -n500 -P -O80' #+ OPT #conf = '-B' + str(PRB[i]) + ' -m'+str(MCS[j]) + ' -y'+str(k) + ' -z'+str(m) +' -c'+str(n) + ' -g'+str(CHANNEL[o]) + ' -x'+str(p) + ' -s'+str(q) + ' -w1.0 -f.1 -n500 -P -O80' #+ OPT
trace = logdir + '/time_meas' + '_prb'+str(PRB[i])+'_mcs'+ str(MCS[j])+ '_anttx' + str(k)+ '_antrx' + str(m) + '_pdcch' + str(n) + '_channel' +str(CHANNEL[o]) + '_tx' +str(p) + '_snr' +str(q)+'.'+case+str(test)+ '.log' #trace = logdir + '/time_meas' + '_prb'+str(PRB[i])+'_mcs'+ str(MCS[j])+ '_anttx' + str(k)+ '_antrx' + str(m) + '_pdcch' + str(n) + '_channel' +str(CHANNEL[o]) + '_tx' +str(p) + '_snr' +str(q)+'.'+case+str(test)+ '.log'
conf = '-B' + str(PRB[i]) + ' -m'+str(j) + ' -y'+str(k) + ' -z'+str(m) +' -c'+str(n) + ' -g'+str(CHANNEL[o]) + ' -x'+str(p) + ' -s'+str(q) + ' -w1.0 -f.1 -n500 -P -O80' #+ OPT
trace = logdir + '/time_meas' + '_prb'+str(PRB[i])+'_mcs'+ str(j)+ '_anttx' + str(k)+ '_antrx' + str(m) + '_pdcch' + str(n) + '_channel' +str(CHANNEL[o]) + '_tx' +str(p) + '_snr' +str(q)+'.'+case+str(test)+ '.log'
tee = ' 2>&1 | tee ' + trace tee = ' 2>&1 | tee ' + trace
match = oai.send_expect_re('./dlsim.rel8 ' + conf + tee, 'passed', 0, 1000) match = oai.send_expect_re('./dlsim.rel8 ' + conf + tee, 'passed', 0, 1000)
#print conf #print conf
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment