Commit 97a648e3 authored by Melissa Elkadi's avatar Melissa Elkadi

IP Traffic not working, tun if established by NRUE

Updated the configuration files. Added a sleep to
ensure that the LTE UE gets attached to the EPC
before the bearer is modified to be gNB. Updated
the ifconfig tunnel up command to be brought up
by the NR UE socket when in NSA mode. Lastly,
started the gNB PDCP layer in S1 mode.
parent 24245d88
...@@ -172,7 +172,7 @@ eNBs = ...@@ -172,7 +172,7 @@ eNBs =
////////// MME parameters: ////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.61.3"; mme_ip_address = ( { ipv4 = "192.168.61.195";
ipv6 = "192:168:30::17"; ipv6 = "192:168:30::17";
port = 36412 ; port = 36412 ;
active = "yes"; active = "yes";
...@@ -180,7 +180,7 @@ eNBs = ...@@ -180,7 +180,7 @@ eNBs =
} }
); );
enable_measurement_reports = "no"; enable_measurement_reports = "yes";
///X2 ///X2
enable_x2 = "yes"; enable_x2 = "yes";
...@@ -191,9 +191,9 @@ eNBs = ...@@ -191,9 +191,9 @@ eNBs =
NETWORK_INTERFACES : NETWORK_INTERFACES :
{ {
ENB_INTERFACE_NAME_FOR_S1_MME = "ctrl"; ENB_INTERFACE_NAME_FOR_S1_MME = "ctrl0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "172.16.0.1"; ENB_IPV4_ADDRESS_FOR_S1_MME = "172.16.0.1";
ENB_INTERFACE_NAME_FOR_S1U = "ctrl"; ENB_INTERFACE_NAME_FOR_S1U = "ctrl0";
ENB_IPV4_ADDRESS_FOR_S1U = "172.16.0.1"; ENB_IPV4_ADDRESS_FOR_S1U = "172.16.0.1";
ENB_PORT_FOR_S1U = 2152; # Spec 2152 ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "172.16.0.1"; ENB_IPV4_ADDRESS_FOR_X2C = "172.16.0.1";
......
...@@ -722,7 +722,7 @@ if(!IS_SOFTMODEM_NOS1) ...@@ -722,7 +722,7 @@ if(!IS_SOFTMODEM_NOS1)
#endif #endif
LOG_I(HW, "Version: %s\n", PACKAGE_VERSION); LOG_I(HW, "Version: %s\n", PACKAGE_VERSION);
if(IS_SOFTMODEM_NOS1) if(!IS_SOFTMODEM_NOS1)
init_pdcp(); init_pdcp();
if (RC.nb_nr_L1_inst > 0) if (RC.nb_nr_L1_inst > 0)
......
...@@ -469,8 +469,8 @@ void init_pdcp(int ue_id) { ...@@ -469,8 +469,8 @@ void init_pdcp(int ue_id) {
/*if (rlc_module_init() != 0) { /*if (rlc_module_init() != 0) {
LOG_I(RLC, "Problem at RLC initiation \n"); LOG_I(RLC, "Problem at RLC initiation \n");
} }
pdcp_layer_init();
nr_DRB_preconfiguration();*/ nr_DRB_preconfiguration();*/
pdcp_layer_init();
nr_pdcp_module_init(pdcp_initmask, ue_id); nr_pdcp_module_init(pdcp_initmask, ue_id);
pdcp_set_rlc_data_req_func((send_rlc_data_req_func_t) rlc_data_req); pdcp_set_rlc_data_req_func((send_rlc_data_req_func_t) rlc_data_req);
pdcp_set_pdcp_data_ind_func((pdcp_data_ind_func_t) pdcp_data_ind); pdcp_set_pdcp_data_ind_func((pdcp_data_ind_func_t) pdcp_data_ind);
......
...@@ -4624,7 +4624,7 @@ void ue_measurement_report_triggering(protocol_ctxt_t *const ctxt_pP, const uint ...@@ -4624,7 +4624,7 @@ void ue_measurement_report_triggering(protocol_ctxt_t *const ctxt_pP, const uint
if (is_state_connected && is_t304_inactive && have_meas_flag) { if (is_state_connected && is_t304_inactive && have_meas_flag) {
LOG_I(RRC,"[UE %d] Frame %d: Triggering generation of Meas Report for NR_r15. count = %d\n", LOG_I(RRC,"[UE %d] Frame %d: Triggering generation of Meas Report for NR_r15. count = %d\n",
ctxt_pP->module_id, ctxt_pP->frame, ue->subframeCount); ctxt_pP->module_id, ctxt_pP->frame, ue->subframeCount);
usleep(200000);
if (ue->measReportList[i][j] == NULL) { if (ue->measReportList[i][j] == NULL) {
ue->measReportList[i][j] = malloc(sizeof(MEAS_REPORT_LIST)); ue->measReportList[i][j] = malloc(sizeof(MEAS_REPORT_LIST));
} }
......
...@@ -592,14 +592,20 @@ rrc_eNB_send_S1AP_INITIAL_CONTEXT_SETUP_RESP( ...@@ -592,14 +592,20 @@ rrc_eNB_send_S1AP_INITIAL_CONTEXT_SETUP_RESP(
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).eNB_ue_s1ap_id = ue_context_pP->ue_context.eNB_ue_s1ap_id; S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).eNB_ue_s1ap_id = ue_context_pP->ue_context.eNB_ue_s1ap_id;
for (e_rab = 0; e_rab < ue_context_pP->ue_context.nb_of_e_rabs; e_rab++) { for (e_rab = 0; e_rab < ue_context_pP->ue_context.nb_of_e_rabs; e_rab++) {
if (ue_context_pP->ue_context.e_rab[e_rab].status == E_RAB_STATUS_DONE) { if (ue_context_pP->ue_context.e_rab[e_rab].status == E_RAB_STATUS_DONE || ue_context_pP->ue_context.e_rab[e_rab].status == E_RAB_STATUS_TOMODIFY) {
e_rabs_done++; e_rabs_done++;
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).e_rabs[e_rab].e_rab_id = ue_context_pP->ue_context.e_rab[e_rab].param.e_rab_id; S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).e_rabs[e_rab].e_rab_id = ue_context_pP->ue_context.e_rab[e_rab].param.e_rab_id;
// TODO add other information from S1-U when it will be integrated // TODO add other information from S1-U when it will be integrated
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).e_rabs[e_rab].gtp_teid = ue_context_pP->ue_context.enb_gtp_teid[e_rab]; S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).e_rabs[e_rab].gtp_teid = ue_context_pP->ue_context.enb_gtp_teid[e_rab];
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).e_rabs[e_rab].eNB_addr = ue_context_pP->ue_context.enb_gtp_addrs[e_rab]; S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).e_rabs[e_rab].eNB_addr = ue_context_pP->ue_context.enb_gtp_addrs[e_rab];
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).e_rabs[e_rab].eNB_addr.length = 4; S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).e_rabs[e_rab].eNB_addr.length = 4;
if (ue_context_pP->ue_context.e_rab[e_rab].status == E_RAB_STATUS_DONE) {
ue_context_pP->ue_context.e_rab[e_rab].status = E_RAB_STATUS_ESTABLISHED; ue_context_pP->ue_context.e_rab[e_rab].status = E_RAB_STATUS_ESTABLISHED;
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).nb_of_e_rabs = e_rabs_done;
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).nb_of_e_rabs_failed = e_rabs_failed;
itti_send_msg_to_task (TASK_S1AP, ctxt_pP->instance, msg_p);
}
} else { } else {
e_rabs_failed++; e_rabs_failed++;
ue_context_pP->ue_context.e_rab[e_rab].status = E_RAB_STATUS_FAILED; ue_context_pP->ue_context.e_rab[e_rab].status = E_RAB_STATUS_FAILED;
...@@ -618,9 +624,6 @@ rrc_eNB_send_S1AP_INITIAL_CONTEXT_SETUP_RESP( ...@@ -618,9 +624,6 @@ rrc_eNB_send_S1AP_INITIAL_CONTEXT_SETUP_RESP(
ue_context_pP->ue_id_rnti, ue_context_pP->ue_id_rnti,
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).eNB_ue_s1ap_id, S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).eNB_ue_s1ap_id,
e_rabs_done, e_rabs_failed); e_rabs_done, e_rabs_failed);
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).nb_of_e_rabs = e_rabs_done;
S1AP_INITIAL_CONTEXT_SETUP_RESP (msg_p).nb_of_e_rabs_failed = e_rabs_failed;
itti_send_msg_to_task (TASK_S1AP, ctxt_pP->instance, msg_p);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
......
...@@ -276,7 +276,8 @@ int esm_ebr_context_create( ...@@ -276,7 +276,8 @@ int esm_ebr_context_create(
ipv4_addr, ueid + 10000, ipv4_addr, ueid + 10000,
UE_NAS_USE_TUN ? "oaitun_ue" : "oip", UE_NAS_USE_TUN ? "oaitun_ue" : "oip",
ueid + 1, ueid + 10000); ueid + 1, ueid + 10000);
if (get_softmodem_params()->nsa == 0)
{
res = sprintf(command_line, res = sprintf(command_line,
"ip address add %s/%d broadcast %s dev %s%d && " "ip address add %s/%d broadcast %s dev %s%d && "
"ip link set %s%d up && " "ip link set %s%d up && "
...@@ -305,8 +306,7 @@ int esm_ebr_context_create( ...@@ -305,8 +306,7 @@ int esm_ebr_context_create(
* The processes interact through standard pipes. See * The processes interact through standard pipes. See
* common/utils/system.c for details. * common/utils/system.c for details.
*/ */
if (get_softmodem_params()->nsa == 0)
{
LOG_TRACE(INFO, "Melissa Elkadi ESM-PROC - executing %s ", LOG_TRACE(INFO, "Melissa Elkadi ESM-PROC - executing %s ",
command_line); command_line);
if (background_system(command_line) != 0) if (background_system(command_line) != 0)
...@@ -315,6 +315,23 @@ int esm_ebr_context_create( ...@@ -315,6 +315,23 @@ int esm_ebr_context_create(
} }
} }
else if (get_softmodem_params()->nsa) { else if (get_softmodem_params()->nsa) {
res = sprintf(command_line,
"ip address add %s/%d broadcast %s dev %s%d && "
"ip link set %s%d up && "
"ip rule add from %s/32 table %d && "
"ip rule add to %s/32 table %d && "
"ip route add default dev %s%d table %d",
ipv4_addr, netmask, broadcast,
UE_NAS_USE_TUN ? "oaitun_nru" : "oip", ueid + 1,
UE_NAS_USE_TUN ? "oaitun_nru" : "oip", ueid + 1,
ipv4_addr, ueid + 10000,
ipv4_addr, ueid + 10000,
UE_NAS_USE_TUN ? "oaitun_nru" : "oip",
ueid + 1, ueid + 10000);
if ( res<0 ) {
LOG_TRACE(WARNING, "ESM-PROC - Failed to system command string");
}
LOG_I(NAS, "Melissa Elkadi, sending NAS_OAI_TUN_NSA msg to LTE UE via itti\n"); LOG_I(NAS, "Melissa Elkadi, sending NAS_OAI_TUN_NSA msg to LTE UE via itti\n");
MessageDef *msg_p = itti_alloc_new_message(TASK_NAS_UE, 0, NAS_OAI_TUN_NSA); MessageDef *msg_p = itti_alloc_new_message(TASK_NAS_UE, 0, NAS_OAI_TUN_NSA);
memcpy(NAS_OAI_TUN_NSA(msg_p).buffer, command_line, sizeof(NAS_OAI_TUN_NSA(msg_p).buffer)); memcpy(NAS_OAI_TUN_NSA(msg_p).buffer, command_line, sizeof(NAS_OAI_TUN_NSA(msg_p).buffer));
......
...@@ -225,7 +225,7 @@ gNBs = ...@@ -225,7 +225,7 @@ gNBs =
////////// MME parameters: ////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.61.3"; mme_ip_address = ( { ipv4 = "192.168.61.195";
ipv6 = "192:168:30::17"; ipv6 = "192:168:30::17";
active = "yes"; active = "yes";
preference = "ipv4"; preference = "ipv4";
...@@ -248,9 +248,9 @@ gNBs = ...@@ -248,9 +248,9 @@ gNBs =
{ # All of these have to be IP addr of gNB { # All of these have to be IP addr of gNB
# if in CORE container, make it 172.16.0.X # if in CORE container, make it 172.16.0.X
# if not launched in CORE, can set to lo (127.0.0.2) # if not launched in CORE, can set to lo (127.0.0.2)
GNB_INTERFACE_NAME_FOR_S1_MME = "ctrl"; GNB_INTERFACE_NAME_FOR_S1_MME = "ctrl0";
GNB_IPV4_ADDRESS_FOR_S1_MME = "172.16.0.2"; GNB_IPV4_ADDRESS_FOR_S1_MME = "172.16.0.2";
GNB_INTERFACE_NAME_FOR_S1U = "ctrl"; GNB_INTERFACE_NAME_FOR_S1U = "ctrl0";
GNB_IPV4_ADDRESS_FOR_S1U = "172.16.0.2"; GNB_IPV4_ADDRESS_FOR_S1U = "172.16.0.2";
GNB_PORT_FOR_S1U = 2152; # Spec 2152 GNB_PORT_FOR_S1U = 2152; # Spec 2152
GNB_IPV4_ADDRESS_FOR_X2C = "172.16.0.2"; GNB_IPV4_ADDRESS_FOR_X2C = "172.16.0.2";
......
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