From 15435aefc096496d48e7df511a2bbf24ef5efd50 Mon Sep 17 00:00:00 2001
From: Lionel Gauthier <lionel.gauthier@eurecom.fr>
Date: Wed, 26 Mar 2014 09:42:58 +0000
Subject: [PATCH] Update ipv4 s1U

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5216 818b1a75-f10b-46b9-bf7c-635c3b92a50f
---
 openair-cn/GTPV1-U/gtpv1u_eNB.c      | 24 +++++++++++++++++-------
 openair-cn/GTPV1-U/gtpv1u_eNB_defs.h |  4 ++--
 2 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/openair-cn/GTPV1-U/gtpv1u_eNB.c b/openair-cn/GTPV1-U/gtpv1u_eNB.c
index 20f40135f5..f078f9eb3f 100644
--- a/openair-cn/GTPV1-U/gtpv1u_eNB.c
+++ b/openair-cn/GTPV1-U/gtpv1u_eNB.c
@@ -568,7 +568,13 @@ static int gtpv1u_create_s1u_tunnel(gtpv1u_enb_create_tunnel_req_t *create_tunne
             gtpv1u_ue_data_p = calloc (1, sizeof(gtpv1u_ue_data_t));
             gtpv1u_ue_data_p->ue_id       = create_tunnel_req_pP->ue_index;
             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"
+            memcpy(&GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).enb_addr.buffer,
+                &gtpv1u_data_g.enb_ip_address_for_S1u_S12_S4_up,
+                sizeof (in_addr_t));
+            GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).enb_addr.length = sizeof (in_addr_t);
+            AssertFatal(create_tunnel_req_pP->sgw_addr[i].length == 4, "Bad transport layer address for next operation, TO DO");
+            gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].sgw_ip_addr = *((in_addr_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].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];
@@ -578,8 +584,12 @@ static int gtpv1u_create_s1u_tunnel(gtpv1u_enb_create_tunnel_req_t *create_tunne
         } else if (hash_rc == HASH_TABLE_OK) {
             gtpv1u_ue_data_p->ue_id       = create_tunnel_req_pP->ue_index;
             gtpv1u_ue_data_p->instance_id = 0; // TO DO
-            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;"
+            memcpy(&GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).enb_addr.buffer,
+                &gtpv1u_data_g.enb_ip_address_for_S1u_S12_S4_up,
+                sizeof (in_addr_t));
+            GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).enb_addr.length = sizeof (in_addr_t);
+            gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].sgw_ip_addr = *((in_addr_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].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];
@@ -651,10 +661,10 @@ static int gtpv1u_delete_s1u_tunnel(gtpv1u_enb_delete_tunnel_req_t *req_pP)
     //-----------------------
     hash_rc = hashtable_get(gtpv1u_data_g.ue_mapping, req_pP->ue_index, (void**)&gtpv1u_ue_data_p);
     if (hash_rc == HASH_TABLE_OK) {
-        gtpv1u_ue_data_p->bearers[req_pP->eps_bearer_id - GTPV1U_BEARER_OFFSET].state    = BEARER_DOWN;
-        gtpv1u_ue_data_p->bearers[req_pP->eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_eNB = 0;
-        gtpv1u_ue_data_p->bearers[req_pP->eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_sgw = 0;
-#warning "TO DO TO DO gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].sgw_ip_addr"
+        gtpv1u_ue_data_p->bearers[req_pP->eps_bearer_id - GTPV1U_BEARER_OFFSET].state       = BEARER_DOWN;
+        gtpv1u_ue_data_p->bearers[req_pP->eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_eNB    = 0;
+        gtpv1u_ue_data_p->bearers[req_pP->eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_sgw    = 0;
+        gtpv1u_ue_data_p->bearers[req_pP->eps_bearer_id - GTPV1U_BEARER_OFFSET].sgw_ip_addr = 0;
         gtpv1u_ue_data_p->num_bearers -= 1;
 
         if (gtpv1u_ue_data_p->num_bearers == 0) {
diff --git a/openair-cn/GTPV1-U/gtpv1u_eNB_defs.h b/openair-cn/GTPV1-U/gtpv1u_eNB_defs.h
index f8c13e8cc5..871609689c 100644
--- a/openair-cn/GTPV1-U/gtpv1u_eNB_defs.h
+++ b/openair-cn/GTPV1-U/gtpv1u_eNB_defs.h
@@ -70,7 +70,7 @@ typedef struct gtpv1u_bearer_s {
     /* TEID used in dl and ul */
     teid_t         teid_eNB;         ///< eNB TEID
     teid_t         teid_sgw;         ///< Remote TEID
-    uint32_t       sgw_ip_addr;
+    in_addr_t      sgw_ip_addr;
     tcp_udp_port_t port;
     //NwGtpv1uStackSessionHandleT stack_session;
     bearer_state_t state;
@@ -102,7 +102,7 @@ typedef struct gtpv1u_data_s{
 
     //RB_HEAD(gtpv1u_ue_map, gtpv1u_ue_data_s) gtpv1u_ue_map_head;
     /* Local IP address to use */
-    uint32_t              enb_ip_address_for_S1u_S12_S4_up;
+    in_addr_t             enb_ip_address_for_S1u_S12_S4_up;
     char                 *ip_addr;
     tcp_udp_port_t        enb_port_for_S1u_S12_S4_up;
     /* UDP internal data */
-- 
GitLab