From 8bff2cff3e8f5a25fbacab1c56dbd86bdf5158be Mon Sep 17 00:00:00 2001 From: Imad ALAWE <imad.Alawe@b-com.com> Date: Fri, 1 Jul 2016 15:49:12 +0200 Subject: [PATCH] BUGFIX(GTP-U): Add missing ip rules in order to have point to point connection --- cmake_targets/tools/run_enb_ue_virt_s1 | 6 ------ .../ESM/DedicatedEpsBearerContextActivation.c | 2 +- .../ESM/DefaultEpsBearerContextActivation.c | 2 +- openair3/NAS/UE/ESM/esm_ebr_context.c | 20 ++++++++++++------- openair3/NAS/UE/ESM/esm_ebr_context.h | 2 +- targets/SIMU/USER/oaisim.c | 3 +++ 6 files changed, 19 insertions(+), 16 deletions(-) diff --git a/cmake_targets/tools/run_enb_ue_virt_s1 b/cmake_targets/tools/run_enb_ue_virt_s1 index ecd5993ff47..ff659468038 100755 --- a/cmake_targets/tools/run_enb_ue_virt_s1 +++ b/cmake_targets/tools/run_enb_ue_virt_s1 @@ -247,12 +247,6 @@ function main() if [ $? -ne 0 ]; then echo "200 lte " >> /etc/iproute2/rt_tables fi - ip rule add fwmark 1 table lte - ifconfig oip1 up - ip route add default dev oip1 table lte - # the actual IP address depends on the EPC/MME config file for address pool - ip route add from 192.188.0.0/24 table lte - ip route add to 192.188.0.0/24 table lte exe_arguments="$exe_arguments -s15 -AAWGN -y1 -b1 -u1 -Q0" diff --git a/openair3/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c b/openair3/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c index 3a32d3040d3..e2133563324 100644 --- a/openair3/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c +++ b/openair3/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c @@ -165,7 +165,7 @@ int esm_proc_dedicated_eps_bearer_context_request(nas_user_t *user, int ebi, int *esm_cause = ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTER; } else { /* Create new dedicated EPS bearer context */ - default_ebi = esm_ebr_context_create(esm_data, pid, ebi, FALSE, qos, tft); + default_ebi = esm_ebr_context_create(esm_data, user->ueid, pid, ebi, FALSE, qos, tft); if (default_ebi != ESM_EBI_UNASSIGNED) { /* Dedicated EPS bearer contextx successfully created */ diff --git a/openair3/NAS/UE/ESM/DefaultEpsBearerContextActivation.c b/openair3/NAS/UE/ESM/DefaultEpsBearerContextActivation.c index 71421a475d0..a438d65ddb2 100644 --- a/openair3/NAS/UE/ESM/DefaultEpsBearerContextActivation.c +++ b/openair3/NAS/UE/ESM/DefaultEpsBearerContextActivation.c @@ -127,7 +127,7 @@ int esm_proc_default_eps_bearer_context_request(nas_user_t *user, int pid, int e if (ebi != ESM_EBI_UNASSIGNED) { /* Create new default EPS bearer context */ - ebi = esm_ebr_context_create(esm_data, pid, ebi, TRUE, qos, NULL); + ebi = esm_ebr_context_create(esm_data, user->ueid, pid, ebi, TRUE, qos, NULL); if (ebi != ESM_EBI_UNASSIGNED) { /* Default EPS bearer contextx successfully created */ diff --git a/openair3/NAS/UE/ESM/esm_ebr_context.c b/openair3/NAS/UE/ESM/esm_ebr_context.c index 4ce201260aa..bfa4a04cc82 100644 --- a/openair3/NAS/UE/ESM/esm_ebr_context.c +++ b/openair3/NAS/UE/ESM/esm_ebr_context.c @@ -98,7 +98,7 @@ static int _esm_ebr_context_check_precedence(const network_tft_t *, ** ** ***************************************************************************/ int esm_ebr_context_create( - esm_data_t *esm_data, + esm_data_t *esm_data, int ueid, int pid, int ebi, int is_default, const network_qos_t *qos, const network_tft_t *tft) { @@ -206,7 +206,7 @@ int esm_ebr_context_create( char *netmask = NULL; char broadcast[INET_ADDRSTRLEN]; struct in_addr in_addr; - char command_line[128]; + char command_line[500]; int res; switch (pdn->type) { @@ -272,11 +272,17 @@ int esm_ebr_context_create( } res = sprintf(command_line, - "ifconfig oip1 %s netmask %s broadcast %s", - ipv4_addr, netmask, broadcast); - (void)res; /* avoid gcc warning "set but not used" */ - // AssertFatal((res > 0) && (res < 128), - // "error in system command line"); + "ifconfig oip%d %s netmask %s broadcast %s up && " + "ip rule add from %s/32 table %d && " + "ip rule add to %s/32 table %d && " + "ip route add default dev oip%d table %d", + ueid + 1, ipv4_addr, netmask, broadcast, + ipv4_addr, ueid + 201, + ipv4_addr, ueid + 201, + ueid + 1, ueid + 201); + if ( res<0 ) { + LOG_TRACE(WARNING, "ESM-PROC - Failed to system command string"); + } LOG_TRACE(INFO, "ESM-PROC - executing %s ", command_line); diff --git a/openair3/NAS/UE/ESM/esm_ebr_context.h b/openair3/NAS/UE/ESM/esm_ebr_context.h index ceb6553846b..a0016555a30 100644 --- a/openair3/NAS/UE/ESM/esm_ebr_context.h +++ b/openair3/NAS/UE/ESM/esm_ebr_context.h @@ -66,7 +66,7 @@ typedef enum { /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -int esm_ebr_context_create(esm_data_t *esm_data, int pid, int ebi, int is_default, +int esm_ebr_context_create(esm_data_t *esm_data, int ueid, int pid, int ebi, int is_default, const network_qos_t *qos, const network_tft_t *tft); int esm_ebr_context_release(nas_user_t *user, int ebi, int *pid, int *bid); diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c index 3a06a627803..864ffc720e1 100644 --- a/targets/SIMU/USER/oaisim.c +++ b/targets/SIMU/USER/oaisim.c @@ -1886,6 +1886,9 @@ oai_shutdown (void) for (int i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) if (oai_emulation.info.oai_ifup[i] == 1) { char interfaceName[8]; + char command_line[100]; + sprintf(command_line, "while ip rule del table %d; do true; done",i+201); + system(command_line); snprintf (interfaceName, sizeof(interfaceName), "oai%d", i); bringInterfaceUp (interfaceName, 0); } -- GitLab